一个用于合并 B 站缓存视频的小工具:将浏览器或客户端缓存下来的视频 m4s 与音频 m4s 合并为一个完整的 MP4 文件。
- 自动去除 B 站 m4s 文件头部的 9 字节(该头部会导致合并后的视频无法播放)
- 自动补全
.m4s扩展名(忘记输入时自动添加) - 调用 ffmpeg 以流复制(
-codec copy)方式合并,不重新编码,速度快、画质无损 - 自动生成并执行合并用的批处理文件
- Python 3(仅使用标准库,无需安装第三方依赖)
- FFmpeg 已安装并加入系统
PATH(ffmpeg -version可正常执行)
-
从浏览器(如 Edge / Chrome 访问 B 站视频后)或 B 站客户端缓存目录中,找到视频与音频两个
.m4s文件(通常分别名为video.m4s、audio.m4s,或类似30280.m4s的数字文件名)。 -
运行脚本:
python main.py
-
依次输入视频 m4s 文件与音频 m4s 文件的完整路径(路径用引号包裹亦可,脚本会自动去除):
Pls input video path: Pls input audio path: -
脚本会自动完成:
- 检查文件是否存在、大小是否合法
- 从两个文件开头各删除 9 字节(会直接覆盖原文件)
- 在当前目录生成
main.bat并执行 ffmpeg 合并命令
-
合并完成后,在视频文件所在目录得到同名的
.mp4文件,即可正常播放。
B 站网页/客户端缓存的视频和音频是分开的 .m4s 文件,且每个文件开头带有一段 9 字节的文件头,直接合并会导致输出文件无法播放。本脚本的处理流程:
删除视频 m4s 的前 9 字节 ─┐
├─► ffmpeg -i 视频.m4s -i 音频.m4s -codec copy 输出.mp4
删除音频 m4s 的前 9 字节 ─┘
- 输出文件名 = 视频路径去掉文件名部分(最后 12 个字符)+
.mp4 - 合并使用
-codec copy流复制,无转码损耗
- 输出路径由视频路径推导(截取最后 12 个字符作为文件名),因此视频 m4s 文件名需符合该长度约定,否则输出文件位置/名称会不符合预期。
- 需要 ffmpeg 已安装并配置在
PATH中,否则生成的main.bat会执行失败。 - 本工具只负责合并缓存好的 m4s 文件,不负责从 B 站下载视频。
Bilibili_Video_Download/
├── main.py # 主脚本:删除 9 字节文件头 + 调用 ffmpeg 合并
└── README.md
| 问题 | 解决方式 |
|---|---|
| 提示"错误:文件不存在" | 检查输入的路径是否正确(支持拖拽文件到终端自动填充路径) |
| 提示"错误:文件太小" | 文件不足 9 字节,说明不是有效的 m4s 缓存文件 |
提示 'ffmpeg' 不是内部或外部命令 |
安装 FFmpeg 并配置环境变量 PATH,然后重新打开终端 |
| 合并后视频无法播放 | 确认两个 m4s 均已成功删除 9 字节(脚本有成功/失败提示),且文件未被修改过 |