如何使用ffmpeg从H264视频文件中提取高质量的JPEG图像?

时间:2012-04-19 09:39:34

标签: video graphics ffmpeg computer-vision sharpffmpeg

目前我正在使用此命令提取图像:

  

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

但是如何提高JPEG图像质量呢?

2 个答案:

答案 0 :(得分:165)

使用-qscale:v

使用-qscale:v(或别名-q:v)作为输出选项。 JPEG的有效范围是2-31,其中31是最差的质量。我建议尝试2-5的值。

输出一系列图像:

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

要在〜60秒的持续时间内输出单个图像:

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

这适用于任何视频输入。如果您的输入是MJPEG,请参见下文。


MJPEG

如果输入的是MJPEG(动态JPEG),则可以提取图像而不会有任何质量损失。

ffmpegffprobe控制台输出可以告诉您输入是否为MJPEG:

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

然后,您可以使用mjpeg2jpeg bitstream filter提取框架:

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

另见

答案 1 :(得分:0)

以无损格式输出图像,例如PNG:

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

然后使用另一个程序(您可以在其中更精确地指定质量,子采样和DCT方法-例如GIMP)将想要的PNG转换为JPEG。

-qmin 1 -q:v 1相比,可以用JPEG格式获得稍微清晰的图像,并直接从ffmpeg输出为JPEG。