Comment puis-je extraire une image JPEG de bonne qualité à partir d’un fichier vidéo H264 avec ffmpeg?

Actuellement, j’utilise cette commande pour extraire les images:

ffmpeg.exe -i 10fps.h264 -r 10 -f image2 10fps.h264_% 03d.jpeg

Mais comment puis-je améliorer la qualité d’image JPEG?

Utilisez -qscale:v

Utilisez -qscale:v (ou l’alias -q:v ) en tant qu’option de sortie. La scope effective pour JPEG est de 2 à 31, 31 étant la qualité la plus mauvaise. Je recommande d’essayer des valeurs de 2-5.

Vous pouvez append -huffman optimal pour une diminution faible mais mesurable de la taille du fichier de sortie.

Pour sortir une série d’images:

 ffmpeg -i input.mp4 -qscale:v 2 output_%03d.jpg 

Pour sortir une seule image à une durée d’environ 60 secondes:

 ffmpeg -ss 60 -i input.mp4 -qscale:v 4 -frames:v 1 -huffman optimal output.jpg 

Cela fonctionnera avec n’importe quelle entrée vidéo. Voir ci-dessous si votre entrée est MJPEG.


MJPEG

Si vous entrez MJPEG (Motion JPEG), les images peuvent être extraites sans aucune perte de qualité.

La sortie de la console ffmpeg ou ffprobe peut vous indiquer si votre entrée est MJPEG:

 $ ffprobe -v error -select_streams v:0 -show_ensortinges stream=codec_name -of default=nw=1 input.avi codec_name=mjpeg 

Ensuite, vous pouvez extraire les images en utilisant le filtre bitstream mjpeg2jpeg :

 $ ffmpeg -i input.avi -codec:v copy -bsf:v mjpeg2jpeg output_%03d.jpg 

Regarde aussi

  • FFmpeg FAQ: Comment puis-je encoder un film en une seule image?
  • FFmpeg Wiki: Créer une image miniature toutes les X secondes de la vidéo