Machen Sie Thumbnail aus Video


11

Wie kann ich eine einfache Aufnahme aus einem Video machen? Am besten über die Kommandozeile?

Idee: Machen Sie 9 Schnappschüsse für 9 gerade platzierte (auf der Timeline) Zeiten und speichern Sie sie als JPGs

Beispiel:

Movie length = 10 min
T1= snapshot of 1 min
T2= snapshot of 2 min
......
T9= snapshot of 9 min
   |   |
 T1| T2| T3
---+---+---
 T4| T5| T6
---+---+---
 T7| T8| T9
   |   |

Was ist das beste Programm dafür? Gibt es OpenSource-Programme?

Antworten:


5

ffmpeg ist ein hervorragendes Open-Source-Tool zum Bearbeiten von Videos, einschließlich des Extrahierens von Frames.

Um einen einzelnen Frame aus einem bestimmten Zeitstempel zu extrahieren, können Sie den Befehl like verwenden

ffmpeg -i video.avi -r 1  -t 00:01:00 -f image2 image%05d.png

-r ist Framerate. Sie können auch den Befehl like verwenden

ffmpeg -i video.avi -r 1/1440 -f image2 image%05d.png

um jede Minute ein Bild zu erhalten (unter der Annahme eines 24-fps-Videos). % 05d bedeutet, dass die Ordnungszahl jedes Miniaturbilds mit 5 Ziffern formatiert werden sollte.

Wenn Sie Bilder als Montage (Ihr Raster) kombinieren möchten, können Sie imagemagick verwenden, nachdem Sie Frames mit ffmpeg extrahiert haben.



1

vcsi ist ein in Python geschriebenes Befehlszeilenprogramm, mit dem mit dem folgenden Befehl ein 3 x 3-Raster von Snapshots erstellt werden kann:

vcsi -g 3x3 video.mkv -o output.jpg

0

Mein Anwendungsfall ist nur eine Miniaturansicht eines Videos, nur eine einzelne Datei, die als <video>Tag-Poster verwendet werden kann. Also, was wäre ein schneller Weg, um dies zu erreichen?

Mit ffmpegkönnen Sie dies tun:

ffmpeg -ss 123 -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg

Dadurch erhalten Sie den Frame in der Nähe der Sekunde 123des video.mp4gespeicherten als poster.jpg.

Wie Sie sehen, besteht das Problem darin, dass wir wissen müssen, welche Sekunde richtig ist.

Um unsere Abhängigkeiten gering zu halten, verwenden wir dafür ffmpeg selbst:

# Get the time as h:m:s (non-padded)
l=$(ffmpeg -i video.mp4 2>&1 | grep Duration: | sed -r 's/\..*//;s/.*: //;s/0([0-9])/\1/g')
# Convert that into seconds
s=$((($(cut -f1 -d: <<< $l) * 60 + $(cut -f2 -d: <<< $l)) * 60 + $(cut -f3 -d: <<< $l)))
# Get frame at 25% as the thumbnail
ffmpeg -ss $((s / 4)) -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg

25% des Videos scheinen eine häufige Wahl zu sein, aber Sie können es auch zu 33% oder 50% machen.

Hier ist ein Skript, das dies tut .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.