Kopierte FLV-Dateien mit FFMPEG lassen sich in keinem Programm außer VLC öffnen

2806
danronmoon

Ich versuche, einer von YouTube abgerufenen FLV-Datei ein Overlay hinzuzufügen. Die Eingabedatei ist 4,4 MB und kann von QuickTime abgespielt werden, so dass anscheinend keine Probleme auftreten.

ffmpeg -i input.flv -vf drawtext="fontfile='arial.ttf':text='hello':fontsize=9" output.flv 

Nach wenigen Sekunden bekomme ich folgende Ausgabe:

 ffmpeg version 1.2.1 Copyright (c) 2000-2013 the FFmpeg developers built on May 15 2013 13:13:12 with Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn) configuration: --prefix=/opt/local --enable-swscale --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libopus --enable-libtheora --enable-libschroedinger --enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libspeex --enable-libfreetype --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/clang --arch=x86_64 --enable-yasm --enable-gpl --enable-postproc --enable-libx264 --enable-libxvid libavutil 52. 18.100 / 52. 18.100 libavcodec 54. 92.100 / 54. 92.100 libavformat 54. 63.104 / 54. 63.104 libavdevice 54. 3.103 / 54. 3.103 libavfilter 3. 42.103 / 3. 42.103 libswscale 2. 2.100 / 2. 2.100 libswresample 0. 17.102 / 0. 17.102 libpostproc 52. 2.100 / 52. 2.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.flv': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2010-01-31 13:44:29 Duration: 00:02:20.85, start: 0.000000, bitrate: 249 kb/s Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 22050 Hz, mono, fltp, 56 kb/s Metadata: creation_time : 2010-01-31 13:44:29 handler_name : (C) 2007 Google Inc. v08.13.2007. Stream #0:1(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 191 kb/s, 29.84 fps, 29.97 tbr, 30k tbn, 29.97 tbc Metadata: creation_time : 2010-01-31 13:44:29 handler_name : (C) 2007 Google Inc. v08.13.2007. File 'output.flv' already exists. Overwrite ? [y/N] y Output #0, flv, to 'output.flv': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 encoder : Lavf54.63.104 Stream #0:0(und): Video: flv1 ([2][0][0][0] / 0x0002), yuv420p, 320x240 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 1k tbn, 29.97 tbc Metadata: creation_time : 2010-01-31 13:44:29 handler_name : (C) 2007 Google Inc. v08.13.2007. Stream #0:1(und): Audio: mp3 ([2][0][0][0] / 0x0002), 22050 Hz, mono, fltp Metadata: creation_time : 2010-01-31 13:44:29 handler_name : (C) 2007 Google Inc. v08.13.2007. Stream mapping: Stream #0:1 -> #0:0 (mpeg4 -> flv) Stream #0:0 -> #0:1 (aac -> libmp3lame) Press [q] to stop, [?] for help frame= 4201 fps=1386 q=10.0 Lsize= 4304kB time=00:02:20.85 bitrate= 250.3kbits/s  video:3603kB audio:550kB subtitle:0 global headers:0kB muxing overhead 3.618454% 

Jetzt kann output.flv von QuickTime nicht wiedergegeben werden, und Flash beschwert sich darüber, dass der Audio-Codec nicht unterstützt wird. Das einzige Programm, das es erfolgreich spielen kann, ist VLC. Die Dateigröße entspricht der von input.flv. Was könnte die Ursache sein und welche Optionen könnten eine spielbare Kopie erzeugen?

AKTUALISIEREN

Abgeschnittene Ausgabe, die von verschiedenen Encodern empfangen wurde:

ffmpeg -i input.flv -c:v libxvid -c:a copy -q:v 5 output2.flv ... Stream mapping: Stream #0:1 -> #0:0 (mpeg4 -> libxvid) Stream #0:0 -> #0:1 (copy) Press [q] to stop, [?] for help frame= 4201 fps=303 q=5.0 Lsize= 6597kB time=00:02:20.85 bitrate= 383.7kbits/s  video:5491kB audio:968kB subtitle:0 global headers:0kB muxing overhead 2.120003%   ffmpeg -i input.flv -c:v mpeg4 -c:a copy -q:v 5 output3.flv ... Stream mapping: Stream #0:1 -> #0:0 (mpeg4 -> mpeg4) Stream #0:0 -> #0:1 (copy) Press [q] to stop, [?] for help frame= 4201 fps=2523 q=5.0 Lsize= 6852kB time=00:02:20.85 bitrate= 398.5kbits/s  video:5746kB audio:968kB subtitle:0 global headers:0kB muxing overhead 2.044082%   ffmpeg -i input.flv -c copy outputcopy.flv ... Stream mapping: Stream #0:1 -> #0:0 (copy) Stream #0:0 -> #0:1 (copy) Press [q] to stop, [?] for help frame= 4201 fps=0.0 q=-1.0 Lsize= 4394kB time=00:02:20.85 bitrate= 255.6kbits/s  video:3289kB audio:968kB subtitle:0 global headers:0kB muxing overhead 3.216934% 

Das Abrufen der Informationen zu einer dieser Dateien führt zu einer Vielzahl der folgenden Arten von Fehlern (wobei n eine zunehmende ganze Zahl ist):

- Stream discovered after head already parsed - header damaged - max_analyze_duration 5000000 reached at 5014000 microseconds - Could not find codec parameters for stream n (Video: mpeg4, yuv420p): unspecified size Consider increasing the value for the 'analyzeduration' and 'probesize' options - decoding for stream n failed 

Es folgen Nachrichten vom Typ:

Stream #0:n: Video: mpeg4, yuv420p, 1k tbr, 1k tbn 

Ich habe gerade ffmpeg und seine Abhängigkeiten über MacPorts aufgerüstet und habe immer noch Pech. Dies geschieht für jede FLV-Datei, die ich von YouTube und anderswo ausprobiert habe.

1

1 Antwort auf die Frage

5
slhck

Flash-Video

Entsprechend der Spezifikation unterstützt Flash Video unter anderem nur nativ VP-6 und H.264-Video. Das bedeutet, dass Sie sich an FFmpegs flvEncoder halten müssen, oder Sie wechseln mit dem libx264Encoder zu H.264. Die Optionen, die Sie verwenden können, finden Sie in der x264-Encoding-Anleitung :

ffmpeg -i input.flv … -c:v libx264 output.flv 

Sie können daher die MPEG-4 Part 2-Encoder nicht verwenden mpeg4oder libxvid, da sie nur von libavformat-basierten Playern unterstützt werden, die alles umfassen, von Android-Handys bis hin zu VLC, natürlich nicht in QuickTime.

Schnelle Zeit

Wie für QuickTime wird FLV nicht offiziell unterstützt . Leider kann man davon ausgehen, dass QuickTime nicht alle Dateien abspielen kann. Durch die Installation von Perian (jetzt EOL) sollten einige FLV-Dateien abgespielt werden, jedoch nicht alle.

Wie die Spezifikation voraussagt, habe ich nur FLV-Dateien mit dem flvEncoder, wie er in genannt wird ffmpeg, abgespielt, der Sorenson Spark H.263-Codec und der libx264Encoder.

Audio

FLV unterstützt sowohl MP3 als auch AAC. Daher weiß ich nicht, was mit Flash los ist und sich über einen ungültigen Codec beschwert. Vielleicht möchten Sie einen AAC-Encoder ausprobieren:

ffmpeg -i input.flv … -c:a aac -strict experimental output.flv 

… Oder verwenden Sie einen anderen AAC-Encoder, den Ihr Build unterstützt.

"-c: v mpeg4" liefert ähnliche Ergebnisse. "-c: v libxvid" benötigt eine realistischere Zeit für die Verarbeitung, erzeugt jedoch keine abspielbare Ausgabe. Selbst ein direkter Kopierbefehl `ffmpeg -i input.flv -c: v copy -c: eine Kopie output.flv` ohne Filter funktioniert leider nicht. danronmoon vor 11 Jahren 0
Bitte kürzen Sie nicht die Ausgabe der anderen Befehle. Wenn es für den Fragenkörper zu lang ist, fügen Sie ihn [in ein Pasteboard] (http://paste.ubuntu.com/) ein. Dadurch wird es einfacher, Probleme zu erkennen. Hast du vielleicht eine Probe? Spielt die Datei zB in VLC? slhck vor 11 Jahren 0
Die abgeschnittene Ausgabe für die letzten 3 war die gleiche wie die erste vollständige Ausgabe ganz oben (eine Reihe von Metadaten für die Originaldatei). OK, ich muss zugeben, dass mein ursprünglicher Befehl (wie auch output3.flv, danke dafür) mit VLC funktioniert, aber nicht mit irgendetwas anderem (Flash sagt, Audiocodec wird nicht unterstützt). Dies ist eine gute Nachricht, aber ich denke, es ist vernünftig, die Wiedergabe in anderen Videoplayern zu erwarten, daher formuliere ich die Frage neu. danronmoon vor 11 Jahren 0
Scheint ein bisschen schwierig zu sein. Mit QuickTime müssen Sie, zumindest gemäß meinen Tests, die offiziell unterstützten FLV-Videocodecs verwenden. Bisher war es noch nicht möglich, einen MPEG-4 Part 2-Videostream in einem FLV-Container von YouTube zu finden - anscheinend bekomme ich nur entweder H.264- oder Sorenson-H.263-kodierte. slhck vor 11 Jahren 0
"-c: a aac" führt dazu, dass ffmpeg hängt, und ich muss ein neues Terminal schließen und öffnen. Mit -c: Ein MP3-Gerät erzeugt immer noch eine mit QT nicht abspielbare Datei. Die youtube-ID, auf der diese Frage basiert, lautet rNp-cj5dEA8. Wenn Sie mir eine YT-ID und den dazugehörigen Befehl geben könnten (Original und Kopie, die von QT spielbar sind), könnte ich es ausprobieren und sehen, ob es auf meinem Rechner funktioniert. Übrigens, welche Art von ffmpeg-Build hast du? Ich denke, ich müsste ein Downgrade oder eine Neuinstallation durchführen. danronmoon vor 11 Jahren 0
Für die Video-ID, die Sie mir gegeben haben, bekomme ich nur zwei mögliche FLV-Optionen (basierend auf dem, was "youtube-dl" zeigt), [eine mit H.264-Video im Inneren und eine mit Sorenson H.263] (http: // paste.). ubuntu.com/5859174/). Beide sind in QuickTime spielbar. Ich bekomme keine MPEG-4-Version. Verwenden Sie möglicherweise einen anderen YouTube-Downloaddienst, der eine Transkodierung durchführt? Ich habe gerade das "normale" `ffmpeg -i input.flv output.flv` ausprobiert und es ist in QuickTime abspielbar. Sowohl auf neuestem `ffmpeg` als auch auf Git. 1.2.1. slhck vor 11 Jahren 0
I've been using MacTubes to test #5. I just installed youtube-dl and downloaded #5 and I noticed that the filesize and resolution were different from the one I downloaded from MacTubes, and that the video encoder is flv1, the same as what you had. Even more mind-boggling is the fact that I can't get the file downloaded from youtube-dl to play in QT. So I think the issue is getting too localized, and with all the discrepancies I've been encountering I think the sane route is to sing VLC's praises and focus on other tasks. Thanks for your help. danronmoon vor 11 Jahren 0
Sicher. Ping mich im Chat oder hier, wenn du etwas überprüfen musst. Es tut mir leid, dass ich Ihnen nicht mehr helfen konnte, aber hier scheinen viele Faktoren im Spiel zu sein. slhck vor 11 Jahren 0