Die erste Sekunde des ausgeschnittenen Videoteils friert ein, wenn FFmpeg einen Teil eines Videos ausschneidet

Die erste Sekunde des ausgeschnittenen Videoteils friert ein, wenn FFmpeg einen Teil eines Videos ausschneidet

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:18einige Sekunden vor einem Schlüsselbild liegt. Die Lösung sollte die Verwendung der -copyinkfOptionwas 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 -copyinkfes 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

verwandte Informationen