使用ffmpeg提取帧时,jpeg颜色比png差吗?

时间:2016-07-05 08:59:42

标签: image colors ffmpeg format screenshot

从特定时间标记的视频中提取静止帧时,如下所示:

ffmpeg -i foobar.mp4 -vframes 1 -ss 4:20 -q:v 1 example.png

我注意到使用不同颜色的PNG或JPG结果。
(请注意,-q:v 1表示最高图像质量)

以下是一些例子:

  1. JPG vs PNG
  2. JPG vs PNG
  3. JPG vs PNG
  4. 一般来说,JPG镜头看起来比PNG稍暗,饱和度低。

    使用exiftool或imagemagick' identify进行核对时,两张图片都使用sRGB色彩空间而不使用ICC配置文件。

    知道造成这种情况的原因是什么?或者这两者中哪一个是正确的?

    我还尝试在JPG和PNG中使用我的视频播放器(MPlayerX)保存屏幕截图。在这种情况下,两种格式的帧转储看起来完全相同,它们看起来大多像ffmpeg的JPG剧照。

2 个答案:

答案 0 :(得分:1)

我不知道具体的ffmpeg。但是,一般来说,JPEG图像可以进行压缩,稍微降低质量,以换取文件大小的大幅减少。大多数可以编写JPEG文件的程序都会有一个开关(或者它们可以选择)来设置“质量”或“压缩”或类似的东西。我似乎没有在我打开的六台机器中找到任何一台机器,或者我会告诉你我认为合适的机器。

答案 1 :(得分:1)

这与视频范围有关。视频将颜色存储为亮度和色度,即亮度和色差,并且由于来自模拟信号时代的传统原因,黑色和白色在8位编码中不表示为0和255,而是分别表示为16和235。通常应该标记视频流,这是这种情况,因为还可以存储视频,其中0和255分别是B和W.如果文件未被标记或标记错误,则某些渲染或转换函数可能会产生错误的结果。但是我们可以强制FFmpeg以这种方式解释输入。

使用

ffmpeg -i foobar.mp4 -vframes 1 -ss 4:20 -q:v 1 -src_range 0 -dst_range 1 example.png/jpg

这告诉FFmpeg假设工作室或有限范围并输出到全范围。由于颜色编码转换,颜色仍然不相同,但主要变化应该消失。