蜗牛的壳 - profile
type: channel
link: https://snailium.net/tag/profile/
items: 关于 AVC High@L5.1 降级为 L4.1 的注意事项

关于 AVC High@L5.1 降级为 L4.1 的注意事项
type: item
date: 2009-08-25T00:40:59-04:00
description: 之前一直在研究 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