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 123del video.mp4guardado 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 .