Meu caso de uso é apenas uma miniatura de um vídeo, apenas um único arquivo para usar como um <video>
pôster de tag. Então, qual seria uma maneira rápida de fazer isso?
Com ffmpeg
, você pode fazer isso:
ffmpeg -ss 123 -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg
Isso lhe dará o quadro próximo ao segundo 123
dos video.mp4
salvos como poster.jpg
.
O problema, como você pode ver, é que precisamos saber qual é o segundo certo.
Para manter nossas dependências baixas, usaremos o próprio ffmpeg para isso:
# 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% do vídeo parece uma escolha comum, mas você pode fazer 33% ou 50% também.
Aqui está um script que faz isso .