other versions
- wheezy 5.6.0-1
- jessie 7.3.0-1
- testing 9.8.0-dmo1
- unstable 9.8.0-dmo1
- experimental 12.0.0-1
other languages
MKVMERGE(1) | 用户命令 | MKVMERGE(1) |
名称¶
mkvmerge - 将多媒体流合并到 Matroska(TM) 文件中概要¶
mkvmerge
[全局选项] {-o 输出文件}
[选项1] {文件1}
[[选项2] {文件2}]
[@选项文件]
说明¶
本程序可读取多种媒体文件并将它们的数据流(全部或者按选择)合并到 Matroska(TM) 文件中去;参见 Matroska(TM) 网站[1]。全局选项¶
-v, --verbose增强“详细”程度。
-q, --quiet
取消状态输出。
-o, --output 文件名
写至文件
文件名。如果使用了切割功能,对此参数的处理将有所不同。
详情请参阅关于 --split
选项的说明。
-w, --webm
创建 WebM
兼容文件。如果输出文件扩展名为
"webm"
则将自动开启本选项。此模式将实施一些限制。只允许使用编解码器为
VP8 视频与 Vorbis
音频的轨道。章节与标签功能都不允许使用。DocType
文档类型头项将更改为
"webm"。
--title 标题
设置整个生成文件的标题,比如电影名称。
--default-language 语言代码
设置默认语言代码。所有轨道将使用此语言码,除非被用
--language
选项覆盖。默认的语言代码是
'und' 代表
'undefined'(未定)。
剪辑信息处理 (全局选项)¶
--segmentinfo 文件名.xml从 XML
文件中读取剪辑信息。此文件可以包含剪辑族的
UID、剪辑的
UID、上一剪辑以及下一剪辑的
UID 元素。示例文件以及
DTD 已包含在 MKVToolNix
发布包中。
详情请参见下文关于
剪辑信息 XML 文件
的段落。
--segment-uid SID1,SID2,...
设定要使用的剪辑
UID。这是个逗号分割的
128 位 UID 列表,UID
为通常的格式:
十六进制数字,"0x"
前缀可选,空格可选,但必须恰好有
32 个数位。
创建的每个文件都包含一个剪辑,每个剪辑有一个剪辑
UID。如果指定的剪辑 UID
比创建的剪辑多,则多余的
UID
将被忽略。如果指定的
UID
比创建的剪辑少,则将随机创建
UID。
章节与标签处理 (全局选项)¶
--chapter-language 语言代码设置各章节项的
ISO639-2 语言代码。 默认为
'eng'。
详情参见下文中关于
章节 的段落。
此选项可用于简单章节文件与包含章节但不含章节语言信息的源文件,如
MP4 与 OGM 文件。
--chapter-charset 字符集
设置简单章节文件所用的字符集,用以转为
UTF-8。关于 mkvmerge(1)
如何在字符集之间转换的说明请参见关于
文本文件与字符集
的段落。
此开关亦可应用到从特定容器类型,如
Ogg/OGM 和 MP4
文件中复制而来的章节。
详情参见下文关于章节的段落。
--cue-chapter-name-format 格式
•%p
被当前项的
PERFORMER(表演者)
字符串替代,
•%t
被当前项的
TITLE(标题)
字符串替代,
•%n
被当前轨道编号替代,此外
•%N
被当前轨道衬式编号(小于
10
则在前面加零)替代。
从文件
文件名
读取章节信息。详情参阅下文关于
章节 的段落。
--global-tags 文件名
从文件
文件名
读取全局标签。详情参阅下文关于
标签 的段落。
全局输出控制 (高级全局选项)¶
--track-order FID1:TID1,FID2:TID2,...此选项更改输入文件创建时轨道的顺序。变量为逗号分隔的成对的
ID
列。每对先包含有文件
ID (
FID1),即文件在命令行中的顺序,由
0
开始计数。第二个是在该文件中的轨道
ID ( TID1)。
如果省去部分轨道的
ID,则这些轨道将在使用本选项给定的轨道创建之后创建。
--cluster-length 指令
限制每个簇中数据块的数量或数据的时长。指令
参数可以是无单位的数字
n,也可以是后缀有 'ms'
的 d。
如果未使用数字,
mkvmerge(1)
将在每个簇中放置最多
n
个数据块。最大块数是
65535。
如果数字 d 后缀有 'ms',
mkvmerge(1)
将在每个簇中放置最多
d 毫秒的数据。 d
的最小值是
'100ms',最大值是 '32000ms'。
mkvmerge(1)
默认每簇最多放置 65535
个数据块或 5000ms
的数据。
尝试定位到特定帧的程序只能直接定位到簇,然后需要读取整个簇(来完成定位)。因此创建较大的簇将导致定位不精确或缓慢。
--no-cues
让 mkvmerge(1)
不要创建或写入 cue
索引( 可类比作 AVI
文件中的索引)。没有索引的
Matroska(TM)
文件也能播放,但定位可能不精确且缓慢。仅当您确实强求空间或用作测试时使用此选项。请参阅可为各输入文件指定的
--cues 选项。
--clusters-in-meta-seek
告诉 mkvmerge(1)
在文件末尾创建包含所有簇的元定位元素。参阅关于
Matroska(TM) 文件规划
的段落。
--disable-lacing
禁用所有轨道的紧缩。这将增加文件大小,尤其是当有很多音频轨时。此选项不供日常之用。
--enable-durations
为所有块写入时长。这将增大文件尺寸,而且目前对播放器来说不提供任何额外的益处。
--timecode-scale 系数
强制时间码缩放系数为
系数。有效值域为
1000.. 10000000 或特殊值
-1。
通常 mkvmerge(1) 会使用数值
1000000,这样时间码和时长的精度为
1ms。对于不包含视频轨但含有至少一条音频轨的文件,
mkvmerge(1)
将自动选择一个时间码缩放系数以使各轨的音频采样精度相同。这将引起更大的额外开销,但将允许更为精确的定位与提取。
如果使用了特殊值
-1,即使有视频轨,
mkvmerge(1)
也将使用采样精度。
文件切割、连接、追加及合并 (其他全局选项)¶
--split 指令在给定尺寸或时间之后切割输出文件。请注意,各轨道只能在关键帧之前的位置切割开。由于缓冲原因,mkvmerge(1)
将在达到切割点后发现的首个关键帧前的位置切割。因此实际切割点可能比用户指定的稍稍靠后些。
目前 mkvmerge(1)
支持四种不同的模式。
1.按尺寸切割。
语法: --split [size:] d[k|m|g]
示例: --split size:700m 或者 --split 150000000
参数 d 可以以 'k'、'm' 或 'g'
结尾,分别说明尺寸的单位为
KB、MB 或 GB。
否则假定单位为字节。
当前输出文件达到此尺寸限制后将开始输出新的文件。
为兼顾兼容性,'size:'
前缀可以省略。
2.在一定时长后切割。
语法: --split [duration:] HH:MM:SS.nnnnnnnnn|ds
示例: --split duration:00:60:00.000 或 --split 3600s
此参数可以用 HH:MM:SS.nnnnnnnnn
的形式指定纳秒精度的时长,也可以是后接字母
's'
的指定秒数时长的数字
d。HH 为小时数, MM
为分钟数, SS
为秒数,而 nnnnnnnnn
为纳秒数。
小时数与纳秒数均可省略。
小数点后最多可以有九位。
当前输出内容的时长达到此限制后将开始输出新的输出文件。
为兼顾兼容性,'duration:'
前缀可以省略。
3.在指定时间码后切割。
语法: --split timecodes: A[,B[,C...]]
示例: --split timecodes:00:45:00.000,01:20:00.250,6300s
参数 A、B、C
等等的格式与按时长切割模式(见上文)所用的格式相同。时间码表以逗号分隔。
输入流达到当前切割点的时间码后将创建新的输出文件。然后将使用所给定的下一个切割点。
'timecodes:' 前缀不得省略。
4.通过指定时间码区域,保留特定部分,并丢弃其余部分。
语法: --split parts:
起点1-终点1[,[+]
起点3-
终点2[,[+]起点3-
终点3...]]
示例:
1.--split
parts:00:01:20-00:02:45,00:05:50-00:10:30.RE
2.--split
parts:00:01:20-00:02:45,+00:05:50-00:10:30.RE
此切割模式下输出文件名将以不同于常用操作的方式对待。可能会含有类似
printf 中 '%d'
的表达式,包括可选的字段宽度,如
'%02d'。如果含有上述表达式,当前文件序号将按相应格式生成,然后插入到文件名中的相应位置。
如果没有此类匹配模式,则假定匹配模式为在文件扩展名之前插入
'-%03d': '-o 输出.mkv' 将生成
'输出-001.mkv'
这样的一系列文件。如果没有扩展名,'-%03d'
将被追加在文件名之后。
--link
3.--split parts:-00:02:45,00:05:50-.RE
parts 模式可以告诉 mkvmerge(1)
保留特定时间码范围,而丢弃其余部分。要保留的范围需要在
parts:
关键词后列出,以逗号隔开。各分段由起始及终止时间码组成,格式与其他
--split
模式所能接受的相同
(如 00:01:20 与 80s
代表相同的时间码)。
若起始时间码留空,则默认为前一段的终止时间码。若不存在前一段,则默认为文件开头
(参见示例 3)。
若终止时间码留空,则默认为文件末尾,亦即告诉
mkvmerge 保留其余部分
(参见示例 3)。
通常每一段都会写入新的文件。该行为也可以改变,将连续的分段写入同一个文件。要实现这种效果,用户可以在起始时间码开头加上
+ 前缀。这样可以告诉
mvkmerge
不要创建新文件,而是将该分段写入与之前一段相同的文件当中。时间码也会自动调整,确保即使输入文件两分段间存在间隙,输出文件中也不出现间隙。
例 1 中 mkvmerge
会创建两个文件。第一个包含
00:01:20 到 00:02:45
之间的内容。第二个文件包含
00:05:50 到 00:10:30 之间的内容。
例 2 中 mkvmerge
将只创建一个文件。该文件包含
00:01:20 到 00:02:45 及 00:05:50 到 00:10:30
的内容。
例 3 中 mkvmerge
将创建两个文件。第一个包含源文件开头到
00:02:45
的内容。第二个文件将包含源文件
00:05:50
到结尾之间的内容。
切割输出文件时连接文件。详情请参阅下文
文件链接 段落。
--link-to-previous 剪辑-UID
连接第一个输出文件到指定
剪辑-UID
参数对应的剪辑。详情请参阅下文
文件链接 段落。
--link-to-next 剪辑-UID
连接最后一个输出文件到指定
剪辑-UID
参数对应的剪辑。详情请参阅下文
文件链接 段落。
--append-mode 模式
决定追加合并文件时如何计算时间码。
参数 模式
可以有两个数值:
默认的 'file(文件)' 和
'track(轨道)'。
当 mkvmerge 将来自另一文件
(本段中假设为 '文件2')
的一条轨道 (假设为
'轨道2_1' )
追加合并到首个文件
(假设为
'文件1')的一条轨道
(假设为 '轨道1_1')
时,它将为 '轨道2_1'
的所有时间码设定一定量的延时。
对于 'file(文件)'
模式此延时量是 '文件1'
中遇到的最大时间码,即使此时间码不属于轨道
'轨道1_1'。而在 track
(轨道模式)下此延时为
'轨道1_1' 的最大时间码。
不幸的是 mkvmerge
无法侦测使用哪种模式更为可靠。因此默认为
'file(文件)' 模式。'file'
模式对单独创建的文件的处理通常更好;例如在追加
AVI 或 MP4
文件时。'track(轨道)'
模式对一个大文件的完整分块的处理更好,例如对于
VOB 与 EVO 文件。
即使选用了 'track(轨道)'
模式,字母轨道也将按照
'file(文件)'
模式处理。
--append-to SFID1:STID1:DFID1:DTID1[,...]
此选项控制要追加合并哪些轨道与哪些轨道。
各指令由四个 ID 组成:
源文件 ID, 源轨道 ID,
目标文件 ID 和目标轨道
ID。 第一对,"源文件
ID" 与 "源轨道
ID"确定要追加合并的轨道。
第二对,"目标文件
ID" 与 "目标轨道
ID",确定源轨道要追加合并到的轨道。
如果忽略本选项,则将使用标准映射。
标准映射即将当前文件的各个轨道追加到前一个文件的相应轨道(轨道
ID 相同)。
当影片被切割为多段,且各文件中轨道数和轨道
ID
相同时,这将允许简单的追加合并,命令行为
mkvmerge -o 输出.mkv 第一段.mkv
+第二段.mkv。
+
单个 '+'
将追加后面的文件,而不是添加。'+'
也可以直接放在下一个文件名的前面。因此以下两条命令等效:
=
$ mkvmerge -o 完整.mkv 文件1.mkv + 文件2.mkv $ mkvmerge -o 完整.mkv 文件1.mkv +文件2.mkv
通常情况下
mkvmerge(1)
将在输入文件所在的目录中查找基本名称相同,仅在连续的数字方面有差异的文件
(如 'VTS_01_1.VOB'、'VTS_01_2.VOB'、'VTS_01_3.VOB'
等等),并将所有这些文件作为连接后的单个大文件对待。本选项,单个
'=',可令 mkvmerge
不查找这些额外的文件。
'='
也可以放在下一个文件名的前面。因此以下两条命令等效:
( 文件1 文件2 )
$ mkvmerge -o 完整.mkv = 文件1.mkv $ mkvmerge -o 完整.mkv =文件1.mkv
如果一对圆括号中包含多个文件名,这些文件将被当作连接起来的单个大文件对待,其内容为各文件顺序相连。
该功能可用于如 DVD 中的
VOB 文件,或是 MPEG
传输流。如果各文件有独立的头,常见的例子如独立的
AVI 或 MP4
文件,则不适用。
将文件名置于括号中还可以阻止
mkvmerge(1)
查找具有相同基名称的文件,如
= 选项
所述。因此下面两则命令行等效:
应该注意的几件事:
$ mkvmerge -o 输出.mkv = 文件.mkv $ mkvmerge -o 输出.mkv '(' 文件.mkv ')'
1.左括号后、右括号前均必须有空格。
2.括号之间的所有参数都作为文件名解析。因此应用到此逻辑文件的所有选项都必须在左括号之前列出。
3.一些 shell
会将括号作为特殊符号对待。因此您需要像上例这样进行转义或给它们加上引号。
附件支持 (其他全局选项)¶
--attachment-description 描述对后面附件的纯文字描述。将应用到下一个
--attach-file 或 --attach-file-once
选项。
--attachment-mime-type MIME 类型
后面附件的 MIME
类型。将应用到下一个
--attach-file 或 --attach-file-once
选项。 官方认可的 MIME
类型列表可以在如 IANA
主页[2] 找到。MIME
类型对附件来说是必需的。
--attachment-name 名称
设置此附件将在输出文件中储存的名称。
如果未给出此选项则将由
--attach-file 或 --attach-file-once
选项所设的文件名推得。
--attach-file 文件名, --attach-file-once
文件名
在 Matroska(TM)
文件中创建文件附件。MIME
类型必须在使用此选项之前设定。两种形式的不同之处在于使用
--attach-file
附加的文件在切割过程中将被附加到所有输出文件中,而使用
--attach-file-once
附加的文件只被附加到创建的首个文件中。如果未使用切割功能,两种形式效果相同。
可以使用 mkvextract(1) 从 Matroska(TM)
文件中提取附件文件。
用于各输入文件的选项¶
-a, --audio-tracks [!]n,m,...复制 n、m
等音频轨。数字是可以通过
--identify 开关获取的轨道
ID。他们不只是简单的轨道序号(参见
轨道 ID段落)。默认:
复制所有音频轨道。
如果 ID 以 !
作为前缀,则含义相反:
复制除了列在 ! 后面的 ID
以外的所有轨道。
-d, --video-tracks [!]n,m,...
复制 n、m
等视频轨。数字是可以通过
--identify 开关获取的轨道
ID。他们不只是简单的轨道序号(参见
轨道 ID段落)。默认:
复制所有视频轨道。
如果 ID 以 !
作为前缀,则含义相反:
复制除了列在 ! 后面的 ID
以外的所有轨道。
-s, --subtitle-tracks [!]n,m,...
复制 n、m
等字幕轨。数字是可以通过
--identify 开关获取的轨道
ID。他们不只是简单的轨道序号(参见
轨道 ID段落)。默认:
复制所有字幕轨道。
如果 ID 以 !
作为前缀,则含义相反:
复制除了列在 ! 后面的 ID
以外的所有轨道。
-b, --button-tracks [!]n,m,...
复制 n、m
等按钮轨。数字是可以通过
--identify 开关获取的轨道
ID。他们不只是简单的轨道序号(参见
轨道 ID段落)。默认:
复制所有按钮轨道。
如果 ID 以 !
作为前缀,则含义相反:
复制除了列在 ! 后面的 ID
以外的所有轨道。
--track-tags [!]n,m,...
复制 n、m
等轨道的标签。数字是可以通过
--identify 开关获取的轨道
ID。他们不只是简单的轨道序号(参见
轨道 ID段落)。默认:
复制所有轨道的标签。
如果 ID 以 !
作为前缀,则含义相反:
复制除了列在 ! 后面的 ID
以外的所有轨道。
-m, --attachments
[!]n[:all|first],m[:all|first],...
复制 ID 为
n、m
等的附件到所有或者仅首个输出文件中。各
ID 后可接
':all'(如果两可选数值均未输入,此为默认值)或者
':first'。如果切割功能已被起用,则
ID 被指定为 ':all'
的附件将被复制到所有生成的输出文件中,而其他附件只被复制到首个输出文件中。如果未使用切割功能则两变量等效。
默认复制所有附件到所有输出文件中。
如果 ID 以 !
作为前缀,则含义相反:
复制除了列在 ! 后面的 ID
以外的所有轨道。
-A, --no-audio
不要从此文件中复制任何音频轨。
-D, --no-video
不要从此文件中复制任何视频轨。
-S, --no-subtitles
不要从此文件中复制任何字幕轨。
-B, --no-buttons
不要从此文件中复制任何按钮轨。
-T, --no-track-tags
不要从此文件中复制任何轨道细节标签。
--no-chapters
不要从此文件中复制章节。
-M, --no-attachments
不要从此文件中复制附件。
--no-global-tags
不要从此文件中复制全局标签。
--chapter-charset 字符集
设置源文件中章节信息的字符集,以供转为
UTF-8 之用。关于 mkvmerge(1)
如何在字符集之间进行转换的说明,请参阅下文
文本文件与字符集
段落。
--chapter-language 语言代码
选择各章节项所用的
ISO639-2 语言代码。
此选项可用于包含章节但不含关于章节语言的信息的源文件,如
MP4 与 OGM 文件。
-y, --sync TID:d[,o[/p]]
将 id 为 TID
的轨道的时间码按 d ms
进行调整。轨道 ID 与
--identify 所给出的相同
(参见 轨道 ID 段落)。
o/p: 按 o/p
调整时间戳以修复线性偏移。如果省略
p 则默认为 1。 o 与 p
均可为浮点数。
默认: 无手动同步校正
(与 d = 0 及 o/p = 1.0
效果相同)。
此选项可以对同一输入文件多次使用,通过每次选择不同轨道
ID
分别应用到多个轨道。
--cues TID:none|iframes|all
控制为指定轨道
(参阅 轨道 ID 段落)
创建何种 cue
索引。'none(无)'
将阻止 cue 索引的创建。
而 'iframes(仅 i 帧)'
表示仅将没有前后参考的块
( = 视频轨道中的 I 帧)
置于 cue
索引项中。'all(全部)'
将使 mkvmerge(1)
为所有区块创建索引,会使生成的文件非常大。
默认视频轨为 'iframes(仅 i
帧)',其他所有轨道均为
'none(无)'.
参见不论是否使用 --cues
选项时都能阻止创建 cue
索引项的 --no-cues 选项。
此选项可以对同一输入文件多次使用,通过每次选择不同轨道
ID
分别应用到多个轨道。
--default-track TID[:bool]
当为设定可选变量
bool 时为指定轨道 (参见
轨道 ID 段落) 设置
'默认轨' 标记。
当用户未明确选定一个轨道时,播放器将优先选用设有
'默认轨'
标记的轨道。各类
(音频、视频、字幕、按钮)
轨道只能有一条设置
'默认轨' 标记。
如果用户希望所有轨道都不被设置默认轨标记,可以将所有轨道的
bool 设为 0。
此选项可以对同一输入文件多次使用,通过每次选择不同轨道
ID
分别应用到多个轨道。
--forced-track TID[:bool]
若未给出可选参数
bool,则为指定轨道
(参见 轨道 ID 段落)
设置“强制轨”标记。播放器必须播放“强制轨”标记为
1 的所有轨道。
此选项可以对同一输入文件多次使用,通过每次选择不同轨道
ID
分别应用到多个轨道。
--blockadd TID:层级
只保留选定轨道中高达
层级 层级的 BlockAdditions
附加块。
默认保留所有层级。
此选项只影响特定类型的编解码器,如
WAVPACK4。
--track-name TID:名称
将指定轨道
(参见 轨道 ID 段落)
的轨道名称设为
名称。
--language TID:语言
为指定轨道
(参见 轨道 ID)
设置语言。允许使用
ISO639-2 语言代码与 ISO639-1
国家代码。国家代码将被自动转换为语言代码。
可以使用 --list-languages
选项列出所有语言以及它们的
ISO639-2 代码。
此选项可以对同一输入文件多次使用,通过每次选择不同轨道
ID
分别应用到多个轨道。
-t, --tags TID:文件名
从文件
文件名
读取轨道号为 TID
的轨道的标签。详情参见下文
标签 段落。
--aac-is-sbr TID[:0|1]
告诉 mkvmerge(1) ID
为 TID 的轨道是 SBR AAC (亦作
HE-AAC 或
AAC+)。下述情况下需要此选项:a)
源文件是 AAC 文件 (
不是 Matroska(TM) 文件) 且 b) 该
AAC 文件含有 SBR AAC 数据。
设置此开关的原因是目前技术上无法在不解码一个完整的
AAC
帧的情况下自动分辨普通的
AAC 数据与 SBR AAC 数据。由于
AAC
解码器的诸多专利问题,
mkvmerge(1)
永远不会包含此解码层。因此此开关对于
SBR AAC
文件是必需的。如果忽略了此开关,生成的文件可能无法正常回放,甚至可能根本无法播放。
如果源文件是 Matroska(TM)
文件,则已有足够侦测
SBR AAC 的 CodecID
了。然而,如果 CodecID
标注错误,此开关可用于更正之。
如果 mkvmerge 错将 AAC
文件侦测为
SBR,您可以将 ':0'
添加到轨道 ID。
--timecodes TID:文件名
从 文件名
读取要应用到指定轨道
ID 的时间码。
这些时间码将强制覆盖
mkvmerge(1)
默认计算出的时间码。参阅关于
外部时间码文件
的章节。
--default-duration TID:x
强制指定轨道的默认时长为指定数值。
将同时修改轨道的时间码以匹配该默认时长。
变量 x 必须有 's', 'ms', 'us', 'ns',
'fps', 'p' 或 'i'
作为后缀,分别以秒、毫秒、微秒、纳秒、“帧每秒”、“逐行帧每秒”或“隔行帧每秒”为单位指定默认时长。数字
x
本身可为浮点数或分数。
如果未强制指定默认时长,mkvmerge
将尝试继承容器中(及/或特定轨道类型,如
AVC/h.264 或 MPEG-2
已编码的位流中)该轨道的默认时长。
此选项也可用于在不使用外部时间码文件的情况下更改视频轨的
FPS(帧率)。
--nalu-size-length TID:n
强制 NALU 长度为
n 字节。
此变量仅当使用 AVC/h.264
基本流分包器时使用。
如果留空,则默认为 4
字节,然而有的文件包含的所有帧或切片都小于
65536 字节。
对此类文件您可以使用此参数并将长度降为
2。
--compression TID:n
选择用于该轨道的压缩方式。注意播放器也得支持该方式。有效的值有
'none(无压缩)'、'zlib'、'lzo'/'lxo1x'、'bz2'/'bzlib'
与 'mpeg4_p2'/'mpeg4p2'。值 'lzo'/'lxo1x' 与
'bz2'/'bzlib' 仅当 mkvmerge(1)
分别附加相应的 liblzo(TM) 和
bzlib(TM)
压缩库编译时有效。
压缩方式 'mpeg4_p2'/'mpeg4p2'
是一种称为 '去头'
的特殊压缩方式,只对
MPEG4 part 2 视频轨可用。
部分字幕轨的默认值为
'zlib'
压缩。此压缩方式也是大部分(如果不是所有)回放应用程序都支持的压缩方式。无法保证对除
'none(无压缩)'
以外的其他压缩方式的支持。
仅用于视频轨的选项¶
-f, --fourcc TID:FourCC强制 FourCC
为指定值。仅对
'微软兼容模式'
的视频轨有效。
--display-dimensions TID:宽度x高度
另一种设置宽高比的方法是指定一个
系数。将将原始宽高比与
系数
相乘后用作目标宽高比。
指定所用数值的其他方法是使用
--aspect-ratio 或 --display-dimensions 选项
(参见上文)。这些选项互相独立。
--cropping TID:左,上,右,下
将视频轨道的像素裁减参数设为指定数值。
--stereo-mode TID:n|关键词
设置轨道 ID 为
TID
的轨道的立体模式。
模式可以为介于 0 与
14 的数字 n
或这些关键词之一:
'mono'、'side_by_side_left_first'、'top_bottom_right_first'、'top_bottom_left_first'、'checkerboard_right_first'、'checkerboard_left_first'、'row_interleaved_right_first'、'row_interleaved_left_first'、'column_interleaved_right_first'、'column_interleaved_left_first'、'anaglyph_cyan_red'、'side_by_side_right_first'、'anaglyph_green_magenta'、'both_eyes_laced_left_first'、'both_eyes_laced_right_first'。
仅适用于文本字幕轨道的选项¶
--sub-charset TID:字符集为指定轨道 ID
指定所用字符集,用以转为
UTF-8 编码的 UTF-8
字幕。如果未指定字符集,则将根据当前区域设置推算字符集。注意对于从
Matroska(TM) 文件或 Kate
流中读取的字幕不必指定字符集,因为在这些格式中已使用
UTF-8 编码储存。关于
mkvmerge(1)
如何在字符集间进行转换的说明请参见关于
文本文件与字符集
的段落。
此选项可以对同一输入文件多次使用,通过每次选择不同轨道
ID
分别应用到多个轨道。
其他选项¶
-i, --identify 文件名将使 mkvmerge(1)
探查单个文件并报告其类型、文件中包含的轨道及其轨道
ID。如果使用了本选项,唯一可用的其他选项就是文件名。
-I, --identify-verbose 文件名
将使 mkvmerge(1)
探查单个文件并报告其类型、文件中包含的轨道及其轨道
ID。如果使用了本选项,唯一可用的其他选项就是文件名。
此选项可让 mkvmerge(1)
输出关于容器及其中的轨道的额外信息。额外信息由方括号围绕。它包含空格分隔的键/值对,其中键与值由冒号分隔。
各值按
关于文本中特殊字符的转义的段落
中描述的规则转义。
-l, --list-types
列出受支持的输入文件类型。
--list-languages
列出所有语言及其
ISO639-2
代码,这些代码可以在
--language 选项中使用。
--priority 优先级
设置 mkvmerge(1)
运行时的进程优先级。有效的值为
'lowest(最低)',
'lower(较低)',
'normal(普通)',
'higher(较高)' 与
'highest(最高)'。如果未予设定,则使用
'normal(普通优先级)'。在
类-Unix 系统中 mkvmerge(1)
将使用 nice(2)
功能。因此只有超级用户才能使用
'higher(较高优先级)' 与
'highest(最高优先级)'。对于
Windows
用户来说所有值都可用。
--command-line-charset 字符集
设定在命令行给出的字符串的字符集,用于转为其他字符集。默认为系统当前区域设置中所给定的字符集。此设置将应用到以下选项的变量:
--title、--track-name 及
--attachment-description。
--output-charset 字符集
设置输出的字符串应被转换到何种字符集。默认为系统当前区域设置中所给定的字符集。
-r, --redirect-output 文件名
将所有信息输出至文件
文件名
而不是在命令行显示。
尽管该操作可以用输出重定向轻松实现,但在某些情况下还需要靠它:如当终端在写入文件之前重新解释(覆盖输出)时。
将优先使用通过
--output-charset
设定的字符集。
--ui-language 语言代码
强制使用语言代码为
语言代码
的翻译(如 'de_DE'
对应德文翻译)。使用
LANG, LC_MESSAGES 及 LC_ALL
这些环境变量更好。如果在
语言代码 处输入
'list', mkvmerge(1)
将输出可用翻译列表。
--debug 主题
为特定功能开启调试。该选项仅对开发者有用。
--engage 功能
开启实验性功能。可用功能列表可通过
mkvmerge --engage list
得到。这些功能在正常情况下不应该使用。
@选项文件
从文件
选项文件
读取其他命令行参数。更多信息请参见关于
选项文件 的段落。
--capabilities
列出编译时附加的可选功能并退出。输出信息的第一行是版本信息。接下来的每行包含一个单词,各单词的出现意味着编译时附加了相应功能。这些功能包括:
-h, --help
•'BZ2' -- bzlib(TM)
压缩库。影响 --compression
选项可用的压缩方式。
•'LZO' -- lzo(TM)
压缩库。影响 --compression
选项可用的压缩方式。
•'FLAC' --
读取原始 FLAC
文件,以及处理其他容器中的
FLAC 轨道,例如 Ogg(TM) 或 Matroska(TM)
容器中的。
显示用法信息并退出。
-V, --version
显示版本信息并退出。
--check-for-updates
联机下载 URL
http://mkvtoolnix-releases.bunkus.org/latest-release.xml
检查新版本。将以
键=值 的样式输出四行:
检索信息的 URL(键
version_check_url),当前运行的版本(键
running_version),最新版本(键
available_version)及其下载 URL(键
download_url)。
若无更新版本可用,程序将以退出码
0
退出,若有更新版本可用,退出码为
1,若出现错误(如无法检索更新信息),退出码则为
2。
此选项仅当程序附带 libcurl
支持编译时可用。
用法¶
用户可以选择各文件中 mkvmerge(1) 应该使用的轨道。它们都将被封装到 -o所指定的文件中。可通过 -l 选项获取已知(且受支持的)来源格式列表。选项顺序¶
输入选项的顺序对一些选项很重要。选项可归为两类:
1.影响整个程序的选项不与任何输入文件有关。这些选项包括但不限于
--command-line-charset、--output 或
--title。这些选项可在命令行的任意位置出现。
2.影响单个输入文件或输入文件中的单个轨道的选项。这些选项均应用到命令行中接着的输入文件。所有应用到同一输入文件(或其轨道)的选项可以以任意顺序书写,只要都出现在该输入文件名之前。应用到输入文件的选项如
--no-chapters 或
--chapter-charset。应用到单个轨道的选项如
--default-duration 或 --language。
选项从左向右处理。如果同一个选项在同一范围内出现多次,将使用最后一次给出的参数。因此在下面的例子中,标题将被设为
"其他东东":
$ mkvmerge -o 输出.mkv --title '这个内个' input.avi --title '其他东东'
$ mkvmerge -o 输出.mkv --language 0:fre 法语.ogg --language 0:deu 德语.ogg
示例¶
假定您有个名为 我的影片.avi 的文件,以及分开存放的音频轨如 '我的影片.wav'。您希望先将音频编码为 OggVorbis(TM):$ oggenc -q4 -o 我的影片.ogg 我的影片.wav
$ mkvmerge -o 我的有声影片.mkv 我的影片.avi 我的影片.ogg
$ mkvmerge -o 我的有声影片.mkv -A 我的影片.avi 我的影片.ogg
$ oggenc -q4 -o我影片的另一音轨 我影片的另一音轨.wav $ mkvmerge -o 影片-成品.mkv 我的有声影片.mkv 我影片的另一音轨.ogg
$ mkvmerge -o 我的影片-成品.mkv -A 我的影片.avi 我的影片.ogg 我影片的另一音轨.ogg
$ mkvmerge --identify 错开了的.ogg
$ mkvmerge -o 同步了的.mkv -A 源.avi -y 12345:200 错开了的.ogg
$ mkvmerge -o 同步了的.mkv -y 23456:0,77346/77340 错开了的.mkv
1.从源文件中提取原始字幕流:
$ tccat -i /path/to/copied/dvd/ -T 1 -L | tcextract -x ps1 -t vob -a 0x20 | subtitle2pgm -o mymovie
2.使用 gocr
将生成的 PGM
图像转为文本:
$ pgm2txt mymovie
3.对生成的文本文件进行拼写检查:
$ ispell -d american *txt
4.将文本文件转为 SRT
文件:
这样生成的文件可用作
mkvmerge(1) 的输入文件:
$ srttool -s -w -i mymovie.srtx -o mymovie.srt
$ mkvmerge -o mymovie.mkv mymovie.avi mymovie.srt
$ mkvmerge --list-languages
$ mkvmerge -o 含语言代码的.mkv --language 2:ger --language 3:dut 无语言代码的.mkv
$ mkvmerge -o 含语言代码的.mkv --language 2:ger --language 3:dut --default-track 3 无语言代码的.mkv --language 0:eng 英语.srt --default-track 0 --language 0:fre 法语.srt
$ mkvmerge -o 无压缩.mkv --compression -1:none 我的影片.avi --compression -1:none 我的影片.srt
轨道 ID¶
$ mkvmerge -i v.mkv 文件 'v.mkv': 容器: Matroska(TM) Track ID 1: 视频 (V_MS/VFW/FOURCC, DIV3) Track ID 2: 音频 (A_MPEG/L3)
•
AVI 文件: 视频轨 ID 为
0。音频轨的 ID 由 1
开始升序分配。
•
AAC、AC3、MP3、SRT 与 WAV 文件:
此类文件中唯一的
'轨道' 的 ID 为 0。
•大多数其他文件:
轨道 ID
按在文件中被找到的顺序由
0 开始分配。
特殊的轨道 ID ' -1'
是个百搭号,它将使给定的开关应用到从输入文件中读到的所有轨道。
使用轨道 ID
的选项的描述中均含有
'TID'。此外下列选项也使用轨道
ID:
--audio-tracks、--video-tracks、--subtitle-tracks、
--button-tracks 以及 --track-tags。
文本文件与字符集转换¶
•
--sub-charset
用于文本字幕文件以及存储于字符集含糊的容器格式(如
Ogg
文件)中的文本字幕轨,
•
--chapter-charset
用于章节文本文件以及存储于字符集含糊的容器格式(如
Ogg
文件的章节信息,轨道和文件标题等;MP4
文件的章节信息)中的章节和文件标题,
•
--command-line-charset
用于所有命令行上的字符串,
•
--output-charset
用于输出到命令行或文件(当使用
--redirect-output
选项重定向输出时)的字符串。
选项文件¶
# 写入 Windows 平台的 "c:\Matroska\我的文件.mkv" 文件。 -o c:\\Matroska\\我的文件.mkv # 设置标题为 '#65'。 --title \h65 # 只需要 "一部影片.avi" 中的视频。 -A 一部影片.avi 声音.ogg
文本中特殊字符的转义¶
有时文本中的特殊字符必须或应该转义。转义规则很简单: 用反斜杠后接一字符替换需要转义的各字符。 规则为: ' ' (空格) 变为 '\s'、'"' (双引号) 变为 '\2'、':' 变为 '\c'、'#' 变为 '\h',而 '\' (单个反斜杠) 自己则变为 '\\'。SUBTITLES¶
可在 Matroska(TM) 文件中嵌入多种文本和位图字幕格式。文本字幕必须重新编码为 UTF-8 以确保播放器能准确显示(关于 mkvmerge(1) 如何在字符集间进行转换的说明请参见关于 文本文件与字符集 的段落)。Kate 字幕已经是 UTF-8 编码,不需要重新编码。 目前支持以下字幕格式:•Subtitle Ripper (SRT)
文件
•Substation Alpha (SSA) /
高级 Substation Alpha 脚本 (ASS)
•通用字幕格式
(USF) 文件
•OggKate 流
•VobSub
位图字幕文件
•BluRay 光盘中的
PGS 位图字幕文件
文件链接¶
默认值¶
附件¶
或许您希望将一些照片与您的 Matroska(TM) 文件一起存放,或者您正在使用 SSA 字幕,需要一个非常稀有的特殊 TrueType(TM) 字体。这种情况下您可以将这些文件附加到 Matroska(TM) 文件中。它们不会被追加到文件当中,而是被嵌入到文件中。然后播放器就可以显示这些文件 (如 '照片' 一例) 或者用它们来渲染字幕 (如 'TrueType(TM) 字体' 一例)。 这是关于如何在输出文件中附加照片和 TrueType(TM) 字体的示例:$ mkvmerge -o 输出.mkv -A 视频.avi 声音.ogg \ --attachment-description "乐队与我在后台小聚" \ --attachment-mime-type image/jpeg \ --attach-file 乐队与我.jpg \ --attachment-description "难得一见的绝美字体" \ --attachment-type application/octet-stream \ --attach-file 很酷的字体.ttf
章节¶
简单章节格式¶
此格式由成对的相继以 'CHAPTERxx=' 与 'CHAPTERxxNAME=' 开头的行组成。单数行包含起始时间码,而双数行包含标题。这是一个示例:CHAPTER01=00:00:00.000 CHAPTER01NAME=导入部分 CHAPTER02=00:02:30.000 CHAPTER02NAME=宝宝准备摇 CHAPTER03=00:02:42.300 CHAPTER03NAME=宝宝摇屋子
基于 XML 的章节格式¶
基于 XML 的章节格式看起来与这个示例类似:<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE Chapters SYSTEM "matroskachapters.dtd"> <Chapters> <EditionEntry> <ChapterAtom> <ChapterTimeStart>00:00:30.000</ChapterTimeStart> <ChapterTimeEnd>00:01:20.000</ChapterTimeEnd> <ChapterDisplay> <ChapterString>短短的一节</ChapterString> <ChapterLanguage>chi</ChapterLanguage> </ChapterDisplay> <ChapterAtom> <ChapterTimeStart>00:00:46.000</ChapterTimeStart> <ChapterTimeEnd>00:01:10.000</ChapterTimeEnd> <ChapterDisplay> <ChapterString>那短短的一节的一部分</ChapterString> <ChapterLanguage>chi</ChapterLanguage> </ChapterDisplay> </ChapterAtom> </ChapterAtom> </EditionEntry> </Chapters>
1.可以设置章节终止处的时间戳,
2.章节可以嵌套,
3.可以设置语言与国家。
mkvtoolnix 分发包的 doc
子目录包含了一些典型示例文件。
下面列出的是支持的 XML
标签,其数据类型及有效值域:
Chapters (主) EditionEntry (主) EditionUID (无符号整数,有效值域: 1 <= 值) EditionFlagHidden (无符号整数,有效值域: 0 <= 值 <= 1) EditionFlagDefault (无符号整数,有效值域: 0 <= 值 <= 1) EditionFlagOrdered (无符号整数,有效值域: 0 <= 值 <= 1) ChapterAtom (主) ChapterAtom (主) ChapterUID (无符号整数,有效值域: 1 <= 值) ChapterTimeStart (无符号整数) ChapterTimeEnd (无符号整数) ChapterFlagHidden (无符号整数,有效值域: 0 <= 值 <= 1) ChapterFlagEnabled (无符号整数,有效值域: 0 <= 值 <= 1) ChapterSegmentUID (二进制,有效值域: 1 <= 长度,以字节为单位) ChapterSegmentEditionUID (无符号整数,有效值域: 1 <= 值) ChapterPhysicalEquiv (无符号整数) ChapterTrack (主) ChapterTrackNumber (无符号整数,有效值域: 1 <= 值) ChapterDisplay (主) ChapterString (UTF-8 字符串) ChapterLanguage (UTF-8 字符串) ChapterCountry (UTF-8 字符串) ChapterProcess (主) ChapterProcessCodecID (无符号整数) ChapterProcessPrivate (二进制) ChapterProcessCommand (主) ChapterProcessTime (无符号整数) ChapterProcessData (二进制)
一般性备注¶
标签¶
介绍¶
标签细述¶
示例¶
假定您希望为从一个 AVI 文件读取的视频轨道添加标签。 mkvmerge --identify 文件.avi 告诉您该视频轨道的 ID (不要将此 ID 与 UID 混淆!) 为 0。于是您创建了一个标签文件,省去了所有 Targets 元素,然后这样调用 mkvmerge(1):$ mkvmerge -o 文件.mkv --tags 0:标签.xml 文件.avi
标签文件格式¶
•最外层的元素必须为
<Tags>。
•实际意义上的标签放在
<Tag> XML 标签对中。
•标签内容前后的空白将被忽略。
数据类型¶
新的 Matroska(TM) 标签系统只识别两种数据类型,UTF-8 字串与二进制类型。前者用于标签名称和 <String> 元素,而二进制类型用于 <Binary> 元素。 由于二进制数据自身与 XML 文件不相容, mkvmerge(1) 支持另两种储存二进制数据的方法。如果 XML 标签的内容以 '@' 开头,则后续文本将被作为文件名对待。相应文件的内容将被复制到 Matroska(TM) 元素中。 还有一种可能,即数据经 Base64 编码。这是将二进制数据转换为一定的 ASCII 字集字符,在电子邮件等程序中有所应用。 mkvextract(1) 将将二进制元素以 Base64 编码的数据的形式输出。 已被废弃的标签系统可识别更多的数据类型,这在 Matroska(TM) 官方的标签规范中可以找到。由于 mkvmerge(1) 不再支持此系统,此处不对这些类型作多余说明。XML 文件格式的已知标签¶
下面列出的是支持的 XML 标签,其数据类型及有效值域:Tags (主) Tag (主) Targets (主) TargetTypeValue (无符号整数) TargetType (UTF-8 字符串) TrackUID (无符号整数) EditionUID (无符号整数) ChapterUID (无符号整数) AttachmentUID (无符号整数) Simple (主) Simple (主) Name (UTF-8 字符串) TagLanguage (UTF-8 字符串) DefaultLanguage (无符号整数) String (UTF-8 字符串) Binary (二进制)
剪辑信息 XML 文件¶
可以通过剪辑信息 XML 文件设置 Matroska 文件 "剪辑信息" 头部字段的特定值。所有这些值都无法通过其他命令行选项设置。 还有一些 "剪辑信息" 头部字段可以通过命令行选项设置,而非通过 XML 文件。包括如 --title 及 --timecode-scale 选项。 还有其他元素既不能通过命令行选项,也不能通过 XML 文件设置。这些包括下述元素: DateUTC (即 "混流时间")、混流应用程序 MuxingApp、写入库 WritingApp 及 总时长 Duration。这些元素均由 mkvmerge(1) 自行设置。 下面列出的是支持的 XML 标签,其数据类型及有效值域:Info (主) SegmentUID (二进制,有效值域: 长度(字节) == 16) SegmentFilename (UTF-8 字符串) PreviousSegmentUID (二进制,有效值域: 长度(字节) == 16) PreviousSegmentFilename (UTF-8 字符串) NextSegmentUID (二进制,有效值域: 长度(字节) == 16) NextSegmentFilename (UTF-8 字符串) SegmentFamily (二进制,有效值域: 长度(字节) == 16) ChapterTranslate (主) ChapterTranslateEditionUID (无符号整数) ChapterTranslateCodec (无符号整数) ChapterTranslateID (二进制)
MATROSKA(TM) 文件规划¶
•元定位 #1
只包含很少量的 level 1
元素,且仅当它们存在时才包含:附件、章节、索引、标签以及元定位
#2。较早版本的 mkvmerge(1)
亦曾将簇放置在元定位元素中。因此应留给不精确的传言一些空间——真相总会大白。
现在只有簇才被储存在元定位
#2 中,元定位 #1
将引用元定位元素
#2。
•附件、章节和标签元素仅当被添加后才会出现。
允许的最短小的 Matroska
文件是像这样的:
[EBML 头] [剪辑 [剪辑信息]
[轨道信息] [簇 1]]
这也是纯音频文件的样子。
外部时间码文件¶
$ mkvmerge ... --timecodes 0:我的时间码.txt v1.avi +v2.avi
时间码文件格式 v1¶
此格式的第一行是版本声明。第二行则声明默认的帧率。 接下来的各行包含由逗号分隔的三个数字: 起始帧( 0 代表第一帧)、终止帧以及此范围内的帧率。FPS(帧率) 为浮点数,小数点用 '.' 表示。各行定义的范围间可以有间隔,间隔内将使用默认的 FPS。一个示例:# timecode format v1 assume 27.930 800,1000,25 1500,1700,30
时间码文件格式 v2¶
此格式中每行包含相应帧的时间码。此时间码必须以毫秒为精度。可以使浮点数,但不强求。您指定的时间码行数 必须 不少于对应轨道的帧数。此类文件中的时间码必须经过排序。 以 25fps 为例:# timecode format v2 0 40 80
时间码文件格式 v3¶
此格式中各行包含时长(秒数),后接(可选)帧率。 二者均可为浮点数。 如果未提供帧率,则采用默认的帧率。 对于音频,您应当让编解码器自行计算各帧的时间码。 这样您应当使用 0.0 作为帧率。 您可以使用 'gap' 关键词后接空隙时长在流中创建空隙。 以音频文件为例:# timecode format v3 assume 0.0 25.325 7.530,38.236 gap, 10.050 2.000,38.236
时间码文件格式 v4¶
此格式与 v2 格式相似。 唯一的不同在于时间码不必经过排序。 通常不应使用此格式。退出代码¶
•
0 --
此退出代码说明已成功完成混流。
•
1 -- 这种情况下 mkvmerge(1)
至少输出了一条警告信息,但混流并未因之中止。
警告信息以文字 '警告:'
为前缀。根据问题的不同,生成的文件可能是好的,也可能不是。
强烈建议用户检查警告信息以及生成的文件。
•
2 --
此退出代码用于错误发生之后。
mkvmerge(1)
在输出错误信息后即中断处理。错误信息可能是错误的命令行参数,也可能是损坏文件的读取/写入错误。
环境变量¶
内容将被当作通过
--debug
选项传递的参数对待。
MKVTOOLNIX_ENGAGE 及其缩写形式
MTX_ENGAGE
内容将被当作通过
--engage
选项传递的参数对待。
MKVTOOLNIX_OPTIONS 及其缩写形式
MTX_OPTIONS
内容将在空白处切割。最终得到的字符串部分将按命令行选项的格式处理。如果您需要传递特殊字符
(如空白) 则需要转义
(参见关于转义文本中特殊字符的段落)。
参阅¶
网络¶
最新版本总可以在 MKVToolNix 主页[4] 找到。作者¶
Moritz Bunkus <moritz@bunkus.org>开发者
备注¶
- 1.
- Matroska(TM) 网站
- 2.
- IANA 主页
- 3.
- Matroska(TM) 规范
- 4.
- MKVToolNix 主页
2012-05-27 | MKVToolNix 5.6.0 |