ffmpeg - Bilder aus Videos in verschiedenen Abschnitten und fortlaufend nummeriert

ffmpeg - Bilder aus Videos in verschiedenen Abschnitten und fortlaufend nummeriert

Ich verwende ffmpeg, um Standbilder aus einem Video zu extrahieren. Von einem bestimmten Zeitpunkt für eine bestimmte Dauer mithilfe der Parameter -ss und -t.

ffmpeg -ss 00:10:01 -t 2 -i /Volumes/OO_8/VideoSource.mkv -qscale:v 2 -start_number  /Users/Olivier/Pictures/ScreenCaptures/ViewsOfNature-%4d.jpeg

(Ich beginne zuerst mit dem Zeitstempel/der Dauer, damit ffmpeg an diesem Punkt mit dem Demux beginnt.)

Ich möchte jedoch mehrere Startpunkte verwenden (z. B. bei 00:01:12 die Bilder für 2 Sekunden extrahieren, bei 00:11:00 die Bilder für 4 Sekunden extrahieren usw.). Ich kann dies manuell tun, indem ich den Zeitstempel und die Dauer ersetze und die Ausgabebilder jedes Mal verschiebe, aber idealerweise möchte ich die Zeitstempel und Dauern auf einmal eingeben und die Ausgabebilder nicht überschreiben. Gibt es eine Möglichkeit, dies zu tun? Vielleicht mit einer externen Datei mit den Zeitstempeln/Dauern?

Ich bin neu auf diesem Gebiet und möchte es lieber nur mit ffmpeg machen und nicht Bash verwenden.

Antwort1

Ich sehe keine Möglichkeit, dies einfach mit ffmpeg zu tun. Es gibt einen Segmentmultiplexer, aber Sie können die Dauer der Segmente nicht festlegen.

Es spricht nichts dagegen, es so zu machen, und ich glaube, es ist ziemlich einfach. Erstellen Sie einfach eine Textdatei mit einer durch Kommas getrennten Liste von Startpunkten und Dauern:

$ cat split.txt
00:01:05,5
00:06:10,2
00:08:25,1

Und dann in Bash:

count=1
while read -r -d ',' start duration; do
  ffmpeg -ss "$start" -i input.mp4 -t "$duration" "$count-output-%04d.jpg"
  (( count++ ))
done < split.txt

Dadurch werden Ausgabedateien erstellt, die mit einer eindeutigen Nummer beginnen (1, 2, 3, …).

verwandte Informationen