Ich lade viele Streams herunter, da die Internetgeschwindigkeit zu langsam ist, um hochauflösende Videos anzusehen. Wenn ich einen Stream herunterlade, finde ich die .m3u8-Datei, die auf die TS-Dateien verweist. Dann verwende ich den folgenden Befehl:
ffmpeg -i stream.m3u8 vid.mp4
Das funktioniert. Es dauert aber sehr lange, weil grundsätzlich alles neu kodiert wird, obwohl es bereits das richtige Format hat. Um die Neukodierung zu vermeiden, kann ich diesen Befehl verwenden:
ffmpeg -i stream.m3u8 -vcodec copy -acodec copy vid.mp4
Das funktioniert einwandfrei, wenn ich von Anfang bis Ende ohne Unterbrechung abspiele. Aber wenn ich vor- oder zurückspringe, hat VLC Probleme, ein Bild zu erstellen. Es kann einige Sekunden lang nicht richtig angezeigt werden. Das ist sehr ärgerlich.
Meine Frage:Wie kann ich das Video ohne vollständige Neukodierung, aber MIT jederzeit gutem VLC-Rendering erstellen?
Antwort1
Sie fordern ffmpeg auf, die Dateien in mp4 zu kodieren, anstatt sie in einem einzigen Stream zusammenzufügen. Sie müssenverkettenin temp.ts
und konvertieren Sie das dann .mp4
mit in -codec copy
.
Außerdem glaube ich, dass Sie im zweiten Schritt adts
in konvertieren müssen .aac
-bsf:a aac_adtstoasc
Antwort2
Wenn Sie nicht erneut kodieren, können Sie möglicherweise die Schlüsselbilder etc. des Videos nicht ändern, was zu dem von Ihnen beschriebenen Verhalten führt.
Sie könnten jedoch etwas wie Folgendes versuchen:
ffmpeg -i stream.m3u8 -codec:v "libx264" "-preset" "ultrafast" output.mp4
Bedenken Sie, dass Sie mit der Geschwindigkeit auch an Qualität einbüßen, also ist „schnell“ vielleicht besser …
Antwort3
Siehe meine Variante mit ffmpeg mp4joiner