在特定时间标记从视频中提取静止帧时,如下所示:ffmpeg -i foobar.mp4 -vframes 1 -ss 4:20 -q:v 1 example.png
我注意到使用 PNG 或 JPG 会产生不同的颜色。(注意 -q:v 1
表示最高图像质量)
这里有些例子:
一般来说,JPG 的照片似乎比 PNG 的照片更暗,饱和度更低。
与
exiftool
核对时或 imagemagick 的 identify
,两个图像都使用 sRGB 色彩空间并且没有 ICC 配置文件。知道是什么原因造成的吗?或者这两个中的哪一个是“正确的”?
我还尝试使用我的视频播放器 (MPlayerX) 以 JPG 和 PNG 格式保存屏幕截图。在这种情况下,两种格式的帧转储看起来完全一样,它们看起来很像 ffmpeg 的 JPG 静止图像。
最佳答案
这与视频范围或级别有关。视频将颜色存储为亮度和色度,即亮度和色差,并且由于模拟信号时代的遗留原因,黑色和白色在 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 假设工作室或有限范围并输出到全范围。由于颜色编码转换,颜色仍然不会相同,但主要变化应该消失。
关于image - 使用ffmpeg提取帧时,jpeg颜色比png更差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38199238/