Ich verwende dies, um einen Teil aus einer MP4-Datei auszuschneiden:
ffmpeg -i input.mp4 -vcodec copy -acodec copy -ss 00:36:18 -to 00:39:50 output.mp4
Es funktioniert gut, aber das Videobild friert am Anfang immer für 1 Sekunde ein.
Egal aus welcher Videodatei ich versuche, einen Teil herauszuschneiden, es dauert etwa 1 Sekunde, bis das Video startet.
Hier ist ein Beispielvon dem, was ich sehe.
Antwort1
Das Problem könnte sein, dass das Video versucht, nur auf Basis von Schlüsselbildern und nicht auf Basis von Zwischenbildern zu schneiden, und dass Ihre Anfangszeit 00:36:18
einige Sekunden vor einem Schlüsselbild liegt. Die Lösung sollte die Verwendung der -copyinkf
Optionwas im Handbuch beschrieben wird als:
Kopieren Sie beim Kopieren des Streams auch die am Anfang gefundenen Nicht-Keyframes.
Ihr Befehl sieht also folgendermaßen aus:
ffmpeg -i input.mp4 -vcodec copy -acodec copy -ss 00:36:18 -to 00:39:50 output.mp4
Müsste dann angepasst werden, damit -copyinkf
es mit eingemischt so aussieht:
ffmpeg -i input.mp4 -vcodec copy -acodec copy -copyinkf -ss 00:36:18 -to 00:39:50 output.mp4
Antwort2
Der Zeitstempel, von dem Sie kopieren, liegt zwischen den Schlüsselbildern. Die Verwendung von -vcodec copy führt immer zu diesem Verhalten, wenn Sie einen Inter-Frame-Codec kopieren und Ihre Eingabe nicht mit einem Schlüsselbild beginnt.
Sie haben die Wahl zwischen einer vollständigen Kodierung (d. h. ohne -vcodec-Kopie) oder der Auswahl eines anderen Zeitstempels, nach dem gesucht werden soll. Sie können den Speicherort aller Schlüsselbilder beispielsweise mit ffprobe ermitteln.
ffprobe -select_streams v -show_frames -print_format csv -show_entries frame=key_frame,pkt_dts_time input.mp4 | grep "frame,1"
Die dritte Spalte enthält die Zeitstempel (in Sekunden) aller Schlüsselbilder. Sie möchten das Bild, das Ihrem Zielzeitstempel am nächsten kommt, aber nicht danach liegt.
Antwort3
Ich hatte dieses Problem auch. Ich weiß nicht, warum das passiert ist und wie ich es behoben habe. Ich weiß nur, dass dieser Code es für mich behoben hat:
ffmpeg -ss 00:00:00 -to 00:00:10 -i input.mp4 -c:v copy -c:a copy output.mp4