如何用FFmpeg将ACEScg色彩空间的EXR序列直接转成H.264视频?
直接用FFmpeg转换ACEScg色彩空间的EXR序列到H.264
FFmpeg 4.4及以上版本已原生支持OCIO色彩管理,可以直接完成ACEScg EXR序列到H.264的转换,无需中间转码步骤。以下是具体实现方案:
基础转换命令(转为Rec.709 SDR)
ffmpeg -framerate 24 -i input_%04d.exr -colorspace aces -color_trc linear -color_primaries aces -vf "colorspace=all=bt709:format=yuv420p" -c:v libx264 -crf 18 -preset medium output.mp4
参数解释
-framerate 24:匹配你的EXR序列帧率,按需调整(如25、30)-i input_%04d.exr:输入序列的文件名模板,%04d代表4位数字序号(根据实际命名规则修改)-colorspace aces -color_trc linear -color_primaries aces:告知FFmpeg输入为ACEScg色彩空间(线性传递函数+ACES原色)-vf "colorspace=all=bt709:format=yuv420p":通过滤镜直接将ACEScg转换为Rec.709色彩空间,同时输出H.264兼容的YUV420p像素格式-c:v libx264:指定使用H.264编码器-crf 18:控制输出质量,18-23为常用区间(值越小质量越高,文件越大)-preset medium:平衡编码速度与压缩效率,可选fast(更快)或slower(更小文件)
自定义OCIO配置文件的情况
如果你的序列使用项目自定义的OCIO配置,通过-ocio参数指定配置文件路径即可:
ffmpeg -framerate 24 -i input_%04d.exr -ocio ./path/to/your/config.ocio -vf "colorspace=all=bt709:format=yuv420p" -c:v libx264 -crf 18 -preset medium output.mp4
输出HDR H.264(HLG标准)
若需保留高动态范围信息,可转为HLG标准的H.264视频:
ffmpeg -framerate 24 -i input_%04d.exr -colorspace aces -color_trc linear -color_primaries aces -vf "colorspace=all=bt2020nc:trc=hlg:format=yuv420p10le" -c:v libx264 -crf 18 -preset medium -x264-params "colorprim=bt2020:transfer=hlg:colormatrix=bt2020nc" output_hdr.mp4
关键注意点
- 必须使用FFmpeg 4.4或更新版本,旧版本缺乏完整的OCIO色彩转换支持
- 运行前确认FFmpeg编译时已启用
--enable-openh264或--enable-libx264(大部分预编译包默认包含)
内容的提问来源于stack exchange,提问作者Michael B
相关产品推荐
相关产品推荐

