macOS提取MKV内封字幕
献祭路保持者
编辑于 2024年03月14日 04:33

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

官方软件包说明(跳过):

代码块
JavaScript
自动换行
复制代码
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/ 或直接使用一键安装命令:

代码块
Shell
自动换行
复制代码
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
复制成功

随后使用brew安装MKVToolNix

代码块
Shell
自动换行
复制代码
brew install --cask mkvtoolnix
复制成功

brew 安装MKVToolNix

后续如果不需要了,使用命令卸载干净:

代码块
Shell
自动换行
复制代码
brew uninstall --cask mkvtoolnix
复制成功

软件界面

设置中文:Settings-GUI-Interface language 简体中文-保存

拖动内封字幕的视频文件到MKVToolNix

视频详情

编码格式为SubStationAlpha就是字幕文件,演示视频文件的轨道ID2、3均为字幕文件

打开命令行,输入mkvextract tracks空格后直接拖入视频文件,再次空格2:test.ass。

执行命令

举例:

代码块
Shell
自动换行
复制代码
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命令查看视频文件信息:

代码块
Shell
自动换行
复制代码
mkvinfo /Users/demo/Downloads/\[KitaujiSub\]\ Sousou\ no\ Frieren\ \[26\]\[WebRip\]\[HEVC_AAC\]\[CHS_JP\&CHT_JP\].mkv
复制成功

命令会输出视频文件所有的信息,截取Tracks部分:

代码块
Shell
自动换行
复制代码
|+ 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进行提取。