web-dev-qa-db-fra.com

Comment extraire une capture d'écran pour une vidéo avec ffmpeg à un moment donné?

Il existe de nombreux tutoriels et trucs 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 dans.

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

Tout cela est 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.

79
Peter Bengtsson

Utilisez le -ss option:

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 la sortie. La plage complète est une échelle linéaire de 1 à 31 où une valeur inférieure donne une qualité supérieure. 2-5 est une bonne plage à essayer.

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

  • Placement -ss avant que l'entrée soit plus rapide. Voir FFmpeg Wiki: Seeking et cet extrait de la documentation ffmpegcli :

-ss position (entrée/sortie)

Lorsqu'il est utilisé comme option de saisie (avant -i), cherche dans ce fichier d’entrée à se positionner. Notez que dans la plupart des formats, il n’est pas possible de chercher exactement, donc ffmpeg cherchera le point de recherche le plus proche avant la position. Lors du transcodage et -accurate_seek est activé (par défaut), ce segment supplémentaire entre le point de recherche et la position sera décodé et ignoré. Lors de la copie en flux ou lorsque -noaccurate_seek est utilisé, il sera conservé.

Lorsqu'elle est utilisée comme option de sortie (avant un nom de fichier de sortie), décode mais ignore l'entrée jusqu'à ce que les horodatages atteignent la position.

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

146
llogan

FFMpeg peut le faire en recherchant l’horodatage donné et en extrayant exactement une image sous forme d’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 sous forme de nombre en secondes. Si vous avez besoin d'un pourcentage, vous devez au préalable calculer la durée de la vidéo.

27
SirDarius