Wenn ich Sie richtig verstanden habe, zeigt dieser Artikel im FFmpeg-Wiki mit dem Titel "Alle X Sekunden des Videos ein Miniaturbild erstellen", dass FFmpeg nicht das tun kann, was Sie möchten (ohne einige automatisierte Berechnungen).
Das Wiki sagt, dass dies -vf "fps=fps=XYZ"
Ihre beste Einstellung ist - es wird ein Bild / Frame für jedes Bild XYZ
des Originalvideos erstellt. Wenn Sie wirklich 10 Bilder pro Video haben möchten, die alle unterschiedliche Längen haben, können Sie zuerst die Gesamtzahl der Frames auslesen und dann die benötigten fps mit einem Skript berechnen:
XYZ=wanted_frames_times_actual_fps/total_frames_of_vid
mit wanted_frames_times_actual_fps
wobei zB 10*25
(PAL) oder 10*30
(NTSC) in Ihrem Fall und total_frames_of_vid=(hh*3600+mm*60+ss)*25+ff
, wo hh
Stunden bedeutet, mm
bedeutet Minuten, ss
bedeutet Sekunden und ff
bedeutet Rahmen (nach der letzten Sekunde gezählt). Berechnungsbeispiel: Ein Zeitcode von 01:35:45:24
(oder 01:35:45.960
in FFmpegs Begriffen, da FFmpeg keine Frames, sondern Millisekunden verwendet) mit 25 Frames pro Sekunde entspricht insgesamt 143649 Frames.
Diese Lösung könnte gut funktionieren - Sie müssen nur einen Weg finden, um die Gesamtzeit des Videos (z. B. über ffprobe) und seine fps (wenn Sie keinen richtigen Timecode erhalten) zu erhalten, und diese Informationen dann als Variable mit dem Namen speichern $total_frames_of_vid
.
Ich habe in der Wiki-Sektion "Sehen Sie auch" einen anderen Ansatz gefunden, der auf eine Superuser-Frage namens "Meaningful Thumbnails für ein Video mit FFmpeg" verweist, in der Folgendes vorgeschlagen wird :
ffmpeg -hide_banner -i <YOUR_VIDEO> -vf "select=gt(scene\,0.8)" -frames:v 10 -vsync vfr -vf "fps=fps=1/200" -y out%03d.png
(Ich habe den Code ein wenig geändert - der Bild-Codec wurde in PNG geändert und die Werte für -frames:v
und fps
geändert. Die Ausgabebilder wurden auch so geändert, dass der Name dreistellig ist.)
und kodieren Sie sie dann erneut in Ihre GIF.
Diese Lösung erfordert auch einige Berechnungen oder manuelle Arbeit, da die Werte aller Optionen (und vor allem fps
je nach Länge des Videos geändert werden müssen). Das heißt, ich habe den Originalcode von Superuser mit einem 35-minütigen Video ausprobiert - und nur 5 Frames daraus gemacht .