Mój przypadek użycia to tylko jedna miniatura z filmu, tylko jeden plik do użycia jako <video>
plakatu z tagiem. Więc jaki byłby szybki sposób, aby to zrobić?
Za pomocą ffmpeg
możesz to zrobić:
ffmpeg -ss 123 -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg
Który daje ramkę blisko sekundę 123
z video.mp4
zapisywane jako poster.jpg
.
Problem, jak widać, polega na tym, że musimy wiedzieć, która sekunda jest właściwa.
Aby utrzymać nasze zależności na niskim poziomie, użyjemy do tego samego ffmpeg:
# 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% wideo wydaje się być powszechnym wyborem, ale możesz zrobić to 33% lub 50%.
Oto skrypt, który to robi .