MKV 重封装 — v1.12.0 起为什么默认把视频合并成 MKV 容器
v1.12.0 的一个隐性变化
v1.12.0 的 CHANGELOG 里有一行不显眼的条目:
Videos are remuxed to mkv even when download subtitle is disabled
翻译过来就是:即使你没选字幕,Seal 在 v1.12.0 起也会把下载合并后的视频重封装成 MKV 容器。
之前的版本(v1.11.x 及更早)默认合并成 MP4。这个改动对普通用户几乎无感知,但背后有技术权衡。
为什么从 MP4 改成 MKV
原因一:字幕轨兼容性
MP4 容器对字幕轨(尤其是 ASS/SSA 格式)的支持有限制,部分字幕轨在 MP4 里会被丢弃或兼容性变差。MKV(Matroska)是开源容器,支持几乎所有字幕格式,多字幕轨嵌入也更灵活。
v1.12.0 起 Seal 开始把视频元数据也写入文件(之前只写音频),MKV 能同时承载视频、音频、字幕、封面、章节、元数据等所有内容在一个文件里。
原因二:多流合并更干净
当下载的视频流和音频流来自不同容器(比如视频是 WebM VP9、音频是 M4A AAC),合并时需要做一次容器转封装(remux)。转封装本身是无损操作,只是换外壳——之前的做法是强制转成 MP4,现在改成强制转成 MKV 以提升兼容。
这对用户有什么影响
| 影响 | 说明 |
|---|---|
| 文件扩展名变了 | 之前下载的是 .mp4,现在是 .mkv |
| 绝大多数播放器正常播放 | VLC、MX Player、KMPlayer、POTPlayer 等主流播放器完美支持 MKV |
| 少数老旧播放器可能无法识别 | 一些老系统自带的播放器或老版本 MP4 播放器打不开 MKV |
| 分享到某些平台可能被拒绝 | 微信、QQ 等 IM 平台对 MKV 的支持不如 MP4,分享前需要检查 |
| 体积不变 | remux 是无损操作,转容器不压缩、不增加/减少体积 |
如果你必须要 MP4
有两个办法:
- 用自定义命令模板:在模板里写 ffmpeg 参数
-c copy -f mp4强制输出 MP4(但要注意字幕兼容性可能丢失) - 手动转码:下载完后用 ffmpeg 或 HandBrake 把 MKV 转成 MP4(这个操作会重编码,可能损失画质)
v1.12.1 还修了一个相关 bug:之前即使禁用字幕,视频还是会被 remux 成 MKV——这是 v1.12.0 引入的预期行为(不是 bug),CHANGELOG 里也明确记录了。
如果你遇到某些设备打不开 MKV,推荐换播放器(比如 MX Player Pro 或 VLC),比硬转 MP4 更省事。