之前一直在研究 Xbox360 能播放的高清视频,也大概摸索了一下 Xbox360 能播放的 H.264 视频制作方法。但是这几天在处理 CHD 制作的日本樱花的时候,制作完的 MP4 文件在 Xbox360 上播放死机。
仔细在网上搜索了一下,问题出在视频降级环节上。
用 h264info 更改 Profile Level 实际上用的是欺骗法(将第 7 个字节由 0x33 改成 0x29)。这种方法只对 Level 4.1 兼容视频有效。
何谓 Level 4.1 兼容视频?这要从 Profile Level 说起。具体的 Profile Level 规则我没有看(也没时间去研究),看 Doom9 上各位达人的讨论,问题出在缓冲区上。Level 5.1 要求的解码器缓冲区要大于 Level 4.1,所以如果没有足够大的缓冲区,解码就会出错。在 Xbox360 上的表现就是死机。
那何谓 Level 4.1 兼容视频呢?简单来说,有些视频虽然标注为 Level 5.1,但是解码时缓冲区的要求很小,甚至小于 Level 4.1 的规定。这样一来,用 Level 4.1 的解码器完全可以解码这个“Level 5.1”视频。这样的视频就被称之为“Level 4.1 兼容(Level 4.1 compliant)”。
在大致搞明白原理之后,下一步就是研究对策。既然有“Level 4.1 兼容”一说,也就证明有些视频还是可以无需重压直接降级的。要确定视频是否“Level 4.1 兼容”,比较方便的方法是使用 mkv2vob。
首先,在 Configuration 标签中,把 Video Transcoding 选成 Never。这样可以避免自动重压。
然后在 Add File 标签下,选择 MKV 文件和输出目录,再点 Add File,软件就会自动检查视频。
如果出现“Transcoding Required: Not L4.1 Compliant”,就说明视频不能被 Level 4.1 解码器正确解码,需要重新压制。
另外,如果源片的音频是 AAC 5.1 的话,还涉及到音轨映射问题。在这里就不详细叙述了,具体参见“参考资料 2”,
参考资料:
1. Doom9.org: High Profile 5.1 -> 4.1
2. Flexion.org: Converting MKV
你好,我看了你的文章,既然 h264info使用的是欺骗法改了两个字节,那为什么我按参数选择完毕后,转换过程时间很长,好象是从新压制了一遍呢?
如果可以找到这个字节的位置,是不是可以用二进制编辑工具直接修改一下就可以了呢?
@爱如微风
新版h264info加入了一些其他的检查,所以需要比较长的时间
具体情况不大清楚,很久没用过这个软件了
另外,h264info需要复制数据到新文件,这也需要一些时间,就像在同一个目录中建立文件复件一样
[…] [Update @ 2009-08-25 00:54] 并不一定所有的视频都能用此方法降级成 Level 4.1。具体参见:《关于 AVC [email protected] 降级为 L4.1 的注意事项》。 […]