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

Dan*_*ann 92 graphics video ffmpeg computer-vision sharpffmpeg

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

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

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

llo*_*gan 186

使用 -qscale:v

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

要输出一系列图像:

ffmpeg -i input.mp4 -qscale:v 2 output_%03d.jpg
Run Code Online (Sandbox Code Playgroud)

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

ffmpeg -ss 60 -i input.mp4 -qscale:v 4 -frames:v 1 output.jpg
Run Code Online (Sandbox Code Playgroud)

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


MJPEG

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

ffmpegffprobe控制台输出可以告诉你,如果你输入MJPEG:

$ ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=nw=1 input.avi
codec_name=mjpeg
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用mjpeg2jpeg比特流过滤器提取帧:

$ ffmpeg -i input.avi -codec:v copy -bsf:v mjpeg2jpeg output_%03d.jpg
Run Code Online (Sandbox Code Playgroud)

另见


Jak*_*ake 10

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

mkdir stills
ffmpeg -i my-film.mp4 -vsync 0 -f image2 stills/my-film-%06d.png
Run Code Online (Sandbox Code Playgroud)

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

与使用 JPEG 格式-qmin 1 -q:v 1并直接从JPEG 格式输出相比,这种方式可以获得更清晰的 JPEG 格式图像ffmpeg

如果您只想提取关键帧(可能具有更高质量的后期编辑),您可以使用以下内容:

ffmpeg -skip_frame nokey -i my-film.mp4 -vsync 0 -f image2 stills/my-film-%06d.png
Run Code Online (Sandbox Code Playgroud)

-vsync 0参数避免了需要指定帧速率,-r并且意味着输入文件中的所有帧都被视为,嗯,一个帧。

  • @lapin 我使用这种方法提取的 PNG 是 24 位的(即使对于颜色少于 256 色的帧也是如此,尽管其他颜色有更多)。这是在 Windows 上使用版本 4.2.1 x64。[此处](https://forum.videohelp.com/threads/334333-Help-with-lossless-ffmpeg-command-%5bvideo-png-back-to-video%5d)还写的是:“如果我拉png的从 mp4 中,使用此 [`ffmpeg`] 命令,我可以获得与原始视频质量相同的高质量 png。” 您使用什么版本的“ffmpeg”来输出“PNG8”文件,您的输入格式是什么? (3认同)
  • @pouya 当您在播放期间暂停视频时,您能得到更好的结果吗?如果没有,那么您就没有足够高质量的原始视频副本来实现您想要做的事情。我已经看到源代码,其中如果您设置了“-q2”,则“ffmpeg”将 JPEG 压缩质量设置为 90(而不是 70),但这仍然低于我通常使用的值。另请注意,它正在重新压缩已压缩的电影中的静态图像,并且“关键帧”的质量将更好。但是,虽然 MPEG 基于 JPEG,但似乎无法直接将关键帧提升为 JPEG 图像。 (2认同)
  • 当尝试将 .mp4 视频分割成帧时,我尝试了“-qscale:v”参数。从 .jpg 到 .png 的简单更改在质量上产生了最大的改进。 (2认同)