Ich versuche, ein größeres Video entsprechend einer Reihe von Frame-Bereichen aufzuteilen, die ich in ffmpeg einspeise. Einige Fragen zur Option -f segment -segment_frames und was erwartet/produziert wird. Folgendes führe ich aus:
ffmpeg -i full_movie.mov -f segment -segment_frames 123 -reset_timestamps 1 -c:a copy -map 0 "/Users/sjan/Desktop/%03d_test.mov"
ffmpeg -i full_movie.mov -f segment -segment_frames 124, 163 -reset_timestamps 1 -c:a copy -map 0 "/Users/sjan/Desktop/%03d_test.mov"
Geht der erste ffmpeg-Befehl von 0 bis 123 oder von 1 bis 123?
Beginnt das ffmpeg mit der Option -segment_frames beim Lesen des QT-Films bei 0, wenn man bedenkt, dass dieser Film beim Öffnen in QT bei 0 beginnt? Sollte ich erwarten, dass ich ihm meine Frame-Bereiche zuführen muss, um dies zu berücksichtigen, indem ich 1 abziehe, wenn es bei 0 beginnt? Ich sehe inkonsistente Ergebnisse in den richtigen Bereichen und das liegt wahrscheinlich daran.
Antwort1
Ja, segment_frames beginnt bei 0. Als Faustregel beginnen fast alle Indexzähler in ffmpeg bei 0.
So -segment_times 124,163
wird ffmpeg angewiesen, für die Frames 0-123, 124-162 und 163-END jeweils ein Segment zu erstellen. Wenn diese Startframes jedoch keine Keyframes sind, startet ffmpeg das Segment mit dem ersten Keyframe, der nach diesen Frames gefunden wird.
Hinzufügen -break_non_keyframes 1
, um die Segmentierung der angegebenen Frames zu erzwingen. Allerdings werden anfängliche Frames möglicherweise nicht richtig dekodiert, bis ein Keyframe gefunden wird, wenn das Segment einzeln abgespielt wird. Da Sie Video kodieren, können Sie Keyframes an den Segmentpunkten erzwingen, indem Sie Folgendes hinzufügen:-force_key_frames expr:eq(n\,124)+eq(n\,163)