国语视界

 找回密码
 立即注册
查看: 845|回复: 9

[音频技术] TrueHDD: 开源 TrueHD Atmos 解码器

[复制链接]

1

主题

4

帖子

54

积分

列兵

大洋
1080
阅读权限
10
发表于 25-8-16 20:20 | 显示全部楼层 |阅读模式
本帖最后由 rainbaby 于 25-8-16 20:45 编辑

直到不久前,在 PC 上解码 TrueHD Atmos 的方案都是使用 Dolby Reference Player,输出的音频已经经过对象音频渲染,只能选择一种固定的声道布局,例如 7.1.4、9.1.6 等。
为了获得原始的解码结果,以近期的 TrueHD 解码器作为参考,通过逆向工程重新实现,现已开源。

项目地址:https://github.com/truehdd/truehdd,其中包含中文的使用说明。

在开源后的近一个月时间里根据早期用户反馈进行了部分改进,目前的版本为 0.4.0,可以在 Releases 获取。目前的 CI 包含 Windows / Linux (GNU / musl) / macOS 的 x86_64 / arm64 版本,应该能够覆盖大部分 PC 平台。

此外,目前已经与开源的渲染器 Cavernize 进行集成,Windows 用户可以通过 GUI 进行更加自由的音频渲染(在功能上完全替代  Dolby Reference Player,但请注意 Cavern 的目标并不是匹配  Dolby Reference Player 的输出结果)。

相比于 FFmpeg 的实现,主要区别在于:
- 完整支持 TrueHD (FBA) 解码和对象音频元数据解析,对于 Dolby Atmos 内容的输出结果是原始母版格式 Dolby Atmos Master Format (DAMF),可以导入 DAW 或直接使用 Dolby 的编码器进行重编码。
- 没有支持旧 MLP (FBB) 解码,主要是我懒。
- 包含更加严格的合规测试,主要为 FIFO 方面,由此可以正确处理已经二进制合并后的包含 Seamless Branching 的音轨,以及正确分离原本不应该合并的音轨,产生多个输出。
- 专用于 TrueHD 的 info 命令,可以获得更详细的属性,后面有例子。

对于重混音轨的用户,可以借此实现音频对象编辑,而不是从前的声道编辑。但请注意这并不一定会减少工作量。由于家用 Dolby Atmos 音频格式需要减少数据量,编码前已经经过了听觉等效的对象编组 (Spatial Coding / Clustering),对于某个声音元素,可能因为其重要性而能完整保留,但也可能会动态地分布于多个音频对象。对于这种情况需要仔细处理,可能需要更多混音技能,尤其是关于 Dolby Atmos 的,才能妥善处理。部分 DAW 可能会对于不标准的 bed 格式发出警告,通常可以通过修改项目配置解决,也可以在解码时使用 --bed-conform 强制输出 7.1.2 bed。除了方便导入之外没有别的作用,并且文件大小会翻倍。

对于影院包场放映用户, --bed-conform 是必须的。使用 Dolby Atmos Conversion Tool 从 DAMF 转换为 IMF IAB 后,再使用 https://github.com/izwb003/CineIA_CLI 转换为 DCP IAB,即可用于 DCP 封装。

对于重编码用户,正常使用 Dolby Encoding Engine / Dolby Media Encoder / Dolby Atmos Renderer 的音频编码功能即可。需要注意的是 --warp-mode,这主要影响 5.1 兼容层的后环绕下混方式,如果元数据里不存在此内容,解码时也没有指定一个模式写入 DAMF header (.atmos 文件, 实际是 YAML 格式),则编码器 / 渲染器可能会自己选择一个,造成非预期的结果。几个模式的区别在于:
- normal / 直通渲染:直接从 Atmos 渲染到 5.1,利用渲染器在前后环绕之间做幻象声像,重建声场。
- warping / 直通渲染(带房间平衡):直接从 Atmos 渲染到 5.1,通过更新算法减少声像定位带来的梳状滤波问题,并在房间中点到后方保持恒定电平(也就是消除了后半部分的虚拟声像)。这是目前的 Dolby 默认值,但如果想获得更准确的结果,可以使用 normal。
- prologiciix / Dolby Pro Logic IIx:先渲染到 7.1,再用特定衰减系数下混到 5.1。
- loro / 标准 (Lo/Ro):先渲染到 7.1,再按系数下混到 5.1。

对于这部分的选择,最好的方式当然是实际听一下原本的 5.1 presentation (使用 --presentation 1 以解码 5.1)。但如果是 independent presentation,则表明这个 5.1 并非 Dolby 下混,而是单独制作的,可以使用 --warp-mode normal 或不指定,在必要 / 条件允许的时候可以追加一个 5.1 重编码。

可以使用 info 命令检查 TrueHD 音频的各个 presentation 属性。输出例:

  1. TrueHD Stream Information
  2. =========================

  3. Stream Information
  4.   Format Sync               F8726FBA
  5.   Sampling rate             48000 Hz
  6.   Variable rate             true
  7.   Peak data rate            14541 kbps
  8.   Number of substreams      4
  9.   Dolby Atmos               true

  10. Presentation Information
  11.   Presentation 0
  12.     Number of channels      2
  13.     Presentation type       Downmix of presentation 1
  14.     Channel format          Stereo
  15.     DRC on by default       false
  16.     Dialogue Level          -37 dBFS
  17.     Mix Level                99 dB
  18.   Presentation 1
  19.     Number of channels      6
  20.     Presentation type       Independent
  21.     Dolby Surround EX       Not indicated
  22.     Channel assignment      L, R, C, LFE, Ls, Rs
  23.     DRC on by default       false
  24.     Dialogue Level          -31 dBFS
  25.     Mix Level               105 dB
  26.   Presentation 2
  27.     Number of channels      8
  28.     Presentation type       Downmix of presentation 3
  29.     Channel assignment      L, R, C, LFE, Ls, Rs, Lb, Rb
  30.     DRC on by default       false
  31.     Dialogue Level          -31 dBFS
  32.     Mix Level               105 dB
  33.   Presentation 3
  34.     Number of elements      16
  35.     Presentation type       Independent
  36.     Bed configuration       LFE
  37.     Dialogue Level          -31 dBFS
  38.     Mix Level               105 dB

  39. Trim detection              268711320 samples are trimmed from the beginning of the stream

  40. Analysis Summary
  41.   Frames processed          171099
  42.   Size                      156.82 MB (156822074 bytes)
  43.   Duration                  00:02:22.582
  44.   Average data rate         8799.0 kbps
复制代码


从中可以获得的重要信息例如:
- 下混关系:2.0 <- 5.1,7.1 <- Atmos,其中 5.1 和 Atmos 两个独立的 presentation。
- Trim detection 不为 0 表示有一部分音频从开头被剪切了,这通常是上游(Remux 发布组等)的处理导致的,可能需要检查丢失的部分是否确无必要。

欢迎大家反馈或讨论功能方面的问题。

评分

参与人数 1威望 +50 大洋 +1000 收起 理由
漫不经心 + 50 + 1000 -------------

查看全部评分

552

主题

2264

帖子

17万

积分

超级版主

大洋
688025
阅读权限
150

超级版主富甲天下帅哥

发表于 25-8-16 20:34 | 显示全部楼层
前几天在GITHUB上看到过,是个好东西
回复 支持 反对

使用道具 举报

0

主题

3242

帖子

1167

积分

营长

大洋
5048
阅读权限
50
发表于 25-8-17 00:08 | 显示全部楼层
真正的全景声重编码要来了,以前重编码全景声在物理声道数大于bed的声道数就失去了全景声的意义,准确定位结相的缺失,无法适应专业性较高的场合~~对于对象的编辑、空间位置的准确结相才是全景声复原的意义~~支持~~
回复 支持 反对

使用道具 举报

11

主题

453

帖子

105

积分

班长

大洋
358
阅读权限
20
发表于 25-8-17 01:23 | 显示全部楼层
不明觉厉,是意味着不久将来可能会一大批重制?
回复 支持 反对

使用道具 举报

219

主题

3324

帖子

3892

积分

工作组

大洋
149152
阅读权限
135
发表于 25-8-17 07:32 | 显示全部楼层
楼主给电影音轨重混带来了新的曙光,厉害了我的神。
学习学习再学习
回复 支持 反对

使用道具 举报

65

主题

4605

帖子

3545

积分

团长

大洋
100705
阅读权限
60

热心会员

QQ
发表于 25-8-17 21:38 | 显示全部楼层
还是大神专业,又多一个更好的选择!小白爱学习,好好学习学习!
回复 支持 反对

使用道具 举报

5

主题

1063

帖子

816

积分

连长

大洋
219
阅读权限
40
发表于 25-8-17 22:16 | 显示全部楼层
感谢分享
回复

使用道具 举报

0

主题

3560

帖子

457

积分

排长

大洋
40484
阅读权限
30
发表于 25-8-18 10:26 | 显示全部楼层
感谢分享,学到了!
回复 支持 反对

使用道具 举报

552

主题

2264

帖子

17万

积分

超级版主

大洋
688025
阅读权限
150

超级版主富甲天下帅哥

发表于 25-8-22 10:23 | 显示全部楼层
本帖最后由 麦哈 于 25-8-22 10:27 编辑
zdk961 发表于 25-8-17 00:08
真正的全景声重编码要来了,以前重编码全景声在物理声道数大于bed的声道数就失去了全景声的意义,准确定位 ...


以前的模式是用DRP先解成了7.14,对于音箱布局小于等于7.1.4的用户来说,这种做法基本上可以说是无损了。至于高于7.1.4的,实际上听到的也是7.1.4的效果。7.1.4只有12个轨,对于混音的人来说比较友好,最近玩这个Truehdd,有的全景声可以解出二十多个轨,对混音,可能是噩梦。即便这样,如果说解析是正确的,总感觉碟片里带的全景声也是简化版的,或者说其实这个数量的轨,也很牛逼了,全景声号称轨道可以上百个,或许这只是理论值,其实真正达到的并没有几个。
回复 支持 反对

使用道具 举报

0

主题

3242

帖子

1167

积分

营长

大洋
5048
阅读权限
50
发表于 25-8-22 17:11 | 显示全部楼层
本帖最后由 zdk961 于 25-8-22 18:14 编辑
麦哈 发表于 25-8-22 10:23
以前的模式是用DRP先解成了7.14,对于音箱布局小于等于7.1.4的用户来说,这种做法基本上可以说是无损了。 ...


因为全景声除了bed,应该说没有确定多少轨的概念,如果说全景声是7.1.4之类的,其实是不准确的,这已经不是全景声的叫法了,7.1为bed的全景声,它的实际多少箱子是不确定的,可以是只有7.1,也可以多几个环绕的、天空的,就算多20个环绕也是可以的,家庭影院箱子有多少,通过算力来确定哪个箱子发什么声,所以应该是全景声对象的编辑、元数据的编辑才应该是全景声真正的表达方式,一旦全景声定轨后,其实本质已经发生改变,不是真正的全景声了,芯片无法根据元数据计算在3D空间结相、精准定位的话就失去了全景声的意义,尤其是大于15声道以上的解码器
在实际应用上讲,全景声最最主要的存在是物件的走位和定位,而氛围是在其次的,氛围容易出,它是大范围的,只要箱子和炮的素质可以,码率够,氛围和气场带出来不难,但箱子数量有限,要箱精确定位,移动定位就不容易,每秒的结相点是不同的,而定规后会失去那种精确感,前提是解码器的算力够好、够精准,也就是前级要可以
这也是全景声和DTS-X比较明显的区别,为什么很多人说DTS-X劲爆,前级的算法和技术的定位有区别,DTS-X的箱子摆位比较灵活,而全景声是有要求,原因就在这里~~~
当然,7.1也好,5.1也好,7.1.4也好,定了轨的音轨,也可以让全部的10个箱子、15个箱子发声,这是上混,是逻辑算法,也可以说其他的箱子发的声是假的,旁边的箱子分过去的声音,但全景声不是,它让全部箱子发声时元数据内含有的信息,是真的,不能称为上混,而是真的独立音轨,理论上全景声是箱子越多越好,定位越精准,但也要考虑到声音的波峰波谷、反射、干扰、吸收等等,这里就不展开了~~但定轨的全景声已经没有元数据了

其实以前这里的音轨、电影的题目,所有的7.1.4的表达概念都是不准确的,全景声音轨主只有8条或者5条,因为只有bed才是有轨,只能说7.1,或者5.1,其他的轨是后期芯片根据家里的箱子重新通过对象和元数据再扩展开的,不管用mediainfo或者是BDINFO来检测,都是没有天空轨道这个概念的,只要有人说全景声是有天空轨道的,那就是不对的,全景声是有天空音箱,但没有天空轨道~~~

个人意见,仅供参考~~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表