FFmpeg HDR视频转SDR视频命令

之前蓝光盘电影多是AVC 1080p 8bit SDR格式视频,近两年4K电影流行,下载的蓝光电影多是HEVC 2160p 10bit HDR视频格式。
ffprobe查看有如下属性:

# 10bit HDR
Stream #0:0(eng): Video: hevc (Main 10), yuv420p10le(tv, bt2020nc/bt2020/smpte2084), 3840x2160 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 23.98 tbc (default)
# 8bit SDR
Stream #0:0(eng): Video: h264 (High), yuv420p(tv, bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)

一些高端支持HDR的显示器可以正常显示,传统显示器是没法直接欣赏HDR视频的,默认会看到画面灰蒙蒙的。下图的样子
在这里插入图片描述
幸好一些播放器会在播放时转换为SDR视频进行显示,比如VLC播放HDR视频默认转换,PotPlayer播放界面有个‘HDR’开关可以开启转换显示。这仅仅是播放显示,当使用播放器自带的截图时,依然是灰蒙蒙的图像。
在这里插入图片描述
在特殊的场合需要把HDR转换为SDR视频,这时候万能的ffmpeg就可以搞定了。

ffmpeg -i Luca-250s-2160p.HEVC.10bit.HDR.AAC.mkv \
  -vf zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable:desat=0,zscale=t=bt709:m=bt709:r=tv,format=yuv420p \
  -c:v libx264 -preset slow -crf 18 \
  -c:a copy \
  Luca-250s-2160p.AVC.SDR.AAC.mkv

上面命令是把10bit(yuv420p10le) HDR HEVC转为8bit(yuv420p) SDR H.264视频。主要是使用了zscale滤波器,后面的音视频编码参数随意。

网上下载的Windows版 ffmpeg 命令应该已经包含了zscale滤波器,Linux版 ffmpeg 的可能会报[AVFilterGraph @ 0x5590a2ffc9c0] No such filter: 'zscale'类似找不到zscale错误。

需要在编译的时候配置时候指定--enable-libzimg,当然需要先安装这个zimg库 https://github.com/sekrit-twc/zimg

不想动手的直接下我编好的吧。
ffmpeg-4.4.1-2021.12.23.tar.gz

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值