Erstellen Sie in bestimmten Abständen Miniaturansichten aus einem Video, ohne das gesamte Video zu lesen [FFMPEG]

415
TigerCoder

Kurzes Problem : Ich möchte einige Screenshots von einer Video-URL zu bestimmten Zeitpunkten machen, aber ich möchte nicht das gesamte Video lesen.

Nehmen wir an, ich habe ein Video in einer bestimmten URL gespeichert (z. B. https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_30mb.mp4 ). Die Größe des Videos ist groß, aber wir können das Video suchen.

Nun möchte ich 4 Screenshots / Thumbnails des Videos machen. Als ob das Video 100s groß wäre, möchte ich Screenshots mit 20s, 40s, 60s und 80s machen.

Verwenden des Tutorials aus dem Wiki: Erstellen Sie alle X Sekunden des Videos ein Miniaturbild, das ich ausführen kann

ffmpeg -i 'https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_30mb.mp4' -vf fps=1/20 img%03d.jpg 

Das Problem bei diesem Ansatz ist jedoch, dass die gesamte Eingabe gelesen wird, bevor die Screenshots zurückgegeben werden. Aber da der Input suchbar ist, scheint dies Verschwendung zu sein. Besser ist es, die Positionen anzustreben und zu übernehmen. Für jetzt benutzen wir so etwas

for i in 20 to 80 step 20 ffmpeg -noaccurate_seek -ss -i 'https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_30mb.mp4' -vframes 1 out-.png 

Das scheint gut zu laufen, aber dennoch dauert es einige Zeit, bis jeder ffmpeg ausgeführt wird, und jeder ffmpeg decodiert den Header derselben Video-URL, die überflüssig zu sein scheint. Gibt es eine Möglichkeit, dass in einem einzigen ffmpeg-Aufruf diese doppelten Werke entfernt werden können?

PS Es ist keine Antwort nur mit ffmpeg erforderlich. Wir können auch mpv / mplayer oder vlc oder jeden anderen unter Linux verfügbaren Player / Converter verwenden.

1

0 Antworten auf die Frage