FANTASONIC:macOS如何正确播放B站的杜比全景声
FANTASONIC
编辑于 2026年08月05日 15:42

FANTASONIC:macOS如何正确播放B站的杜比全景声

让 macOS的Safari 访问B 站网页版时正确激活杜比全景声,而不是只激活「多声道」。

p.s.:iPadOS 的Safari 目前可以直接播放B站网页版中的5.1杜比全景声。

本文无任何图片


这是在解决什么?

B 站的杜比档位音轨本身是货真价实的 E-AC-3 JOC(仅限2026年1月23日之后投稿的稿件,支持声道为5.1、7.1,但不支持5.1.2),码流里有 15 个动态对象。

但是B站在播放时,macOS(猜测iOS手机端APP也是同理)却将音频码流识别为普通的「多声道」,导致某些声道空间渲染出现问题,特别是头部追踪,音频质量和效果大打折扣。

其主要原因就是杜比全景声识别错误而使macOS未正确渲染,以下两个主要原因导致了这个问题:

  1. 容器层丢了 JOC 声明。 B 站转码用的是 ffmpeg(文件里签名为 Lavf61.7.105),而 ffmpeg 的 -c:a copy 路径至今不写 dec3 里的 flag_ec3_extension_type_a / complexity_index_type_a(jellyfin-ffmpeg#584​,至今仍未修复)。B 站分片的 dec3 payload 只有 5 字节 14 00 0c 0f 00,AVFoundation 看到的是一条普通 7.1的音频流。

  2. WebKit 的 MSE 分支不主动协商 Atmos 输出。 同一份文件,用 <video src> 原生路径播能出全景声,走 MediaSource 就不行。


我们开发了一个Script来解决这个问题,并让您的macOS正确渲染B站杜比全景声稿件(仅限2026年1月23日之后投稿的稿件)。

Script对应做两件事:

1.拦截SourceBuffer.appendBuffer补偿信息。

2.注入Atmos Key。


前置条件

缺一不可,缺少任意一项都不会生效:

  • macOS + Safari。(Chrome / Edge / Windows 一律无效,这是针对 WebKit 的)

  • 用户脚本管理器:Userscripts(免费)或 Tampermonkey for Safari。

  • Safari 设置 → 网站 → 自动播放 → bilibili.com​ 设为「允许所有自动播放」。

  • B 站大会员,且视频本身有杜比全景声档位,播放时在画质菜单里选中杜比音质。(内含杜比全景声声道配置为5.1 / 7.1,不能是5.1.2,5.1.2会没有声音;详见文后的更多内容)

  • 稿件投稿时间在 2026 年 1 月 23 日之后。(更早的稿件是当时B站的编码有问题,码流里没有可用的 JOC 数据,容器层补声明也救不回来,脚本对这类稿件无效。想确认某个稿件属于哪种情况,可以把音频分片下载下来用 MediaInfo 查看,Number of dynamic objects 有值说明码流完好、脚本能生效,没有则是源头就丢了;详见文后的更多内容)

  • 输出设备支持空间音频:推荐为AirPods系列:含 AirPods Max 2、AirPods Pro 3 、AirPods Max 、AirPods Pro 2 、AirPods 4ANC、AirPods 4、AirPods Pro、AirPods 3)


如何使用

  1. 装好 Userscripts 或 Tampermonkey。(Userscripts可在Appstore里搜索安装)

  2. 新建一个空脚本,全选(⌘A)后粘贴 bili-atmos-v1.1-ftsc.user.js 文件中的全部内容,并保存。(该文件下载链接见后边的Script下载)

  3. 确认脚本开关是开启状态(Userscripts为脚本后边的绿色开关)

  4. 打开任意 B 站杜比全景声视频(稿件投稿时间在 2026 年 1 月 23 日之后)


如何确认生效

看控制中心。 点击菜单栏的声音图标(连接了AirPods后为该AirPods型号对应的图标),右上角会显示当前音频渲染方式:

  • 多声道 → 未生效

  • 杜比全景声 → 已生效

也可以打开 Web 检查器控制台,正常会有两条绿字:

[atmos] 钥匙已插入(原生路径)

[atmos] dec3 追加 JOC → 14 00 0c 0f 00 01 10


其它技术特点

  • 目前版本只在 macOS中的 Safari 有效。

  • 只处理 dec3 box size 为 13 或 14 的情况(即 B 站渲染模板、以及 ffmpeg 封装的无 JOC 变体)。已有正确 JOC 声明的会直接放行。

  • num_dep_sub 保持 B 站原样不动。


Script下载

bili-atmos-v1.1-FTSC

https://pan.baidu.com/s/1KDYRyRabpOyt6ahkvvik0g?pwd=ftsc 提取码: ftsc 


更多内容

一些碎碎念

为什么只支持杜比全景声声道为5.1和7.1,而不支持5.1.2?

杜比最开始是有7.1的EAC3 JOC的,声道格式为L R C LFE Ls Rs Lb Rb,格式设置为「Dolby Surround EX」。但推测由于此渲染配置和杜比给蓝光光碟机的MLP格式一样,并且码率相近,杜比在后边正式发布给音乐人的DME套件中,删除掉了此设置,并用5.1.2代替。

注5.1.2的声道格式为:L R C LFE Lb Rb Tfl Tfr,无「格式设置」,该格式仅供蓝光机使用。

有些UP主认为5.1.2就是7.1,并且,B站的渲染器也无法正确识别5.1.2,所以在编码中强行把后边的四个声道(Lb Rb Tfl Tfr)设置成了 Ls Rs Lb Rb。但是5.1.2的元数据因为Ch7 Ch8(Tfl Tfr)是天空声道,所以无法进行预渲染。导致了非常奇怪的听感和丢失信息。

用本Script恢复成正确的声道配置后,原本的音频流会调用macOS中正确的解码器,但巧的是,由于上文提到的「5.1.2格式的解码器是专为蓝光机设计的」,杜比并未开放正确的解码器给苹果,只开放了正常的5.1和被雪藏的7.1的解码器给苹果,所以有些UP强行上传的5.1.2的音轨,恢复了正确的atmos key后,无法被macOS解码,所以会造成直接没有声音。只有正确上传7.1声道格式并有正确的元数据到B站,经过Script恢复元数据后,才可以正常渲染出应有的声音。

稿件投稿时间在 2026 年 1 月 23 日之前的稿件怎么办

年初的时候经过B站「猫先生」(不是UPMAO)的不懈努力和大力支持,终于把之前B站编码的烂摊子解决好了,让上传的音频稿件有了正常的元数据。虽然播放时还是不行(这个锅猜猜应该谁背?反正不是猫先生团队。不过这个Script算是给播放端擦了屁股)。

经过我自己的测试,虽然23日之前的稿件元数据不对,但是经过Script的恢复,声道的相位算是一定程度上保住了。也算大功一件了。

没想到这个Script能让瞎上传5.1.2的UP主(也可能是他们真不懂)原形毕露,确实不是我们的本意。(笑)


特别感谢FANTASONIC成员Skz的努力,我们才能一路顺利的解决很多问题!

也祝大家用的开心!