名称
mkvextract - 将 Matroska
文件中的轨道提取为单独的文件
概要
mkvextract {输入文件名}
{模式1} [选项] [提取规格1]
[模式2] [选项] [提取规格2]
[...]
说明
该程序可将 Matroska
文件的指定部分提取为其他有用的格式。第一个参数是输入文件名,该文件必须为
Matroska 文件。
其余参数可切换到特定提取模式、更改当前活动模式的选项、指定要将什么内容提取到哪些文件。单次调用
mkvextract
可同时使用多种模式,以便只读取一遍就提取多项内容。
大多数选项只能在特定模式下使用,少数选项可用于所有模式。
目前支持提取 tracks
轨道、tags 标签、attachments
附件、chapters 章节、cue
表单、timestamps 时间戳 以及
cues。
通用选项
以下选项在所有模式下可用,只在本段落讲一遍,不赘述。
-f, --parse-fully
设置解析模式为
'full(完整)'。默认的解析模式不解析整个文件,而是使用元定位元素确定输入文件中所需元素的位置。99%
的情况下这已经足够。但如果碰到不含元定位元素或者元定位元素损坏的文件,用户可能得考虑使用此模式。完整扫描文件可能要花费几分钟,而快速扫描只需要几秒钟。
--command-line-charset 字符集
设定在命令行给出的字符串的字符集,用于转为其他字符集。默认为系统当前区域设置中所给定的字符集。
--output-charset 字符集
设置输出的字符串应被转换到何种字符集。默认为系统当前区域设置中所给定的字符集。
-r, --redirect-output
文件名
将所有信息输出至文件
文件名
而不是在命令行显示。尽管该操作可以用输出重定向轻松实现,但在某些情况下还需要靠它:如当终端在写入文件之前重新解释(覆盖输出)时。将优先使用通过
--output-charset
设定的字符集。
--flush-on-close
让程序在关闭以写入模式打开的文件时,强制将内存中已缓存的所有数据写入到存储设备。可用于在电源中断时避免数据损失,或规避操作系统或驱动程序的特定问题。缺点是混流耗时更长,因为
mkvmerge
在退出前需要等待所有数据写入存储设备。关于优劣的深入讨论,请参见
MKVToolNix bug
跟踪平台中的问题 #2469
与问题 #2480。
--ui-language 语言代码
强制使用
语言代码
所对应的翻译 (例如 'de_DE'
表示德文翻译)。在
语言代码 处输入 'list'
可让程序输出可用翻译的列表。
--abort-on-warnings
让程序在出现警告时即中止。程序的退出代码将返回
1。
--debug 主题
为特定功能开启调试。该选项仅对开发者有用。
--engage 功能
开启实验性功能。可用功能列表可通过
mkvextract --engage list
得到。这些功能在正常情况下不应该使用。
--gui-mode
打开 GUI
模式。该模式下,将输出特殊格式的行,告知目前受控的
GUI
的行为。这些消息遵从格式「#GUI#消息」。消息可能包括键值对,如「#GUI#消息#键1=值1#键2=值2...」。消息内容及键的内容不作翻译,总是以英语输出。
-v, --verbose
使输出信息更详尽,且每当读取到重要的
Matroska
元素时就将其显示。
-h, --help
显示用法信息并退出。
-V, --version
显示版本信息并退出。
@选项文件.json
从文件
选项文件
读取其他命令行参数。关于支持的选项文件格式的详细说明,请参见
mkvmerge(1)
手册的“选项文件”段落。
轨道提取模式
语法: mkvextract
输入文件名
tracks [选项]
TID1:目标文件名1
[TID2:目标文件名2 ...]
以下命令行在「tracks」轨道提取模式下对各轨道可用。它们应当在所应用到的轨道指令(参阅下文)之前出现。
-c 字符集
设定下一个字幕轨应被转换为哪一字符集。仅当后面的轨道
ID
对应文本字幕轨时有效。默认为
UTF-8。
--blockadd 层级
只保留不高于此层级的
BlockAdditions
(附加区块)。默认保留所有层级。
此选项仅影响特定类型的编解码器,如
WAVPACK4。
--cuesheet
让
mkvextract(1)
根据下一轨道的标签数据与章节信息提取出
CUE
表单,输出文件名为轨道的输出名后接
'.cue' 扩展名。
--raw
将原始数据提取为文件,输出文件的周围没有任何容器数据。
与
--fullraw
标记不同的是,此标记不会将
CodecPrivate
元素的内容写入输出文件。
此模式对所有 CodecIDs
有效,即使是
mkvextract(1)
不支持处理的,然而生成的文件可能无法使用。
--fullraw
提取原始数据,输出文件的周围没有任何容器数据。
如果轨道包含 CodecPrivate
编解码器私有元素,它的内容将先被写入文件。
此模式对所有 CodecIDs
有效,即使是
mkvextract(1)
不支持的那些,但是生成的文件可能无法使用。
TID:输出文件名
如果输入文件中存在
ID 为
TID
的轨道,则将其提取为文件
输出文件名。本选项可多次给出。轨道
ID 与
mkvmerge(1) 的
--identify
选项所输出的相同。
每个输出文件名只能用一次。但
RealAudio 与 RealVideo
轨道例外。如果您为不同轨道使用了同样的输出文件名,这些轨道将被存入同一个文件中。示例:
$ mkvextract 输入.mkv tracks 0:视频.h264 2:输出两个vobsub轨道.idx 3:输出两个vobsub轨道.idx
附件提取模式
语法: mkvextract
输入文件名
attachments [选项]
AID1:输出文件名1
[AID2:输出文件名2 ...]
AID:输出文件名
如果输入文件中存在
ID 为
AID
的附件,则将其提取为文件
输出文件名。如果
输出文件名
处留空,将使用所用
Matroska
文件中的附件名称。本选项可多次给出。附件
ID 与
mkvmerge(1) 的
--identify
选项所输出的相同。
章节提取模式
语法: mkvextract
输入文件名
chapters[选项]
输出文件名.xml
-s, --simple
将章节信息以 OGM
tools 所用的简单格式 (CHAPTER01=...,
CHAPTER01NAME=...)
导出。此模式下部分信息将被废弃。默认以
XML 格式输出章节。
--simple-language 语言
若启用简化格式,
mkvextract(1)
对于发现的每个章节单位,均只输出单个条目,即使该章节单位包含多个章节名称。
mkvextract(1)
默认对每个章节单位使用发现的第一个章节名称,而不考察其语言。
本选项允许用户决定,在章节单位包含多个章节名称时,应该输出哪些章节名称。语言
参数必须为 ISO 639-1 或 ISO 639-2
代码。
章节将写入指定的输出文件。默认使用
mkvmerge(1) 能理解的 XML
格式。如果文件中没有发现章节条目,则不会创建输出文件。
标签提取模式
语法: mkvextract
输入文件名
tags [选项]
输出文件名.xml
标签将写入指定的输出文件,使用
mkvmerge(1) 能理解的 XML
格式。如果文件中没有发现标签条目,则不会创建输出文件。
语法: mkvextract
输入文件名
cuesheet [选项]
输出文件名.cue
cue
表单将写入指定的输出文件。如果文件中没有发现章节或标签条目,则不会创建输出文件。
时间戳提取模式
语法: mkvextract
输入文件名
timestamps_v2 [选项]
TID1:目标文件名1
[TID2:目标文件名2 ...]
TID:输出文件名
如果输入文件中存在
ID 为
TID
的轨道,则将其时间戳提取为文件
输出文件名。本选项可多次给出。轨道
ID 与
mkvmerge(1) 的
--identify
选项所输出的相同。
示例:
$ mkvextract 输入.mkv timestamps_v2 1:时间戳-轨1.txt 2:时间戳-轨2.txt
语法: mkvextract
输入文件名
cues [选项]
TID1:目标文件名1
[TID2:目标文件名2 ...]
TID:目标文件名
若输入文件中存在,则提取
ID 为
TID 的轨道的 cue
并保存到
输出文件名
中。本选项可多次给出。轨道
ID 与
mkvmerge(1) 的
--identify
选项所输出的一致,而非
CueTrack
元素中所包含的数字。
输出的格式为简单文本格式:
每个 CuePoint 及 键=值
对占一行。如果 CuePoint
中未出现某个可选元素
(如 CueDuration)
则将输出短横作为其数值。
示例:
timestamp=00:00:13.305000000 duration=- cluster_position=757741 relative_position=11
可用的关键词包括:
timestamp (时间戳)
cue point
的时间戳,精确到纳秒。格式为
HH:MM:SS.nnnnnnnnn。该元素必有值。
duration (时长)
cue point
的时长,精确到纳秒。
cluster_position (簇位置)
Matroska
文件中指向相关元素的簇的起始点的绝对位置,单位为字节。
注意
Matroska 文件中,CueClusterPosition
相对于剪辑数据的起始偏移。而
mkvextract(1) 的 cue
提取模式所输出的值,已经计入该偏移,因此是从文件开头起的绝对偏移。
relative_position (相对位置)
cue point 所指向的 BlockGroup
或 SimpleBlock
元素的起始点在簇内的绝对位置,单位为字节。
注意
Matroska 文件中,CueRelativePosition
相对于簇数据的起始偏移。而
mkvextract(1) 的 cue
提取模式所输出的值,相对于簇的
ID。在文件内的绝对位置可以通过将
cluster_position 与 relative_position
相加得出。
示例:
$ mkvextract 输入.mkv cues 1:cues-轨1.txt 2:cues-轨2.txt
示例
同时提取章节与标签,并按其相应的
XML 格式保存:
$ mkvextract 影片.mkv chapters 影片章节.xml tags 影片标签.xml
同时提取一些轨道及其对应的时间戳:
$ mkvextract "另一部影片.mkv" tracks 0:video.h265 "1:主音轨.aac" "2:导演评论.aac" timestamps_v2 "0:视频时间戳.txt" "1:主音轨时间戳.txt" "2:导演评论音轨时间戳.txt"
以 Ogg/OGM
格式提取章节,并将一条文本字幕轨道用另一种字符集重新编码:
$ mkvextract "我的影片.mkv" chapters --simple "我的章节.txt" tracks -c MS-ANSI "2:我的字幕.srt"
文本文件与字符集转换
关于 MKVToolNix
套件中所有工具如何处理字符集转换、输入/输出编码、命令行编码及控制台编码的深入讨论,请参见
mkvmerge(1)
手册中相对应名称的段落。
输出文件格式
输出的格式取决于轨道的类型,而不是输出文件名的扩展名。目前支持以下轨道类型:
A_AAC/MPEG2/*, A_AAC/MPEG4/*, A_AAC
所有 AAC
文件将被输出为 AAC
文件,其中数据包前有
ADTS 头。ADTS
头将不含反增强字段(deprecated
emphasis field)。
A_AC3, A_EAC3
这些会提取为原始
AC-3 文件。
A_ALAC
ALAC 轨道将输出为 CAF
文件。
A_DTS
这些会提取为原始
DTS 文件。
A_FLAC
FLAC
轨道将输出为原始的 FLAC
文件。
A_MPEG/L2
MPEG-1 Audio Layer II
流将提取为原始的 MP2
文件。
A_MPEG/L3
这些会提取为原始
MP3 文件。
A_OPUS
Opus 轨道将输出为
OggOpus 文件。
A_PCM/INT/LIT, A_PCM/INT/BIG
原始 PCM
数据将写入 WAV
文件。大端序整数数据在此期间将被转为小端序数据。
A_REAL/*
RealAudio
轨道将被输出为 RealMedia
文件。
A_TRUEHD, A_MLP
这些会提取为原始
TrueHD/MLP 文件。
A_TTA1
TrueAudio
轨道将被输出为 TTA
文件。请注意,由于
Matroska
时间戳的精度限制,解开来的文件的头部有两个字段不同:data_length
(文件的总采样数) 与
CRC。
A_VORBIS
Vorbis
音频将被输出为 OggVorbis
文件。
A_WAVPACK4
WavPack 轨道将输出为
WV 文件。
S_HDMV/PGS
PGS 字幕将输出为 SUP
文件。
S_HDMV/TEXTST
S_KATE
Kate 流将以 Ogg
为容器输出。
S_TEXT/SSA, S_TEXT/ASS, S_SSA, S_ASS
SSA 与 ASS
文本字幕将分别被输出为
SSA/ASS 文件。
S_TEXT/UTF8, S_TEXT/ASCII
简单的文本字幕将被输出为
SRT 文件。
S_VOBSUB
VobSub 字幕将输出为
SUB
文件及相应的索引文件(后缀为
IDX)。
S_TEXT/USF
USF
文本字幕将输出为 USF
文件。
S_TEXT/WEBVTT
WebVTT
字幕文件将写入 WebVTT
文件。
V_MPEG1, V_MPEG2
MPEG-1 与 MPEG-2
视频轨道将输出为 MPEG
基本流(ES)。
V_MPEG4/ISO/AVC
H.264 / AVC
视频轨将被输出为 H.264
基本流,可以使用如 GPAC
工具包中的 MP4Box
作进一步处理。
V_MPEG4/ISO/HEVC
H.265 / HEVC
视频轨道将输出为 H.265
基本流(ES),该格式可使用
GPAC 软件包中的 MP4Box
作进一步处理。
V_MS/VFW/FOURCC
使用此 CodecID 且 FPS
恒定的视频轨将被输出为
AVI 文件。
V_REAL/*
RealVideo
轨道将被输出为 RealMedia
文件。
V_THEORA
Theora 流将以 Ogg
为容器输出
V_VP8, V_VP9
VP8 / VP9
轨道将输出为 IVF
文件。
标签
附件
附件将被以原样输出。不会进行任何转换。
章节
章节将被转换为
XML 格式。此格式与
mkvmerge(1)
所支持读取的章节格式相同。您也可以选择输出精简的简单
OGM 格式。
时间戳
时间戳会先被排序,然后以
timestamp v2
格式文件输出,该文件适用于
mkvmerge(1)。不支持提取为其他格式
(v1, v3 或 v4)。
退出代码
mkvextract(1)
退出时会返回以下三个退出代码中的一个:
•0 --
此退出代码说明已成功完成提取。
•
1 --
这种情况下
mkvextract(1)
至少输出了一条警告信息,但提取并未因之中止。
警告信息以文字 '警告:'
为前缀。根据问题的不同,生成的文件可能是好的,也可能不是。
强烈建议用户检查警告信息以及生成的文件。
•
2 --
此退出代码用于错误发生之后。
mkvextract(1)
在输出错误信息后即中断处理。错误信息可能是错误的命令行参数,也可能是损坏文件的读取/写入错误。
环境变量
mkvextract(1)
使用决定系统区域设置的默认变量
(如 LANG 与 LC_*
族)。其他变量包括:
MKVEXTRACT_DEBUG, MKVTOOLNIX_DEBUG
及其缩略形式 MTX_DEBUG
内容将被当作通过
--debug
选项传递的参数对待。
MKVEXTRACT_ENGAGE, MKVTOOLNIX_ENGAGE
及其缩略形式 MTX_ENGAGE
内容将被当作通过
--engage
选项传递的参数对待。
网络
最新版本总可以在
MKVToolNix 主页[1] 找到。
作者
Moritz Bunkus <moritz@bunkus.org>
开发人员
备注
- 1.
- MKVToolNix 主页
https://mkvtoolnix.download/