三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

m4s转mp4不再求人:bilibili缓存视频合并的完整通关指南

m4s转mp4不再求人:bilibili缓存视频合并的完整通关指南

m4s转mp4不再求人:bilibili缓存视频合并的完整通关指南

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

你是否有过这样的瞬间:明明提前在B站缓存了整套课程,想着路上慢慢看,结果打开手机相册或电脑文件管理器,只看到一堆叫video.m4saudio.m4s的"神秘文件",任何播放器都打不开?更糟的是,你收藏的视频突然被下架,连重新缓存的资格都没有了——那一刻,你手里的不是学习资料,而是一堆"被封印"的数据。

别急着删。今天要讲的 m4s-converter,就是专门做一件事的:把 bilibili 缓存的 m4s 音视频文件无损合并成标准 mp4,而且是全平台免费开源(MIT 协议)。下面我们从头走一遍这条路。

问题出在哪:不是视频坏了,是B站把它"分装"了

很多人误以为 m4s 是加密格式,其实不是。B站的缓存策略很朴素:一条视频被拆成视频轨和音频轨两个文件,分别用 m4s 封装,再配一个entry.json记录标题、分P信息,可能还有一份弹幕 xml。播放器能打开完整的 mp4,却认不出这种"音画分居"的组合——就像你把一道菜做成了"菜"和"汤"两个半成品,端上桌之前,得先有人把它们合到一只碗里。

所以核心动作不是转码,而是合并。搞明白这一点,后面的选择就顺理成章了。

破局:它把 m4s 转 mp4 当成"搬家",而不是"重装修"

传统转换工具拿到这两个文件,会先解码再重新编码——画质打折、CPU 飙高、动辄几分钟起步。m4s-converter 的思路完全不同:它调用 GPAC 的 MP4Box(Windows/Linux 版本已内置在internal/目录下,首次运行自动释放,macOS 等环境只需装一次 GPAC),把音视频轨道直接封装进 mp4 容器,全程不碰像素和声波。

打个比方:前者是把电影重新拍一遍,后者只是把两卷胶片装进同一个片盒。结果就是画质音质 100% 保留,你的 4K 缓存合并后依旧是 4K。

跟着做一遍:三分钟完成第一次合并

第一步,获取工具。习惯命令行的朋友可以直接拉取源码:

git clone https://gitcode.com/gh_mirrors/m4/m4s-converter cd m4s-converter

不想折腾编译也行,直接下载对应平台的成品可执行文件,双击或赋予执行权限即可。

第二步,确认缓存位置。B站默认缓存一般落在用户目录的Videos/bilibili下,每个视频一个文件夹,里面躺着video.m4saudio.m4sentry.json三件套。

第三步,什么都不用配,直接运行:

./m4s-converter

程序会自动扫描整个缓存目录,识别音画文件、读取entry.json里的标题元数据,合成后统一放进缓存目录下的output文件夹,还按"合集名-UP主"帮你分好了子目录。合并完成它会自动打开输出文件夹,你直接就能看到成品。

进阶:把工具调教成你想要的样子

  • 换缓存路径:视频存得比较"个性"?用-c指定:./m4s-converter -c "/你的/缓存路径"。不填参数时它还会弹窗让你手动选目录。
  • 弹幕随行:工具默认会把弹幕 xml 转成 ass 字幕(conver/xml2ass.go干的活),本地播放器也能看到弹幕飘过。不想要就用-a关掉。
  • 覆盖与汇总:同名文件默认不覆盖、自动改名(-o改为覆盖);遇到没合并成 mp4 的散装音频/视频,-u会把它们集中收进"未合并文件"目录,不留死角。
  • 批量放心跑:整个缓存目录一次递归处理,重复文件会被哈希比对自动跳过,中途按 Ctrl+C 也会优雅收尾,不会留下半个文件。

数据说话:无损封装到底有多快

对比维度m4s-converter(纯封装)传统转码工具
1.46GB 视频耗时约 5 秒通常按分钟计
11.7GB 视频耗时约 38 秒(SSD 实测)十分钟起步
画质音质无损保留存在压缩损失
CPU 占用极低转码时满载
弹幕支持自动转 ass多数不支持

同一条缓存,别人还在看转码进度条,你已经把 mp4 拷进平板了。

最容易踩的 4 个坑与解法

  1. 缓存没下完就开始合并entry.json里状态不是"completed"时,程序会直接跳过该视频。先回 B 站把缓存下完整,再来一遍即可。
  2. 报错"找不到 MP4Box":Windows/Linux 内置版一般没问题;macOS 等环境需要手动装一次 GPAC,或用-g select弹出对话框手动指定 mp4box 路径。
  3. 合出来的文件播放器还是不认:多半是源文件损坏。删掉重新缓存,别在合并前手动改过 m4s。
  4. 误以为它能下载视频:它只负责合并你已缓存的文件,不提供下载功能——别把它当抓取工具用。

温馨提示:工具启动时会展示使用条款,仅允许合并你本人通过官方客户端合法缓存的视频,结果严格用于个人备份,请勿传播或商用。

现在就动手

把缓存里那些"半成品"变回能随时播放的 mp4,成本不过三分钟。现在就去你的Videos/bilibili文件夹看一眼,有多少视频正躺在 m4s 里等你解救?

步骤回顾:获取工具 → 确认缓存目录 → 运行程序 → 在output里收成品。遇到问题可以带着视频地址去项目仓库提交 issue,或者直接参与贡献——合并逻辑在common/synthesis.go,弹幕转换在conver/,平台适配在internal/,都是小而美的阅读体量,改起来也不难。

让技术简化生活,让缓存真正属于你。

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

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

← 返回列表