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 ffmpeg
kö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 123
des video.mp4
gespeicherten 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 .