如何使用ffmpeg尽可能多地保留RGB颜色将一系列PNG文件转换为视频容器?


1

我有950个PNG文件,它们打算成为38秒视频轨道中的单独帧,每秒25帧。除了序列号之外,文件名是相同的,这在这种情况下是惯常的。

我希望生成一个广泛支持格式的容器,理想情况下WebM,如果可以满足所有条件,或者MPEG-4,例如,现代浏览器支持的编解码器,用于播放,从这一系列的PNG图像我有。问题在于颜色被移位并且解码视频中的背景颜色不再与从PNG图像中的背景颜色采样的相同RGB三元组匹配。这会导致视频在我嵌入视频的HTML页面上的预期背景中显示出来。

我试过这么简单:

ffmpeg -f image2 -i image%03d.png output.webm

这确实给了我一个装在WebM容器中的25 fps VP9视频轨道。

PNG图像是动画风格,具有纯色背景和简单的形状,为前景设置动画。它们似乎是未标记的颜色(这就是Adobe Bridge告诉我的,我认为这意味着没有嵌入的颜色配置文件或对它的引用)。我上面尝试的问题是,即使容器在Chrome中播放,从PNG图像采样的RGB三元组#ED4D56的背景颜色也不会与正在播放的视频中出现的背景颜色在感知上匹配。

这是RGB到YUV(编码)到RGB(回放)颜色转换的不可避免的副作用吗?有什么方法可以缓解这种情况吗?我并不坚持使用RGB对视频轨道中的帧进行编码,我认为YUV很好,只要现代浏览器播放这些帧时,在解码和显示时会产生相同的(在可忽略的误差范围内)RGB三元组。 (多个)帧。

我的问题是,使用什么命令行ffmpeg可以尝试缓解这个问题?我愿意切换视频编解码器,像素格式,在ffmpeg中启用颜色管理(如果存在)等。


PNG是如何产生的?任何特定的颜色属性?
Gyan

使用After Effects生成。如果我理解正确的话,我无法想到特定的颜色属性 - 图像没有嵌入任何颜色配置文件,只是未标记的RGB图像。
13:59

我之前有一个关于PNG无法保存个人资料的评论,这实际上是不正确的,所以我删除了它 - 但是,由Photoshop保存的PNG不能有嵌入的配置文件,尽管该文件技术上可以容纳一个。如果AE类似,我不会感到惊讶。我会在导出时转换为sRGB,看看是否有效。
Tetsujin

Answers:


0

我最近有一个非常类似的任务,我会说仍然没有完美的解决方案(截至2018年10月)。这确实是低精度RGB到YUV到RGB颜色转换的副作用。甚至一些编码器的“无损”变体(例如libvpx-vp9 -lossless)由于YUV颜色空间而产生失真的颜色。

  • 如果可以接受非精确的颜色,那么libvpx编解码器可以做得非常好:

    ffmpeg -r 25 -i image%03d.png -c:v libvpx -crf 4 -b:v 0 output.webm
    

    通过这些设置,它产生了可忽略不计的色移量,甚至是某些帧组的精确颜色。VPx编解码器得到广泛支持(除了IE和Safari之外的所有主流浏览器)并产生合理的文件大小。

  • 如果严格要求确切的颜色,那么我们需要避免颜色空间转换。我想出的唯一跨浏览器解决方案是使用动画png图像。ffmpeg对apng只有非常基本的支持,所以最好使用其他工具,例如apngasm

    apngasm output.png image001.png 1 25
    

    除了IE和Edge之外,它将在任何地方工作(它将回退到静态第一帧)。文件大小很大,但这是真正无损编码的代价。

  • libx264rgb使用它-编解码器还应该提到的 是编码的精确RGB颜色当/如果浏览器将支持它的正确途径。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.