5秒无损搞定m4s转mp4:m4s-converter,把B站缓存视频变成你的永久收藏

5秒无损搞定m4s转mp4:m4s-converter,把B站缓存视频变成你的永久收藏

5秒无损搞定m4s转mp4:m4s-converter,把B站缓存视频变成你的永久收藏

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

出差的高铁上,我打开缓存好的教程准备补课,播放器冷冷甩出一句"无法识别的文件格式"。旁边乘客的目光扫过我屏幕上那堆 video.m4s、audio.m4s 文件,像是在看一个把电脑弄乱的倒霉蛋。从那天起我记住了 m4s-converter——一个把 B站缓存的 m4s 音视频文件无损合并成 mp4 的开源小工具。

没有它的日子:我试过的三种笨办法

在遇到 m4s-converter 之前,我处理过三次缓存视频,三次都翻车。

第一招是改名大法。把 video.m4s 后缀改成 .mp4,双击,播放器直接罢工。第二招是装"万能播放器",PotPlayer 出了画面没声音,VLC 反过来有声音没画面,折腾到半夜放弃。第三招最惨,从论坛复制了一条十几行的 ffmpeg 命令,粘进终端,跑完一看——音画不同步,弹幕更是不知从何下手。

三连败之后我才老老实实去查资料,弄明白了麻烦到底藏在哪里。

三个藏在背后的原因:为什么"改个后缀就想白嫖"行不通

第一个原因,一个视频被拆成了两份。B站的缓存走的是 DASH 分片协议,画面存在 video.m4s 里,声音存在 audio.m4s 里,它们是两条互相独立的流。播放器要的是合体版,你给它的却是分居版。

第二个原因,文件头有一截脏数据。m4s 文件开头固定带着 9 个字节的 "000000000" 占位符,不把它剥掉,任何解析器都读不出有效数据。这就是改名大法必死的原因。

第三个原因,合体不是简单拼接。两条流的时间戳要对齐,要重新封装进正确的容器,参数差一个,结果就是"嘴型和台词各说各的"。

知道了这三个原因,你就明白为什么这事得交给专门的工具做。而 m4s-converter 的设计思路,恰好是逐个击破。

🚀 第一次运行:从"不能播"到"全部能播"只差一条命令

拿到工具只要三步:

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

人话解释一下:前两条是把工具拉到本地,第三条是直接运行。它会默认扫描 B站客户端的默认缓存目录(用户目录下的 Videos/bilibili),找到的 m4s 全部自动处理。

启动后先弹出一段使用条款,按回车表示同意——只转换本人合法缓存的视频、结果严格用于个人备份。这个提醒我倒是觉得挺安心,说明作者把边界写明白了。

然后就是全程自动。我当时的终端输出长这样:

2023-12-05_16:02:46 [INFO ] 已合成视频文件:中国-美景极致享受-笨蹦崩.mp4 2023-12-05_16:02:46 [INFO ] 合成的文件: C:\Users\mzky\Videos\bilibili\output\【获奖学生动画】The Little Poet 小诗人|CALARTS 2023\....mp4 C:\Users\mzky\Videos\bilibili\output\【4K8K-世界各地的美景】\中国-美景极致享受-笨蹦崩.mp4 2023-12-05_16:02:46 [INFO ] 已完成本次任务,耗时:5秒

1.46GB 的视频,5 秒搞定。合成好的文件自动按"UP主-合集名"分类归档进 output 目录,原始缓存文件原样保留。更妙的是,它会识别"已经合成过的文件"直接跳过,重复跑多少次都不会产出重复内容。

原理白话版:它像是一个重装快递的打包台

理解它为什么这么快,用一个快递的比喻就够了。

m4s 的两个文件相当于被拆开的包裹:画面装一个箱子,声音装另一个箱子,而播放器只认一个完整的包裹。m4s-converter 调用了 GPAC 的 MP4Box 当打包台,把两个箱子原样装进一个标准 MP4 盒子里。注意是"原样"——整个过程不做任何转码,画质音质 100% 保留;开头那 9 个字节的垃圾头,就当是贴在箱子上的无效条码,装箱前顺手撕掉。

没有重新编码,意味着 CPU 几乎闲着,所以大文件也只要几秒。工具作者在固态硬盘上的实测数据是:1.46GB 用 5 秒,11.7GB 用 38 秒。对比一下传统转码方案——先把 m4s 解码再重新编码,半小时起步、CPU 占用拉满、画质还有损失。快是结构决定的,不是营销话术。

⚡ 四个常用参数,覆盖八成使用场景

如果你只有默认缓存这一种情况,一条裸命令就够用了。但缓存位置、个人习惯各不相同,下面四个参数值得记一下。

./m4s-converter -c "/自定义/缓存/路径"

人话:缓存不在默认位置,或者从手机里拷出来的缓存目录,用 -c 指给它。

./m4s-converter -a

人话:默认会顺手把 XML 弹幕转成 ASS 字幕,纯粹只要视频、想合流更快,就关掉它。

./m4s-converter -o

人话:默认遇到同名文件会跳过并给新文件改名,加 -o 就是直接覆盖旧版本。

./m4s-converter -u

人话:把合成不了的散装 mp3、视频文件归拢到一个"未合并文件"目录里,方便你之后手动处理。

两个容易被忽略的亮点

第一个是弹幕。工具会把缓存的 XML 弹幕自动转成 ASS 字幕文件,跟 mp4 放在一起。PotPlayer、VLC 这类播放器直接就能加载,本地看视频照样有弹幕氛围,仿佛那场直播的热闹还在。

第二个是去重做得细。合成时它会把视频的元数据写进 mp4,还会额外生成一个 .hash 哈希文件。下次再跑,靠哈希和元数据就能认出"这个视频已经合过了",不会把 output 目录越堆越乱。

收尾:把 5 秒的主动权握在自己手里

"收藏"这个词的真正含义,是内容躺在你自己的硬盘上还能打开。B站的缓存文件只是数字时代的临时借阅证,m4s-converter 才让它变成真正属于你的书。下次刷到值得留下的视频,先缓存,再花 5 秒跑一遍——等它真的下架那天,你会庆幸硬盘里存着一份随时能播的 mp4。打开命令行吧,这 5 秒的投资,回报是以后再也不心疼。

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

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