MKVToolNix 99.0:MKV 封装利器的新一轮打磨

2026-05-25 30 预计阅读时间:1 分钟
来源:oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:8 分钟

做视频处理的人多半和 MKV 格式打过交道——一个容器塞进多条音轨、多语言字幕、章节标记,灵活度远超 MP4。而操作这个容器最直接的工具,就是 MKVToolNix。99.0 版本近日发布,GUI 层面做了几处体验优化,CLI 核心能力依旧扎实。下面聊聊它能干什么、新版本改了什么,以及日常怎么用命令行快速封装和拆包。

MKVToolNix 的核心能力

MKVToolNix 不是编解码器,它不转码。它的职责是封装与拆解——把现成的视频流、音频流、字幕文件打包进 Matroska 容器,或者从 MKV 里提取特定轨道。典型场景:

  • 把 H.264 视频 + FLAC 音轨 + ASS 字幕合成一个 MKV
  • 给已有 MKV 追加一条中文字幕轨,不重新编码
  • 从 MKV 中单独抽出某条音轨或字幕,供后续编辑
  • 添加章节信息、标签、附件(比如字体文件)

整套工具包含 mkvmerge(封装)、mkvinfo(查看信息)、mkvextract(提取)、mkvpropedit(属性修改)等命令行程序,以及一个 GUI 前端。日常批量操作用 CLI 更高效,GUI 适合偶尔手工调整。

99.0 版本更新要点

这次更新的改动集中在 GUI 的交互细节上,核心合并逻辑没有大变动:

  • "播放音频文件"程序运行器独立记忆目录:GUI 中有个"play audio file"功能,用于快速预览音轨。之前它和其他程序运行器共用最近目录记录,现在单独维护了最后使用的目录。这意味着你选完一条音轨的路径后,下次打开预览不会跳回视频目录,减少反复导航的麻烦。
  • 其他增强和 bugfix 涉及 GUI 的布局稳定性、轨道列表显示等,属于常规打磨。

对 CLI 用户来说,99.0 的行为与之前版本一致,升级不会打断现有脚本。

实战:用命令行封装和拆解 MKV

下面给出几个可以直接跑的示例,基于 Linux/macOS 环境(Windows 用户把命令换成 mkvmerge.exe 等,路径用反斜杠或引号包裹即可)。

1. 多轨封装——视频 + 双音轨 + 双字幕

假设你有一个视频文件、两条音轨(原声和配音)、两条 ASS 字幕:

mkvmerge \
  -o "output.mkv" \
  --language 0:en --track-name "原声" "video_with_en_audio.mp4" \
  --language 0:zh --track-name "配音" "dub_audio.m4a" \
  --language 0:zh --track-name "中文字幕" --sub-charset 0:UTF-8 "sub_zh.ass" \
  --language 0:en --track-name "英文字幕" --sub-charset 0:UTF-8 "sub_en.ass"

要点说明: - --language 0:en0 指输入文件的第 0 条轨道(大多数视频文件只有一条视频轨,编号 0;音频文件的第 0 条就是音频轨本身) - --sub-charset 对 ASS/SRT 字幕很重要,缺了会乱码 - 输出文件名用 -o 指定

2. 给已有 MKV 追加字幕,不重编码

mkvmerge -o "movie_with_new_sub.mkv" "movie.mkv" --language 0:zh "new_sub.srt"

mkvmerge 会把原 MKV 的所有轨道原样搬进新文件,再追加 SRT。原文件不受影响,新文件体积只多了一截字幕文本。

3. 查看 MKV 内部结构

mkvinfo "output.mkv"

输出会列出每条轨道的 codec ID、语言、时长、默认/强制标记等。加 --verbose 可以看到段级别细节。

4. 从 MKV 中提取特定轨道

先确认轨道编号:

mkvmerge --identify "output.mkv"

输出类似:

Track ID 1: video (V_MPEG4/ISO/AVC)
Track ID 2: audio (A_FLAC) [en]
Track ID 3: audio (A_FLAC) [zh]
Track ID 4: subtitles (S_TEXT/ASS) [zh]
Track ID 5: subtitles (S_TEXT/ASS) [en]

然后提取第 4 条字幕轨:

mkvextract tracks "output.mkv" 4:"extracted_sub.ass"

也可以同时提取多条:

mkvextract tracks "output.mkv" 2:"en_audio.flac" 3:"zh_audio.flac" 4:"zh_sub.ass"

5. 批量封装脚本

如果你有一堆视频需要挂上同一组字幕,写个简单循环:

#!/bin/bash
SUB_DIR="./subs"
OUT_DIR="./merged"
mkdir -p "$OUT_DIR"

for video in ./raw/*.mp4; do
  basename=$(basename "$video" .mp4)
  mkvmerge -o "${OUT_DIR}/${basename}.mkv" \
    "$video" \
    --language 0:zh "${SUB_DIR}/${basename}.ass"
done

echo "批量封装完成,输出目录: $OUT_DIR"

运行前确保 ./raw/ 下有视频文件,./subs/ 下有对应命名的 ASS 字幕。改路径即可适配自己的目录结构。

日常使用建议

  • 封装优先用 CLI:GUI 适合探索和单次操作,但批量任务、CI 流程、自动化脚本都该走 mkvmerge,参数可控、可复现。
  • 轨道语言和字符集别省--language--sub-charset 看起来啰嗦,但播放器依赖这些标记来决定默认音轨和字幕渲染。省了之后,用户端就要手动选,体验打折。
  • 提取前先 identify:轨道编号不是固定的,多音轨 MKV 的编号顺序取决于封装时的输入顺序。--identify 一秒钟的事,避免提错轨。
  • 升级不必担心兼容性:MKVToolNix 的 CLI 参数风格从 30 多个版本前就基本稳定,99.0 没有破坏性改动。现有脚本可以直接升级继续跑。
  • GUI 的目录记忆功能值得留意:如果你经常在 GUI 里预览音轨,99.0 的独立目录记忆会省掉不少路径切换。其他程序运行器(比如自定义外部播放器)后续也可能获得类似的独立记忆,关注后续 release note。

MKVToolNix 做的事看似简单——拼装和拆包——但 Matroska 容器的灵活度本身就值得善用。多音轨、多字幕、章节、附件这些能力,用好了是发行级体验,用不好就是播放器里的混乱列表。工具已经够锋利,关键在于封装时把语言、命名、默认标记这些元数据填对。


相关推荐