含HDR元数据的h264
dwing吧
全部回复
仅看楼主
level 1
仅做分享,第一次实践成功,大佬们请不要浪费时间往下读了。
之前以为HDR只能用于hevc,后来发现虽然真HDR的信息还是需要创作的时候保留,但是骗过播放器或者解码器只是一行元数据的事,但是我只知道hevc编码器能在编码的时候添加,后来发现ffmpeg可以不重编码而更改color-prim、color-matrix、transfer等信息,但是还是改不了master-display(包括亮度最大值和最小值)
直到刚才才在 @Mr-Z♂大佬的启发下发现mkvmerge可以做这个事情。mediainfo识别如下
(masterdisplay还错着呢,这个坐标本菜鸡还不知道怎么写,大佬们别骂)
mpv和madVR都识别为HDR(让mediainfo或者可能解码器渲染器识别HDR compatible可能是只需要一个masterdisplay-luminance)
当然,给普通SDR视频加HDR元数据没有任何实际价值,就算是转换color-prim、color-matrix、transfer也只是骗个人,真要SDR转HDR只能借助一些高级的拉伸算法了
2020年11月09日 15点11分 1
level 10
不要问为什么,直接照抄就是了…
ffmpeg -i 输入文件名 -c:v libx265 -x265-params hdr-opt=1:repeat-headers=1:colorprim=bt2020:transfer=smpte2084:colormatrix=bt2020nc:master-display=G(8500,39850)B(6550,2300)R(35400,14600)WP(15635,16450)L(40000000,50):max-cll=0,0 -pix_fmt yuv420p10le 输出文件名.mkv
2020年11月10日 00点11分 2
这个我知道,但是这样的话就重新编码了啊,我之前压HDR经常用这套参数了
2020年11月10日 01点11分
masterdisplay的数值在mkvmerge里和ffmpeg里完全不一样,我有点懵
2020年11月10日 01点11分
所以可知master-display bt2020是这样写,P3是G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,1),那这个对照表哪里查呢?
2020年11月10日 01点11分
HDR的json数据怎么提取?
2020年11月10日 02点11分
吧务
level 14

看x265的doc。
“G(%hu,%hu)B(%hu,%hu)R(%hu,%hu)WP(%hu,%hu)L(%u,%u)” where %hu are unsigned 16bit integers and %u are unsigned 32bit integers. The SEI includes X,Y display primaries for RGB channels and white point (WP) in units of 0.00002 and max,min luminance (L) values in units of 0.0001 candela per meter square. Applicable for HDR content.
也就是说G B R WP的数值关系是五万倍,L的数值关系是一万倍。
不过其实这个东西看起来复杂,但基本上也就限制在几个标准值内
2020年11月10日 06点11分 3
吧务
level 14
还有,实际数值在各个色域的百科页面也有(我看的是Wikipedia
2020年11月10日 06点11分 4
我翻到了x265的doc,从那里得到的五倍关系,然后原坐标是ITU-R系列标准,我在 ITU-R BT2020里找到了bt2020的坐标,也就是2楼的数值除以5w倍。
2020年11月10日 11点11分
level 1
Mastering display, MaxCLL, MaxFALL 之类的是在 CTA-861 里定义的 (google搜cta-861-g第一个就是),里面还包含了详细算法,好像 hdr10 才需要这个
2023年10月08日 03点10分 5
可以看看 ffmpeg 源码里相关的注释,会学到很多的
2023年10月08日 04点10分
1