Mi caso de uso es solo una miniatura de un video, solo un archivo para usar como <video>
póster de etiqueta. Entonces, ¿cuál sería una forma rápida de hacer esto?
Con ffmpeg
, puedes hacer esto:
ffmpeg -ss 123 -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg
Eso le dará el marco cerca del segundo 123
del video.mp4
guardado como poster.jpg
.
El problema, como puede ver, es que necesitamos saber qué segundo es el correcto.
Para mantener bajas nuestras dependencias, usaremos ffmpeg para esto:
# 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
El 25% del video parece una opción común, pero también puede hacerlo el 33% o el 50%.
Aquí hay un script que hace esto .