FFMPEG: Extraktion von 20 Bilder aus einem video von variabler Länge
Ich habe durchsucht das internet sehr intensiv, aber ich habe nicht gefunden, was ich brauchte, nur Variationen, die nicht ganz bei der Sache, das ich verwenden möchte.
Ich habe mehrere videos in verschiedenen Längen, und ich will-Extrakt 20 Bilder, jedes video von Anfang bis Ende, um zu zeigen das breiteste Eindruck von dem video.
So ein video ist 16m 47er long => 1007s insgesamt => ich habe einen snapshot des Videos alle 50 Sekunden.
So, ich dachte, mit der-r Option von ffmpeg mit dem Wert von 0.019860973 (eq 20/1007), aber ffmpeg sagt mir, dass die framerate ist zu klein für Sie...
Die einzige Möglichkeit, die ich herausgefunden, es zu tun wäre, um ein Skript zu schreiben, welche Anrufe ffmpeg mit einem manipulierten -ss-Schalter und mit -vframes 1, aber das ist ziemlich langsam und ein wenig aus für mich, da ffmpegs numerates die Bilder selbst...
Anregungen oder Richtungen?
Dank,
Vapire
InformationsquelleAutor der Frage Vapire | 2011-12-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich war auf der Suche nach der Antwort auf diese Frage zu. Ich machte Gebrauch von radri die Antwort aber gefunden, dass es ein Fehler ist.
erzeugt ein frame alle 2 Sekunden da -r bedeutet, dass die frame-rate. In diesem Fall 0,5 frames pro Sekunde, oder 1 frame alle 2 Sekunden.
Mit der gleichen Logik, wenn Ihr video 1007 Sekunden lang und Sie benötigen lediglich 20 frames, Sie benötigen einen frame-jede Quest 50.53 Sekunden. Übersetzt frame-rate, wäre 0.01979 Bildern pro Sekunde.
Sodass Ihr code sollte
Ich hoffe, das hilft jemand, wie es mir geholfen.
InformationsquelleAutor der Antwort Terrence Tan
Ich weiß, ich bin ein bisschen spät zur party, aber ich dachte, das könnte helfen:
Für jeder die Frage, wo ffmpeg erzeugt ein Bild, das für jedes einzelne Bild, hier ist, wie ich es gelöst (mit blahdiblah Antwort):
Ersten, packte ich die Gesamtanzahl der Bilder im video:
Dann habe ich versucht mit select zu packen der frames:
Aber egal, was der mod(n,100) festgelegt wurde, ffmpeg wurde spuckt viel zu viele frames. Ich hatte Sie auf add-vsync auf 0, um es zu korrigieren, so meine Letzte Befehl sah so aus:
(wo 100 ist die frame-Frequenz Sie verwenden möchten, zum Beispiel, jeder 100ste frame)
Hoffe, das spart jemand ein wenig Mühe!
InformationsquelleAutor der Antwort GhostCode
Könnten Sie versuchen, zu konvertieren video to N Anzahl der Bilder ?
Update:
Oder extrahieren von frame alle 2 Sekunden:
Update:
Um die video-Dauer:
Dann, hängt von der Programmiersprache, die Sie konvertieren es in Sekunden. Zum Beispiel in PHP, man könnte es so machen:
wobei $Zeit ist die video-Dauer. Das können Sie ausführen $duration_in_seconds /20
InformationsquelleAutor der Antwort radri
Im Allgemeinen, ffmpeg Prozesse frames, wie Sie kommen, so alles, was auf der Grundlage der Gesamtdauer/Anzahl der frames erfordert einige Vorverarbeitung.
Ich würde empfehlen, schreiben Sie ein kurzes shell-Skript, um die Gesamtanzahl der frames mit so etwas wie
verwenden und dann die
select
- video-filterwählen Sie die frames, die Sie brauchen. Damit der ffmpeg-Befehl würde so Aussehenaußer dass anstelle der jeden hundertsten Rahmen
100
würde ersetzt werden durch die Anzahl berechnet in der shell-script geben Sie 20 Bilder insgesamt.InformationsquelleAutor der Antwort blahdiblah
Ich hatte das gleiche problem und kam mit diesem script, das scheint, den trick zu tun:
Um es zu verwenden, speichern Sie es als .sh-Datei und führen Sie es mit den folgenden Parametern zu exportieren 20 frames:
Dies wird Ihnen die angegebene Anzahl von frames verteilt sich gleichmäßig in der gesamten video.
InformationsquelleAutor der Antwort user1063552
hatte ich eine ähnliche Frage, nämlich wie zum extrahieren von EINEM frame auf halbem Weg ein Film von unbekannter Länge. Dank der Antworten hier, ich kam mit dieser Lösung, die funktioniert sehr gut in der Tat, ich dachte, die Buchung der php-code wäre hilfreich:
InformationsquelleAutor der Antwort Jochem Van Der Spek