You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用FFMPEG从iPhone13拍摄的BT.2020 MOV中提取色彩准确的图像序列

解决方案

问题根源

你所处理的是iPhone 13 Pro拍摄的HLG格式HDR视频,元数据中的arib-std-b67即为HLG电光转换函数标识。直接提取帧时FFmpeg不会自动完成HDR到SDR的色彩映射与伽马转换,而普通图像查看器默认将PNG/JPG按BT.709 SDR的伽马规则解析,因此必然出现亮度偏高、饱和度偏低的偏色问题,并非HDR视频无法提取准确色彩。

可行方案

方案1:输出兼容普通查看器的SDR图片(推荐绝大多数场景使用)

使用zscale滤镜完成HLG到BT.709 SDR的全链路色彩转换,命令如下:

输出最高质量JPG:

ffmpeg -i img_2106.mov -vsync 0 \
-vf "zscale=transfer=bt709:matrix=bt709:primaries=bt709,format=yuv420p" \
-q:v 1 test.%04d.jpg

输出PNG:

ffmpeg -i img_2106.mov -vsync 0 \
-vf "zscale=transfer=bt709:matrix=bt709:primaries=bt709,format=rgb24" \
test.%04d.png

如果需要保留更高色彩精度,可将format=rgb24替换为format=rgb48输出16bit深度PNG。


如果你的FFmpeg版本提示找不到zscale滤镜,可使用原生scale+colormatrix组合替代:

ffmpeg -i img_2106.mov -vsync 0 \
-vf "colormatrix=bt2020:bt709,scale=in_color_matrix=bt2020:in_range=tv:out_color_matrix=bt709:out_range=tv,format=yuv420p" \
-q:v 1 test.%04d.jpg

方案2:保留HDR信息输出HDR图片

若后续需要在支持HLG HDR的编辑/查看软件中使用图片,可输出携带完整HDR元数据的PNG:

ffmpeg -i img_2106.mov -vsync 0 \
-vf "zscale=transfer=arib-std-b67:matrix=bt2020nc:primaries=bt2020,format=rgb48" \
-color_primaries bt2020 -color_trc arib-std-b67 -colorspace bt2020nc \
test.%04d.png

注意:该方案输出的图片仅可在支持HLG HDR的设备/软件中显示正常色彩,普通查看器打开仍会偏色。


内容的提问来源于stack exchange,提问作者aescript

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:06:03