2016-07-15 10 views
2

Normalerweise verwende ich ThumbnailMe, um Kontaktbögen von Thumbnails zu erstellen. Meine Standardeinstellung ist 15 Zeilen x 5 Spalten, also 75 Bilder, in Videos, die zwischen 45 Minuten und etwa 90 Minuten liegen. ThumbnailMe erstellt ein Kontaktformular dieser Größe praktisch sofort. Eine aktuelle Anforderung, eine Menge Kontaktabzüge für eine Menge von Videos zu machen, hat mich mit einer Befehlszeilenoption konfrontiert, so dass ich diese in Stapeln machen kann. Ich habe ein paar verschiedene Arten versucht, die Thumbnails von der Kommandozeile zu machen:Der effizienteste Weg für ffmpeg Thumbnails zu machen? [Windows 10]

ffmpeg -ss 300 -i myvideo.avi -vf fps=1/300 %d.jpg 

oder

ffmpeg -i myvideo.avi -vf fps=1/60 %d.jpg 

Egal, welche dieser Methoden, die ich nutzen es etwa eine Minute dauert nur 16 Screenshots zu machen (Von dort würde ich ImageMagick verwenden, um das Kontaktformular zu erstellen). Wie ich bereits erwähnt habe, kann ThumbnailMe auf Knopfdruck ein 15x5 Raster von Bildern erstellen. ThumbnailMe basiert auf einem älteren Befehlszeilenprogramm, Movie Thumbnailer, von dem ich glaube, dass es eine alte Version von ffmpeg oder zumindest den Codec libavcodec verwendet hat.

Wenn diese anderen Programme Thumbnails so schnell erstellen können, warum dauert es so lange FFmpeg, um sie für mich zu machen? Selbst wenn ich die Screenshots sehr klein auslege, sagen wir 50x50, dauert es immer noch ~ 2 Sekunden für jedes zu erstellende Bild.

Antwort

1

Der fps Filter ist eine ineffiziente Möglichkeit, dies zu umgehen. Der Auswahlfilter ist eine bessere Wahl. FFmpeg hat auch einen Filter, um das Gitter zu erzeugen, wenn Sie wollen.

ffmpeg -i in.mp4 -vf select=not(mod(n\,800)),scale=200:-1,tile=15x5 -vsync 0 in-grid.jpg 

800. Dies wählt jeden Rahmen, Skalen proportional ausgewählte Rahmen zu 200 Pixel Breite und dann die ersten Fliesen 75 ausgewählten Rahmen in einem 15x5-Layout. Der Kachelfilter hat options für einen äußeren Rahmen und Interframe-Auffüllung, falls gewünscht.

Um dies so effizient wie möglich zu machen, sollte das Auswahlintervall (800) so gewählt werden, dass der Auswahlfilter nicht mehr Frames ausgibt als für das Raster erforderlich. Außerdem können Sie in FFmpeg etwas Zeit sparen, indem Sie die Skalierung und die Kachel weglassen und woanders machen.

+0

Dies schafft tatsächlich das Gitter und ist, relativ gesehen, schneller als die Methoden, die ich verwendete. Allerdings probierte ich dies als Nächstes auf einem High-Definition-Video (Bitrate 5000 Kbps, 1280x720 mit AVC-Format) und es dauerte über 60 Sekunden, um das Gitter zu generieren. – gregm

1

Ich benutze mthttps://github.com/mutschler/mt/releases für meine Kontaktabzüge, die ziemlich schnell ist und alles bieten sollte, wonach Sie gefragt haben.

Ich habe gerade einen Schnelltest gemacht und es dauerte ungefähr 27 Sekunden, um ein 15x5 Gitter im Standardmodus zu erzeugen. Im schnellen Modus dauerte es nur etwa 4 Sekunden. (getestet auf einer 6300Kbp/s, 1280x720, h264 AVC-Datei)

Der Hauptunterschied zwischen dem schnellen und dem Standardmodus ist, dass es beim Vorspulen in die nächste Erfassungsposition etwas ungenauer ist.