Wie verbinde ich geteilte FLV-Dateien?

866
Alan Corey

Ich bin am dritten Tag und versuche, ein 4-Minuten-Video herunterzuladen. Es ist ein Flash-FLV, der in drei Teile aufgeteilt ist. Die ersten beiden sind etwa 5 MB, der dritte etwa 3 MB.

Nur der erste Teil hat normale FLV-Header, die nächsten zwei haben meistens nur einen FLV am Anfang. Ich habe mich nicht bemüht, selbst etwas zu schreiben, habe nur ein paar hundert Megabyte Junk-Windows-Software heruntergeladen und ausprobiert, die dies nicht wirklich tut.

Es stellt sich heraus, dass Sie die Videoteile nicht herunterladen müssen. Sie können sie aus dem Cache Ihres Browsers ziehen, sobald Sie sie einmal abgespielt haben. Ich habe CamStudio ausprobiert, um das Video während der Wiedergabe vom Bildschirm aufzunehmen, aber mein schnellster Computer ist nicht schnell genug.

Ich kann das nicht in Echtzeit machen. Ich würde das gerne von OpenBSD aus machen, aber ich habe einen Rechner in Windows gebootet, weil es kein Flash für OpenBSD gibt. Ich kann es mit MPlayer (Windows oder OpenBSD) abspielen. Der Versuch, mit MEncoder eine einfache Verknüpfung der Parts herzustellen, ergibt ein Video, das beim ersten Split stoppt. Versuchte auch FFmpeg. Ich möchte es in etwas normaleres konvertieren, wie MP4 oder AVI.

Die 10.1-Spezifikation unterscheidet sich erheblich von 10.0 (Hotlink zu PDF)

Die drei FLVs im MC-Viewer (Bild); der erste ist ganz anders:

Verknüpfung

0
Haben Sie überprüft, ob es sich tatsächlich nicht um eine Datei in 3 Abschnitten handelt? Wie bei `cat chuck1 chuck2 chunk3> file.flv` infixed vor 8 Jahren 0
Übrigens kann ffmpeg ein .flv-Video als Containerformat aufnehmen. Als ich für ein Mist-Netbook ohne gute h264-Unterstützung transcodiert hatte (aber OK, mpeg2-Unterstützung), verwendete ich Dinge wie 'ffmpeg -i input.flv -acodec libmp3lame -vcodec mpeg2video -qscale 5 -y out.mkv` infixed vor 8 Jahren 0
Ja, Katze war das Erste, was ich ausprobiert habe, aber es ist kein einfacher Bruch. Wenn ich mir die Dateien mit dem Viewer in mc ansehe, hat jeder Teil Felder wie video_format, start_time, video_codec. Was ich denke, sind die Zuschauer, die sie interpretieren, weil ich das nicht in den rohen Bytes der Datei sehe. Aber nur der erste Teil ist für mplayer usw. als flv und play akzeptabel. Alan Corey vor 8 Jahren 0
Ich habe Mencoder mehr als ffmpeg verwendet. Interessant über den Container. Ich denke, wenn ich versuche, etwas zu schreiben, muss ich vielleicht den ersten Header analysieren und weitergeben, dann wahrscheinlich die Payloads kopieren und verketten. In jedem Header ist eine Startzeit und ich denke eine Dauer, damit ich sie in die richtige Reihenfolge bringen kann und nicht auf externe Dateidaten angewiesen bin. Alan Corey vor 8 Jahren 0
Ich habe ffmpeg bereits benutzt, um Dateien mit verschiedenen Codecs zu verbinden. Versuchen Sie etwas wie 'ffmpeg -i Datei1.flv -i Datei2.flv -i Datei3.flv -filter_complex concat = n = 3: v = 1: a = 1 -acodec libmp3lame -vcodec mpeg2video -qscale 5 -y out.mkv` Entschuldigung, ich kann nicht testen, ob das völlig richtig ist infixed vor 8 Jahren 0
Ich bekomme "Stream nach Kopf bereits analysiert", dann sieht er ein h264-Video und AAC-Audio Alan Corey vor 8 Jahren 0
Ich bekomme "Stream nach Kopf bereits analysiert", dann sieht er ein h264-Video und einen aac-Audiostream. Dann "fehlendes Bild", "kein Frame" usw. Aber es findet die Streams in allen 3 Dateien, ich sehe Frameraten, h264 / aac-Codecs. Sagt, ich sollte die Analyse verbessern und probesize, aber diese sind nicht auf der Manpage. Alan Corey vor 8 Jahren 0
Bis zu 20000 getestet und nach dem Googeln 5000000 analysiert. Noch fehlendes Bild, dann "Fehler beim Konfigurieren von Filtern" am Ende. Alan Corey vor 8 Jahren 0
https://ffmpeg.org/pipermail/ffmpeg-user/2013-March/014297.html scheint dies zu diskutieren. infixed vor 8 Jahren 0
Versuchen Sie es mit ffmpeg, um die `.flv`-Dateien in` .ts`-Dateien zu konvertieren. Transport Stream Muxing soll es Ihnen ermöglichen, Fragmente durch Konzentrieren zu kombinieren. Es sei denn, es beginnt über Zeitstempel zu klagen. Ich finde das vielleicht problematisch infixed vor 8 Jahren 0
Das Ablegen von Streams funktioniert nicht, da nur die erste Datei richtig geöffnet wird. Dies wurde auch mit dem Mencoder versucht. Ich hatte meine Sondengröße und Analyse auf fast der gesamten Dateigröße. Geben Sie ein großes chaotisches Protokoll unter http://devio.us/~ab1jx/log4a.txt ein Alan Corey vor 8 Jahren 0
leider bin ich an einem ort, an dem sehr seltsame orte im netz gesucht werden. Ich hatte gehofft, als Sie sagten "es findet Streams in allen Dateien", dass es jeden Stream isoliert extrahieren könnte. Wenn Sie in TS transcodiert werden, sollten Sie die Dateien einfach kategorisieren können. Aber ich kann jetzt nicht mehr viel für dich tun infixed vor 8 Jahren 0
devio ist nur ein kostenloses Shell-Konto, das auf einer OpenBSD-Maschine gehostet wird, vielleicht sind sie seltsam. Betrachtet man den Inhalt der flv-Dateien im Betrachter von mc, so ist der erste ganz anders: Es gibt tatsächlich lesbaren Text. Wörter wie Copyleft, Deadzone, dezimiert, sowieso eingeschränkt. Nicht in den späteren Dateien, nur die Signatur FLV in den 1. 3 Bytes. Ich habe eine TS-Datei von der ersten bekommen. Die zweite gab eine 0-Byte-TS-Datei und ffmpeg wurde anscheinend dort beendet. Alan Corey vor 8 Jahren 0
In flv können tatsächliche Flash-Befehle eingebettet sein. Die meisten Filmseiten werden nur als Container verwendet, so dass die Transkodierung funktioniert. Ich fühle mich tatsächlich sicherer, wenn Sie FLV in einen anderen Container umcodieren, denn wer weiß, ob jemand herausfinden kann, wie er Malware-Flash in eine FLV-Datei einfügt. Aber sie könnten etwas Besonderes versuchen. Vielleicht haben sie Flash in Teil eins, das die Datei von Teil 2 packt infixed vor 8 Jahren 0
Malware ist ein Grund, warum ich normalerweise Windows oder Flash nicht benutze. Ich vermute, es ist nur eine Fortsetzung. Die Gesamtlaufzeit beträgt 4:34 und die erste Datei läuft 1:49. Die 3 Dateien sind insgesamt 14,49 MB, die erste ist 5,6, also 38% nach Zeit und Größe. Ich habe Therm zusammen mit Andys FLV-Joiner http://www.videohelp.com/software/Andys-FLV-Joiner zusammengestellt, aber es ist nicht ganz richtig, jede Konvertierung in ein anderes Format stirbt beim ersten Joint. mplayer spielt den ganzen Weg hindurch, zeigt jedoch die falsche Laufzeit. Alan Corey vor 8 Jahren 0
Ich habe den SWF, der dies mit einem kostenlosen Online-Decompiler bei ShowMyCode geladen hat, gerade nicht kompiliert. Und ich lese ein ActionScript-Tutorial. Alan Corey vor 8 Jahren 0
Versuchen Sie gnash nach dem Lesen dieses Beitrags und kompilieren ihn immer noch. Ich stehe meistens unter OpenBSD, für die keine Flash-Umgebung verfügbar ist. Gnash ist zufällig in Häfen. http://stackoverflow.com/questions/20194270/convert-compressed-swf-to-mp4 Alan Corey vor 8 Jahren 0
Sieht so aus, als wären die zweite und dritte Datei keine gültigen FLV-Dateien. Sie sollten in der Lage sein, sie zu cat, aber Sie müssen iterieren, indem Sie die ersten n Bytes, dh cat (flv1, flv2 - erste n Bytes, flv3 - n Bytes), entfernen. Meine Vermutung sind die ersten 32 Bytes. Ihr ffmpeg ist auch alt. Gegenwärtiger Git-Kopf ist 79xxx Gyan vor 8 Jahren 0
Interessantes Puzzle. Ich denke, dass sie gültig sind, aber in der Spezifikation von Adobe geht es um verschachtelte Blöcke von Audio- und Videodaten mit Zeigern (eigentlich Rückzeigern) wie einer verknüpften Liste. Wenn die Daten nicht an dem Punkt liegen, an dem der Zeiger zeigt, bricht alles von dort ab. Ich versuche immer noch, den 9-Byte-Header zu verstehen, Googeln über die Adobe-Spezifikation hinaus hat geholfen. Ich denke der erste hat zusätzliche Metadaten wie zB ein TIFF oder JPEG. Bei einigen Windows-Programmen handelt es sich bei diesem Video um Flash 9, also bleibe ich bei den OpenBSD-Ports beim ffmpeg, das ist sicherer. Gnash ist zu alt. Alan Corey vor 8 Jahren 0
Stolperte über flvmeta, ein nettes kleines Dienstprogramm, das Metadaten in flv-Dateien prüfen, ausgeben und bearbeiten kann. Diese Dateien zeigen alle Fehler und Warnungen, weshalb ich verwirrt war, als ich versuchte, ein Programm zu schreiben, um damit nach Adobe-Vorgaben umzugehen. Sie haben ihren eigenen Player geschrieben, die Dateien müssen nicht Standard sein. Das erste Tag beginnt in allen Fällen mit Byte 13, aber in der ersten Datei ist es vom Typ scriptData und enthält nur Metadaten. Tags können Audio, Video oder Skript sein. http://www.flvmeta.com/ Alan Corey vor 8 Jahren 0

2 Antworten auf die Frage

0
Alan Corey

Not a complete answer yet but FLVMeta and a partial reading of Adobe's spec are beginning to shine light on things. From an FLVMeta full dump the tags or sections of data look like this:

 --- Tag #1019 at 0xCBEB5 (835253) --- Tag type: audio Body length: 213 Timestamp: 124957 * Sound type: stereo * Sound size: 16 * Sound rate: 44 * Sound format: AAC Previous tag size: 224 --- Tag #1020 at 0xCBF99 (835481) --- Tag type: video Body length: 1201 Timestamp: 124960 * Video codec: AVC * Video frame type: inter frame Previous tag size: 1212 --- Tag #1021 at 0xCC459 (836697) --- Tag type: audio Body length: 225 Timestamp: 124980 * Sound type: stereo * Sound size: 16 * Sound rate: 44 * Sound format: AAC Previous tag size: 236 --- Tag #1022 at 0xCC549 (836937) --- Tag type: video Body length: 542 Timestamp: 125000 * Video codec: AVC * Video frame type: inter frame Previous tag size: 553 

So you could read the header into one file, put all the tags into 1 file each, then reconstruct however many input files into however many output files you wanted. Each "tag" I'd call a block, but it's a chunk of data. You don't have to manipulate them in real time. Each has a timestamp, you just have to put them together in that order and don't split a tag across files.

I wish FLVMeta had more useful output for moving things around under program control like tab or comma-delimited data. Maybe even create an SQLite database for each project, put all the audio tags in one table, video in another, script in another. Maybe I'll do that yet since it's open source and on Github. It'd be simpler if flvs weren't big-endian and I'm on a little-endian machine. All integers are big-endian, like on a Mac.

0
Alan Corey

Fertig gemacht. Am Ende habe ich ein C-Programm verwendet, das ich geschrieben habe, um sie zu verketten, nachdem ich den Fehler behoben hatte, dass EOF in der ersten Eingabedatei als FF oder -1 in der Ausgabedatei endete, was zu diesem Zeitpunkt Spieler und Konverter stoppte.

flvmeta hat immer noch Warnungen über die Ausgabe ausgegeben, aber ich konnte es in eine mp4-Datei konvertieren:

 ffmpeg -i out4.flv -vcodec copy -acodec copy out4.mp4   /* My flv concat, a single-use program */  #include <stdio.h> // don't need most of these headers #include <stdlib.h> #include <string.h> #include <endian.h> // FLVs have big endian values #include <unistd.h> #include <fcntl.h> #include <inttypes.h>  FILE *opf;  void docopy(char *fn, uint ofs) { FILE *ipf; unsigned char ch; ipf = fopen(fn,"r"); if (ipf == NULL) { printf("Failed to open %s\n",fn); fclose(opf); exit(1); } fseek(ipf,ofs,SEEK_SET); // jump to passed in offset while (!feof(ipf)) { // not super efficient ch = fgetc(ipf); // this DOES have an effect, it stops the -1 from being written if (!feof(ipf)) fputc(ch,opf); } printf("outfile now at %x\n",(unsigned int) ftell(opf)); fclose(ipf); }  void outhdr(void) { // write boilerplate flv header opf = fopen("out4.flv","w"); if (opf == NULL) { printf("Error creating new output file.\n"); exit(1); } fprintf(opf,"FLV%c%c%c%c%c%c",1,5,0,0,0,9); // audio and video enabled // This becomes the first PreviousTagSize: fprintf(opf,"%c%c%c%c",0,0,0,0); // flvmeta seems to approve }  int main(void) { outhdr(); // write a vanilla header docopy("media1.flv", 13); // copy, starting at byte 13 docopy("media2.flv", 13); docopy("media3.flv", 13); fclose(opf); return 0; }