Wie schneide ich Video-Frames spezifisch mit ffmpeg und konvertiere Framerate?

896
Alexander Pospischil

seit ein paar Tagen stoße ich auf ein Problem mit ffmpeg, das mich wirklich in den Wahnsinn treibt ... Ich versuche, den filter_complex von FFMPEG zu verwenden, um bestimmte kurze Segmente einer Videodatei zu extrahieren (aufgenommen mit 60 Bildern pro Sekunde). Ich kenne die genauen Frames aus dem Originalmaterial, das ich zum Schneiden verwenden möchte. Ich verwende den Trim- Filter-Befehl zusammen mit Setpts, wenn ich die Geschwindigkeit jedes Snippets ändern möchte. Im konkreten Fall möchte ich das erste Snippet in Originalgeschwindigkeit (1.0) haben, und das resultierende Video sollte bei 30 Bildern pro Sekunde anstelle der ursprünglichen Werte von 60 Bildern pro Sekunde liegen. Hier ist der Code, den ich verwende:

ffmpeg -y -i footage60fps -filter_complex "  [0:v]trim=start_frame=28:end_frame=82,setpts=PTS- STARTPTS,setpts=1.0*PTS[v0];  [0:v]trim=start_frame=10:end_frame=20,setpts=PTS- STARTPTS,setpts=2.0*PTS[v1]; [v0][v1]concat=n=2:v=1:a=0[out] " -map [out] - preset ultrafast -r 30 output30fps.mp4 

Das Ergebnis, das ich erwarte, wäre, dass ffmpeg im ersten Snippet (Frame 28 bis zuletzt vor 82) jedes zweite Frame ([x]) fallen lässt, um es bei normaler Geschwindigkeit von 60 FPS auf 30 FPS umwandeln zu lassen: [28] [x] [30] [x] [32] [x] ... [80]

Das Ergebnis ist jedoch: [28] [29] [30] [31] [x] [33] [x] [35] [x] ... [81]

Versteht jemand dieses Verhalten? Wie könnte ich es lösen? Es scheint ein unbedeutendes Thema zu sein, aber es stellt sich als so ärgerlich heraus, wenn scharf auf Musik usw. geschnitten wird ... Jede Hilfe wäre sehr dankbar!

1

1 Antwort auf die Frage

0
Gyan

Benutzen

ffmpeg -y -i footage60fps -filter_complex "  [0:v]trim=start_frame=28:end_frame=82,setpts=PTS-STARTPTS,framestep=2[v0];  [0:v]trim=start_frame=10:end_frame=20,setpts=PTS-STARTPTS,setpts=2.0*PTS[v1]; [v0][v1]concat=n=2:v=1:a=0[out]" -map [out] -r 30 -preset ultrafast output30fps.mp4 

Ich habe die Gründe für das Verhalten, das Sie sehen, nicht untersucht. Wenn Sie jedoch unterschiedliche Ratenströme mit dem Concat-Filter mischen und eine CFR-Ratenkonformität anwenden, ist die Kadenz der Frame-Drops nicht immer wie erwartet.

Das scheint zu funktionieren! Vielen Dank @ Mulvya Alexander Pospischil vor 6 Jahren 0