如何使用 ffmpeg 从视频文件中提取高质量的 JPEG 图像?
Posted
技术标签:
【中文标题】如何使用 ffmpeg 从视频文件中提取高质量的 JPEG 图像?【英文标题】:How can I extract a good quality JPEG image from a video file with ffmpeg? 【发布时间】:2012-04-30 19:26:03 【问题描述】:目前我正在使用这个命令来提取图像:
ffmpeg -i input.mp4 output_%03d.jpeg
但是如何提高 JPEG 图像质量?
【问题讨论】:
目前的质量有什么问题,除了不“好”? 【参考方案1】:使用-qscale:v
控制质量
使用-qscale:v
(或别名-q:v
)作为输出选项。
-qmin 1
输出选项(因为默认值为 -qmin 2
)。
输出一系列图像:
ffmpeg -i input.mp4 -qscale:v 2 output_%03d.jpg
有关图像输出的更多选项,请参阅image muxer documentation。
以约 60 秒的持续时间输出单个图像:
ffmpeg -ss 60 -i input.mp4 -qscale:v 4 -frames:v 1 output.jpg
不断覆盖/更新/保存到单个图像
使用-update 1
image muxer 选项。来自实时流输入的每秒一次示例:
ffmpeg -i rtmp://input.foo -q:v 4 -r 1 -update 1 output.jpg
另见
FFmpeg FAQ: How do I encode movie to single pictures? FFmpeg Wiki: Create a thumbnail image every X seconds of the video【讨论】:
这似乎对我没有影响——qscale 1 和 2 都给出相同的文件大小,并且(在我的肉眼看来)看起来与没有 qscale 完全一样。 你能发布你正在使用的完整命令行吗?还请在命令行上发布 ffmpeg 的完整、未删减的输出。请注意,选项的放置是相关的,因此 -qscale:v 2 需要放置在 -i inputfile 选项之后,但在输出文件选项之前,以产生任何效果。 对我来说,在-q:v 1
之外添加 -qmin 1 -qmax 1
会使文件大小翻倍。而且我似乎也看到了非常轻微的改善。
@complistic: -qmin 1 -qmax 1
导致文件更大,但给了我完全相同的图像。我通过 Photoshop、2 层和差异过滤器验证了这一点。像素是一样的。
@Kostanos 你可以试试-qmin 1 -q:v 1
。【参考方案2】:
以PNG等无损格式输出图片:
mkdir stills
ffmpeg -i my-film.mp4 -vsync 0 -f image2 stills/my-film-%06d.png
然后使用另一个程序(您可以在其中更精确地指定质量、二次采样和 DCT 方法 - 例如 GIMP)将您想要的 PNG 转换为 JPEG。
与-qmin 1 -q:v 1
和直接从ffmpeg
输出为JPEG 相比,这种方式可以获得稍微清晰的JPEG 格式图像。
如果您只想提取关键帧(可能具有更高质量的后期编辑),您可以使用以下内容:
ffmpeg -skip_frame nokey -i my-film.mp4 -vsync 0 -f image2 stills/my-film-%06d.png
-vsync 0
参数避免了需要用-r
指定帧速率,并且意味着输入文件中的所有帧都被视为,嗯,一帧。
【讨论】:
ffmpeg
输出仅使用 256 色(与 GIF 相同)的 PNG8
文件。所以它实际上是非常有损的。
@lapin 我使用这种方法提取的 PNG 是 24 位的(即使对于少于 256 种颜色的帧,尽管其他的有更多)。这是在 Windows 上使用版本 4.2.1 x64。还写了here 是:“如果我从mp4 中提取png,使用这个[ffmpeg
] 命令,我可以获得与原始视频质量相同的高质量png。”您正在使用哪个版本的ffmpeg
输出PNG8
文件,您的输入格式是什么?
@DonnyV。您不能对评论投反对票(仅“标记为不合适”)。很高兴这有帮助。谢谢你提醒我我发布了这个。我重新检查了我给出的示例命令并更新了我的答案,以提供一些更好的替代方案,这些替代方案更类似于我现在使用的,我对ffmpeg
有了更多的了解。
我发现您的解决方案可以生成高质量的关键帧,但我认为它必须以更清晰的方式排列。
@pouya 在播放过程中暂停视频,你能得到更好的结果吗?如果没有,那么您没有足够质量的原始视频副本来完成您尝试做的事情。如果您设置了-q2
,我已经看到ffmpeg
将JPEG 压缩质量设置为90(而不是70)的源代码,但这仍然低于我通常使用的。另请注意,它是从已经压缩的电影中重新压缩静止图像,并且“关键帧”的质量会更好。但是,虽然 MPEG 是基于 JPEG 的,但似乎无法将关键帧直接提升为 JPEG 图像。以上是关于如何使用 ffmpeg 从视频文件中提取高质量的 JPEG 图像?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ffmpeg 从 MPEG-4 文件中提取音频 [关闭]