Mon cas d'utilisation est juste une vignette d'une vidéo, juste un seul fichier à utiliser comme un fichier de référence. <video>
tag poster. Alors, quel serait le moyen le plus rapide de le faire ?
Avec ffmpeg
vous pouvez le faire :
ffmpeg -ss 123 -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg
Cela vous donnera le cadre près de la seconde 123
de la video.mp4
enregistré comme poster.jpg
.
Le problème, comme vous pouvez le voir, est que nous devons savoir quelle seconde est la bonne.
Afin de garder nos dépendances basses, nous utiliserons ffmpeg lui-même pour cela :
# 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% de la vidéo semble être un choix courant, mais vous pouvez également opter pour 33% ou 50%.
Voici un script qui fait cela .