
让 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未正确渲染,以下两个主要原因导致了这个问题:
容器层丢了 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的音频流。
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)
装好 Userscripts 或 Tampermonkey。(Userscripts可在Appstore里搜索安装)
新建一个空脚本,全选(⌘A)后粘贴 bili-atmos-v1.1-ftsc.user.js 文件中的全部内容,并保存。(该文件下载链接见后边的Script下载)
确认脚本开关是开启状态(Userscripts为脚本后边的绿色开关)
打开任意 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 站原样不动。
bili-atmos-v1.1-FTSC
https://pan.baidu.com/s/1KDYRyRabpOyt6ahkvvik0g?pwd=ftsc 提取码: ftsc
一些碎碎念
杜比最开始是有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恢复元数据后,才可以正常渲染出应有的声音。
年初的时候经过B站「猫先生」(不是UPMAO)的不懈努力和大力支持,终于把之前B站编码的烂摊子解决好了,让上传的音频稿件有了正常的元数据。虽然播放时还是不行(这个锅猜猜应该谁背?反正不是猫先生团队。不过这个Script算是给播放端擦了屁股)。
经过我自己的测试,虽然23日之前的稿件元数据不对,但是经过Script的恢复,声道的相位算是一定程度上保住了。也算大功一件了。
没想到这个Script能让瞎上传5.1.2的UP主(也可能是他们真不懂)原形毕露,确实不是我们的本意。(笑)
特别感谢FANTASONIC成员Skz的努力,我们才能一路顺利的解决很多问题!
也祝大家用的开心!