m4s 无损合成 MP4:B站缓存 3 个场景一次搞定
2026/8/27 1:16:17 网站建设 项目流程

m4s 无损合成 MP4:B站缓存 3 个场景一次搞定

【免费下载链接】m4s-converter一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter

把 m4s 文件从 B站 缓存里拷出来却放不出来?问题不在文件坏了,而在音、画本来就被拆成两个文件存放。m4s-converter 是一个跨平台的 m4s 转 MP4 无损合成工具,它把两条轨道直接拼进 MP4 容器,零转码、不损失画质。下面用三个真实场景把它讲透:换电脑、移动硬盘转存、手机缓存搬电脑。

场景一:换电脑前抢救缓存合集

先看你缓存目录里有什么:每个视频被拆成两个.m4s文件,一个只装画面、一个只装声音,旁边还有.playurlvideoInfo.jsonentry.json这些记录标题、UP 主、缓存状态的元数据。这就是为什么搜“m4s 文件打不开怎么办”,答案总是同一个——多数播放器不认 m4s,即便勉强认,也往往只出一条轨道,结果有画无声、或有声无画。

m4s 像是分开签发的两张身份牌,合成后的 MP4 才是正式上了户口。这个工具的做法很直接:调用 GPAC 的 MP4Box 引擎,把视频轨道与音频轨道原样拼进 MP4 容器,不重算任何一帧(核心逻辑见 common/synthesis.go)。就像把两盘分开的磁带拼回一盘完整录音,而不是重新录制一遍,这正是它零转码、不损失画质、又快又稳的全部秘密。

用法简单到几乎不用学:

  • Windows:解压后双击m4s-converter.exe,看到免责声明按任意键,程序自动走完“扫描 → 识别 → 合成 → 打开输出文件夹”,全程无需配置。
  • macOS / Linux
git clone https://gitcode.com/gh_mirrors/m4/m4s-converter cd m4s-converter ./m4s-converter

默认它会看 B站 的默认缓存位置~/Videos/bilibili,缓存在别处就用下一节的-c指过去。合成结果放在缓存目录下的output文件夹里,按“合集名-UP主”分子目录,完成后程序会自动帮你打开输出目录。如果缓存里带弹幕 xml,也会顺手转成 ASS 字幕,后面专门说。

场景二:B站 缓存搬上移动硬盘 💾

缓存放在移动硬盘、NAS 或非默认磁盘时,“B站 缓存 怎么 保存”和“缓存 移动硬盘 转换”其实都归结为几个参数:

参数作用
-c指定缓存目录,例如拷到移动硬盘的 bilibili 目录
-o覆盖同名合成文件,默认是自动重命名,避免误覆盖
-u把没合并上的 MP3、视频碎片汇总到“未合并文件”目录
-g手动指定 MP4Box 路径,值给select时弹出选择框

举个实际例子:

./m4s-converter -c "/Volumes/Media/bilibili_cache" -o

两个容易踩的点:-c要指到“缓存目录”这一层(能看到各个单视频子文件夹的那个),别指进单 P 子目录;首次运行时程序会自动释放内置的 MP4Box(Linux 下在internal/linux/MP4Box),正常环境不用装任何东西,异常时再用-g select手动挂载引擎即可。

场景三:手机缓存转到电脑

安卓端的缓存和 PC 端长得不一样:没有.playurl,取而代之的是entry.json+danmaku.xml。工具会自动回退到解析entry.json来识别video.m4s/audio.m4s(见 common/util.go 里的安卓兼容分支),缓存状态不是“已完成”的会按规则跳过。

所以流程就是:把手机缓存目录拷到电脑,-c指过去,后面和前面两个场景完全一致。手机端那份danmaku.xml同样会被用来做弹幕转字幕。

零转码有多快:一组实测数据

重编码要逐帧重新计算,而合成只动容器。固态硬盘上的实测参考:

缓存规模m4s-converter 实测传统转码估算
1.46 GB约 5 秒约 2 分钟
4 GB约 14 秒约 5 分钟
11.7 GB约 38 秒约 18 分钟

转码一列为同规模估算,仅供参考。合成后文件体积与两个 m4s 之和基本持平(1MB 误差内),若略小也只是容器开销与冗余索引的差异,画面和声音与原缓存完全一致,不是被压缩了。

m4s 弹幕 转 字幕:可开关的加餐 ✨

默认情况下,程序会把缓存里的弹幕 xml 转成同名 ASS 字幕文件,任何播放器里都能开关弹幕。想要纯视频,加-a即可关闭。

弹幕的字体(默认黑体)、字号、透明度、滚动速度、关键字屏蔽、是否允许重叠等十几项样式,都定义在 conver/setting.go 的默认配置里,效果不理想就按口味调。还有个贴心细节:合成超大合集时可以按Ctrl+C,程序不会强杀,而是处理完当前文件再干净退出,不会留下半个残缺的 MP4。

几个高频问题

Q: 我缓存过的视频为什么被程序跳过了?A: 先看那个视频的缓存状态是不是“已完成”。缓存中断时,元数据里的状态不会置为完成,程序按规则跳过,重新缓存后再合成即可。

Q: 同一批缓存重复跑会怎么样?A: 不会重复合成。每次合成都会写入 title/artist/album 标签,并留下输入文件的哈希记录(.hash 文件),加上同名文件检查,三者任一命中就提示“跳过已合并文件”。可以放心挂进定时任务定期备份。

Q: 弹幕乱码是编码问题吗?A: ASS 字幕依赖系统中文字体渲染,系统里没装中文字体就先装思源黑体这类;仍不理想再去弹幕样式设置里改字体名与字号。

Q: 合成后的 MP4 在哪里、能不能直接播?A: 在缓存目录下的output文件夹里,按“合集名-UP主”分子目录,完成后自动打开。产出是标准 MP4,任何播放器都能放,换电脑、传手机、投电视都畅通。

最后提醒一句:只合成你本人通过官方客户端合法缓存的内容,结果限于个人备份,不传播、不商用。工具还在持续更新,有新需求可以关注仓库的最新版本。

【免费下载链接】m4s-converter一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询