Comment extraire 1 screenshot pour une vidéo avec ffmpeg à un moment donné?

Il y a beaucoup de tutoriels et de choses montrant comment extraire plusieurs captures d’écran d’une vidéo en utilisant ffmpeg. Vous définissez -r et vous pouvez même commencer un certain montant.

Mais je veux juste une capture d’écran, disons 01:23:45 in. Ou 1 capture d’écran à 86%.

C’est tout possible avec ffmpegthumbnailer mais c’est une autre dépendance sur laquelle je ne veux pas dépendre. Je veux pouvoir le faire avec ffmpeg.

Utilisez l’option -ss :

 ffmpeg -ss 01:23:45 -i input -vframes 1 -q:v 2 output.jpg 
  • Pour la sortie JPEG, utilisez -q:v pour contrôler la qualité de sortie. La plage complète est une échelle linéaire de 1 à 31, où une valeur inférieure entraîne une qualité supérieure. 2-5 est une bonne gamme pour essayer.

  • Le filtre de sélection fournit une méthode alternative pour des besoins plus complexes, tels que la sélection de certains types de trames seulement, ou 1 pour 100, etc.

  • Placer -ss avant l’entrée sera plus rapide. Voir Wiki FFmpeg: Recherche et cet extrait de la documentation de l’outil ffmpeg cli :

-ss position (entrée / sortie)

Lorsqu’il est utilisé comme option d’entrée (avant -i ), cherche dans ce fichier d’entrée à positionner. Notez que dans la plupart des formats, il n’est pas possible de chercher exactement, alors ffmpeg cherchera le sharepoint recherche le plus proche avant la position. Lorsque le transcodage et -accurate_seek est activé (valeur par défaut), ce segment supplémentaire entre le sharepoint recherche et la position sera décodé et supprimé. Lorsque vous copiez un stream ou que -noaccurate_seek est utilisé, il sera conservé.

Lorsqu’il est utilisé comme option de sortie (avant un nom de fichier de sortie), décode mais supprime l’entrée jusqu’à ce que l’horodatage atteigne la position.

la position peut être en secondes ou en hh:mm:ss[.xxx] .

FFMpeg peut le faire en recherchant l’horodatage donné et en extrayant exactement une image en tant qu’image, voir par exemple:

 ffmpeg -i input_file.mp4 -ss 01:23:45 -vframes 1 output.jpg 

Expliquons les options:

 -i input file the path to the input file -ss 01:23:45 seek the position to the specified timestamp -vframes 1 only handle one video frame output.jpg output filename, should have a well-known extension 

Le paramètre -ss accepte une valeur sous la forme HH:MM:SS[.xxx] ou un nombre en secondes. Si vous avez besoin d’un pourcentage, vous devez calculer la durée de la vidéo au préalable.