MKVToolNix 又叫Matroska toolkit,是一套功能强大的mkv(Matroska)格式制作和处理的工具,支持将多种视频、音频、字幕等格式封装成mkv格式,Mkvtoolnix是目前功能最齐全的Matroska合成器,除了WMV和MPEG-1/2之外,它几乎能将所有的媒体合成到MKV中。
官网:https://mkvtoolnix.download/

Windows系统下的MKVToolNix有gMKVExtractGUI软件辅助操作。
macOS系统只能用MKVToolNix自带的mkvextract提取,目前版本MKVToolNix 83.0

关于软件
安装MKVToolNix,官网下载:https://mkvtoolnix.download/downloads.html#macosx
官方软件包说明(跳过):
If you need the command line tools then copy mkvextract, mkvinfo,
mkvmerge and mkvproedit from ./MKVToolNix-83.0/Contents/MacOS/
to /usr/local/bin
强烈建议使用brew安装MKVToolNix,没有安装过brew,可以先安装。
brew官网:https://brew.sh/zh-cn/ 或直接使用一键安装命令:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 随后使用brew安装MKVToolNix
brew install --cask mkvtoolnix

brew 安装MKVToolNix
后续如果不需要了,使用命令卸载干净:
brew uninstall --cask mkvtoolnix

软件界面
设置中文:Settings-GUI-Interface language 简体中文-保存
拖动内封字幕的视频文件到MKVToolNix

视频详情
编码格式为SubStationAlpha就是字幕文件,演示视频文件的轨道ID2、3均为字幕文件
打开命令行,输入mkvextract tracks空格后直接拖入视频文件,再次空格2:test.ass。

执行命令
举例:
mkvextract tracks test.mkv 2:test.ass test.mkv为当前目录的源文件,轨道ID2是字幕文件,test为文件名,ass为文件格式。大多数是ass格式的,也有srt或其他格式字幕文件。
需要哪个字幕就提取哪个轨道的ID,最后得到字幕文件,也可导出其他格式的字幕文件
具体使用方法去官方查看mkvextract文档:https://mkvtoolnix.download/doc/mkvextract.html
https://mkvtoolnix.download/docs.html

碎碎念:
全程其实可以用终端操作,完全用不到GUI界面。
例如mkvinfo命令查看视频文件信息:
mkvinfo /Users/demo/Downloads/\[KitaujiSub\]\ Sousou\ no\ Frieren\ \[26\]\[WebRip\]\[HEVC_AAC\]\[CHS_JP\&CHT_JP\].mkv 命令会输出视频文件所有的信息,截取Tracks部分:
|+ Tracks
| + Track
| + Track number: 1 (track ID for mkvmerge & mkvextract: 0)
| + Track UID: 16892936732768919427
| + Track type: video
| + "Lacing" flag: 0
| + Language: und
| + Codec ID: V_MPEGH/ISO/HEVC
| + Codec's private data: size 111 (HEVC profile: Main 10 @L4.0)
| + Default duration: 00:00:00.041708333 (23.976 frames/fields per second for a video track)
| + Language (IETF BCP 47): und
| + Video track
| + Pixel width: 1920
| + Pixel height: 1080
| + Display width: 1920
| + Display height: 1080
| + Track
| + Track number: 2 (track ID for mkvmerge & mkvextract: 1)
| + Track UID: 13185001163942980587
| + Track type: audio
| + Language: und
| + Codec ID: A_AAC
| + Codec's private data: size 2
| + Default duration: 00:00:00.023219954 (43.066 frames/fields per second for a video track)
| + Language (IETF BCP 47): und
| + Audio track
| + Sampling frequency: 44100
| + Channels: 2
| + Track
| + Track number: 3 (track ID for mkvmerge & mkvextract: 2)
| + Track UID: 5624522073609941664
| + Track type: subtitles
| + "Lacing" flag: 0
| + Language: chi
| + Codec ID: S_TEXT/ASS
| + Codec's private data: size 2936
| + Language (IETF BCP 47): zh
| + Name: chs
| + Track
| + Track number: 4 (track ID for mkvmerge & mkvextract: 3)
| + Track UID: 6046930703201052506
| + Track type: subtitles
| + "Default track" flag: 0
| + "Lacing" flag: 0
| + Language: chi
| + Codec ID: S_TEXT/ASS
| + Codec's private data: size 2943
| + Language (IETF BCP 47): zh
| + Name: cht 可以通过“Track type: subtitles”确认为字幕文件,又或者命令过滤一下只显示包含字幕轨道信息,之后用mkvextract命令提取就行了。
如果打算批量提取可以用GPT写个脚本,mkvinfo读取视频文件信息,传参数到mkvextract进行提取。