【发布时间】:2021-01-11 23:24:30
【问题描述】:
我正在使用 ffmpeg 从 PNG 序列生成视频,但与源文件相比,生成的视频颜色错误。获得正确的颜色很重要,因为我们将视频资源与图像资源并排使用,并且颜色必须完美匹配(或者至少在视觉上尽可能相似,以免产生刺耳感)。
我们的 PNG 输入文件采用 sRGB 颜色配置文件。
这是我们正在运行的命令:
ffmpeg -r 30 -f image2 -s 1920x1080 -i bg_analyse_%05d.png -vcodec libx264 -crf 25 -pix_fmt yuv420p output5.mp4
下面是源 PNG(左)和视频中的同一帧(右)的比较:
根据我们收集到的信息,H.264 不支持将 sRGB 作为内置颜色配置文件,因此我认为 ffmpeg 必须执行某种颜色转换。但是,默认的 ffmpeg 设置似乎导致转换错误。
如何让 ffmpeg 导出颜色与原生 H.264 颜色配置文件中的 PNG 源文件在视觉上接近的视频?我尝试了各种标志来尝试指定输入颜色配置文件等等,但还没有产生预期的结果。
在使用 ffmpeg 从 PNG 序列生成视频时,我没有看到很多提及颜色配置文件。一定是因为大多数人对输出颜色不太挑剔,或者根本没有注意到?然而,当我们将源资产与视频输出并排放置在我们的应用中时,区别就很明显了。
我已经尝试在多个播放器中播放视频文件,以确保它不是显示问题(QuickTime Player X、Chrome 等)。所有播放器中的视频完全相同(比源 PNG 更轻)。
编辑 1:
最后,图像和视频将在 Electron (Chromium) 中显示。如果这改变了视频的生成方式。
编辑 2:
我们有一个从中导出文件的 AfterEffects 项目。我们找不到任何方法来输出正确的颜色,因此我们希望使用带有 PNG 序列(AE 正确导出)的 ffmpeg 可以让我们更好地控制最终颜色。也欢迎有关如何在 AE 中正确管理颜色的想法。
【问题讨论】:
-
@szatmary 非常有趣的信息,但我无法弄清楚我需要在 ffmpeg 标志方面做什么,以便通过我们的 sRGB 输入文件与 BT 获得正确的结果。您在文章中使用的 601 测试文件。还有其他见解吗?
-
@szatmary 请原谅线程劫持,但
ffmpeg -y -f lavfi -i nullsrc=s=320x240:r=25:d=1 -c:v libx264 -profile:v baseline -crf 18 -color_range pc 601.mp4将适用于所有操作系统。 -
蹩脚的建议是尝试 APNG:
ffmpeg -framerate 30 -i bg_analyse_%05d.png output.apng。无需处理色彩空间转换。我没有在 Electron/Chromium 中进行测试。