
seit ein paar Tagen habe ich ein Problem mit ffmpeg, das mich wirklich wahnsinnig macht... Ich versuche, FFMPEGs filter_complex zu verwenden, um bestimmte kurze Segmente einer Videodatei (aufgenommen mit 60fps) zu extrahieren. Ich kenne die genauen Frames aus dem Originalmaterial, die ich zum Schneiden verwenden möchte. Ich verwende dentrimmenFilterbefehl zusammen mitsetzt, 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 Ausgabevideo sollte 30 fps statt der 60 fps des Originalmaterials haben. 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 von mir erwartete Ergebnis wäre, dass ffmpeg im ersten Snippet (Frame 28 bis zum letzten vor 82) jedes zweite Frame ([x]) weglässt, um es von 60fps auf 30fps bei normaler Geschwindigkeit umzuwandeln: [28][x][30][x][32][x]...[80]
Das Ergebnis, das ich erhalte, ist jedoch: [28][29][30][31][x][33][x][35][x]...[81]
Versteht irgendjemand dieses Verhalten? Wie kann ich es lösen? Es scheint ein kleines Problem zu sein, aber es ist so ärgerlich, wenn man Musik usw. scharf abschneidet ... Für jede Hilfe wäre ich sehr dankbar!
Antwort1
Verwenden
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 beobachtete Verhalten nicht untersucht, aber wenn Sie Streams mit unterschiedlicher Rate wie diese mit dem Concat-Filter mischen und eine CFR-Ratenkonformität anwenden, entspricht die Kadenz der Frame-Drops nicht immer den Erwartungen.