MKVMERGE(1) 使用者命令 MKVMERGE(1)

名称

mkvmerge - 合併多媒體串流到 Matroska(TM) 檔案中

概要

mkvmerge [全域選項] {-o 輸出} [選項1] {檔案1} [[選項2] {檔案2}] [@選項檔.json]

摘要說明

此程式可從多個輸入的媒體檔案,並加入其他(全部或部分)串流成為一個 Matroska(TM) 檔案;請見 Matroska(TM) 網站[1]。


重要

命令列的順序選項極為重要。如果您是本程式新手,請閱讀"選項順序" 段落。

全域選項

-v, --verbose

增強詳細程度。

-q, --quiet

停用狀態輸出。

-o, --output 檔名

寫入至檔案 檔名。如果使用分割功能,此參數的處理方式會有所不同。詳細資訊請參閱 --split 選項說明。

-w, --webm

创建 WebM 兼容文件。若输出文件的扩展名为 "webm" 则将自动打开本选项。此模式将实施一些限制。只允许使用编解码器为 VP8、VP9 的视频轨道及 Opus、Vorbis 的音频轨道。DocType 头部项目将改为 "webm"。

对于章节与标签,只允许使用一部分元素。mkvmerge(1) 将自动移除规范所不允许的元素。

--title 標題

设置整个生成文件的标题,比如电影名称。

--default-language 語言碼

设置默认语言代码,用于没有使用 --language 选项设置语言的轨道以及源容器未提供语言值的轨道。

默认的语言代码为「und」,即「undetermined」(未定)。

剪輯資訊處理(全域選項)

--segmentinfo 檔名.xml

从 XML 文件中读取剪辑信息。此文件可以包含剪辑族的 UID、剪辑的 UID、上一剪辑以及下一剪辑的 UID 元素。示例文件以及 DTD 已包含在 MKVToolNix 套件内。

關於詳細資訊請參閱下列 剪輯資訊 XML 檔 的章節。

--segment-uid SID1,SID2,...

设定要使用的剪辑 UID。这是个逗号分割的 128 位 UID 列表,UID 为通常的格式: 十六进制数字,"0x" 前缀可选,空格可选,但必须恰好有 32 个数位。

若 SID 以“=”开头,则其剩余部分将作为 Matroska 文件解析,将读取并使用该文件的剪辑 UID。

创建的每个文件都包含一个剪辑,每个剪辑有一个剪辑 UID。如果指定的剪辑 UID 比创建的剪辑多,则多余的 UID 将被忽略。如果指定的 UID 比创建的剪辑少,则将随机创建 UID。

章節與標籤處裡(全域選項)

--chapter-language 語言碼

设置各章节项的 ISO 639-2 语言代码。 默认为 'eng'。 详情参见下文中关于 章节 的段落。

此选项可用于简单章节文件与包含章节但不含章节语言信息的输入文件,如 MP4 与 OGM 文件。

本选项设置的语言也将用于 --generate-chapters 选项 所生成的章节。

--chapter-charset 字元集

设置简单章节文件的字符集,用于将其转换为 UTF-8。关于 mkvmerge(1) 如何转换不同字符集的说明,请参见关于文本文件与字符集的段落。

此开关亦可应用到从特定容器类型,如 Ogg/OGM 和 MP4 文件中复制而来的章节。 详情参见下文关于章节的段落。

--chapter-sync d[,o[/p]]

将章节的时间戳平移 d ms。您也可以使用 --sync 选项操作特殊轨道 ID -2 (参见 特殊轨道 ID 段落)。

o/p: 按 o/p 调整时间戳以修复线性偏移。如果省略 p 则默认为 1。op 均可为浮点数。

默认: 无手动同步校正 (与 d = 0o/p = 1.0 效果相同)。

此选项可以对同一输入文件多次使用,通过每次选择不同轨道 ID 分别应用到多个轨道。

--generate-chapters 模式

mkvmerge(1) 可以自动创建章节。目前支持下述两种模式:
•'when-appending'(追加文件时) – 文件开头为第一章,随后每追加一个文件便创建一个章节。

此模式同时支持「parts:」及「parts-frames:」两种切割模式。对于这些模式,每段新增的时间戳范围会生成一个新章节 (其起始时间戳带有「+」前缀)。


注意
mkvmerge(1) 要求存在视频轨或音频轨,方可确定新文件追加的时间。若混流一或多个视频轨,则将使用第一个轨道的参数。否则将使用第一个音频轨。
•'interval:指定时间' – 该模式根据 指定时间 所给出的固定时间间隔生成章节。参数的格式既可以为 HH:MM:SS.nnnnnnnnn 的形式,也可以为数字后接单位 's'、'ms' 或 'us'。

範例: --generate-chapters interval:45s

新章节的名称由选项 --generate-chapters-name-template 控制。语言通过 --chapter-language 设置,该选项必须出现在 --generate-chapters 之前。

--generate-chapters-name-template 範本

该选项设置 --generate-chapters 选项所生成的章节名称的名称模板。若未使用该选项,则将使用默认值 '第 <NUM:2> 章'。

模板中可以使用多个变量,这些变量将在生成章节时被实际值替代。字符串 '<NUM>' 将被章节号替代。字符串 '<START>' 将被章节的起始时间戳替代。

字串 「<FILE_NAME>」 與 「'<FILE_NAME_WITH_EXT>」 只會在為追加檔案產生章節時進行填充。 它們會被取代為追加檔案的檔名,前者不含副檔名,後者包含副檔名。 注意,只會插入檔案本身的名稱 (及副檔名),不會插入其目錄名稱或磁碟機代號。

您可以以 '<NUM:位数>' 的形式指定章节编号的最少位数,如 '<NUM:3>'。最终的数字,若其位数小于指定位数,则将在开头补零。

您可以以 <START:格式>的形式控制起始时间戳的格式。若未给出格式,则默认为 '%H:%M:%S'。有效的格式代码包括:

•%h – 時
•%H – 二位數小時
•%m – 分
•%M – 二位數分鐘
•%s – 秒
•%S – 二位數秒數
•%n – 小數點後九位的奈秒
•%<1-9>n – 纳秒,精度最高为九位 (如 %3n 代表三位)

--cue-chapter-name-format 格式

mkvmerge(1) 支持读取音频文件的 CUE 表单作为章节输入。CUE 表单中各索引项通常含有 PERFORMER(表演者)TITLE(标题) 项。mkvmerge(1) 使用这两个字串构建章节名称。使用此选项可设定构建名称所用的格式。

如果此选项未给定则 mkvmerge(1) 默认使用 '%p - %t' 格式 (表演者, 后接空格, 一个破折号, 另一个空格以及标题)。

如果给定了格式,则除了后续的标签字符以外都将被原样复制,标签字符将被进行下述替换:

%p 被当前项的 PERFORMER(表演者) 字符串替代,
%t 被当前项的 TITLE(标题) 字符串替代,
%n 被当前轨道编号替代,此外
%N 被当前轨道衬式编号(小于 10 则在前面加零)替代。

--chapters 檔名

从文件 文件名 读取章节信息。详情参阅下文关于 章节 的段落。

--global-tags 檔名

從檔案 檔名讀取全域標籤。關於詳細資訊請參閱下列 標籤 的章節。

一般輸出控制 (進階全域選項)

--track-order FID1:TID1,FID2:TID2,...

此选项更改输入文件创建时轨道的顺序。变量为逗号分隔的成对的 ID 列。每对先包含有文件 ID (FID1),即文件在命令行中的顺序,由 0 开始计数。第二个是在该文件中的轨道 ID (TID1)。 如果省去部分轨道的 ID,则这些轨道将在使用本选项给定的轨道创建之后创建。

If this option isn't given, tracks will be sorted by their type first & the order of their source file second. Video tracks come first followed by audio & subtitle tracks. Other rarely used track types come last.

--cluster-length 規格

限制每个簇中数据块的数量或数据的时长。指令 参数可以是无单位的数字 n,也可以是后缀有 'ms' 的 d

如果未使用数字,mkvmerge(1) 将在每个簇中放置最多 n 个数据块。最大块数是 65535。

如果数字 d 后缀有 'ms',mkvmerge(1) 将在每个簇中放置最多 d 毫秒的数据。d 的最小值是 '100ms',最大值是 '32000ms'。

mkvmerge(1) 默认每簇最多放置 65535 个数据块或 5000ms 的数据。

尝试定位到特定帧的程序只能直接定位到簇,然后需要读取整个簇(来完成定位)。因此创建较大的簇将导致定位不精确或缓慢。

--clusters-in-meta-seek

告诉 mkvmerge(1) 在文件末尾创建包含所有簇的元定位元素。参阅关于 Matroska(TM) 文件规划 的段落。

--timestamp-scale 因素

强制时间戳缩放系数为 系数。有效值域为 1000..10000000 或特殊值 -1

通常 mkvmerge(1) 会使用数值 1000000,这样时间戳和时长的精度为 1ms。对于不包含视频轨但含有至少一条音频轨的文件,mkvmerge(1) 将自动选择一个时间戳缩放系数以使各轨的音频采样精度相同。这将引起更大的额外开销,但将允许更为精确的定位与提取。

如果使用了特殊值 -1,即使有视频轨,mkvmerge(1) 也将使用采样精度。

--enable-durations

为所有块写入时长。这将增大文件尺寸,而且目前对播放器来说不提供任何额外的益处。

--no-cues

mkvmerge(1) 不要创建或写入 cue 索引( 可类比作 AVI 文件中的索引)。没有索引的 Matroska(TM) 文件也能播放,但定位可能不精确且缓慢。仅当您确实强求空间或用作测试时使用此选项。请参阅可为各输入文件指定的 --cues 选项。

--no-date

默认情况下,mkvmerge(1) 会将剪辑信息中的「date」字段设为混流开始的日期与时间。通过此选项可以完全不写入该字段。

--disable-lacing

禁用所有轨道的紧缩。这将增加文件大小,尤其是当有很多音频轨时。此选项不供日常之用。

--disable-track-statistics-tags

通常 mkvmerge(1) 会为每条轨道写入特定的统计信息标签。若这类标签已存在,则将被覆盖。这些标签包括 BPSDURATIONNUMBER_OF_BYTESNUMBER_OF_FRAMES

启用本选项可阻止 mkvmerge(1) 写入这些标签或修改现有的同名标签。

--disable-language-ietf

mkvmerge(1) 通常会在轨道头部、章节以及标签中同时写入传统语言元素以及全新的 IETF BCP 47 语言元素。若使用此选项,则只会写入传统元素。

--normalize-language-ietf 模式

将 IETF BCP 47 语言标签规范化,支持「canonical」(最简式)、「extlang」(扩展语言子标签形式)以及「off」关闭模式。默认(不添加本选项)会规范化至最简式。

最简式模式下,所有存在推荐值(preferred value)的语言子标签都会被替换为推荐值。依规范会执行下述转换: 「zh-yue-jyutping」 转换为 「yue-jyutping」,「fr-FX」 转换为 「fr-FR」。

扩展语言子标签形式在最简式的基础上生成。所有存在扩展语言子标签(extended language subtag)的主要语言(primary language)都被替换为子标签对应的前缀加上该子标签。该规则将 「yue-jyutping」 转回传统的 「zh-yue-jyutping」 形式,但 「fr-FR」 不会发生变化,因为 「fr」 不属于扩展语言子标签。

--stop-after-video-ends

Stops processing after the primary video track ends, discarding any remaining packets of other tracks.

檔案分割、連結、附加與串聯 (其他全域選項)

--split 規格

在给定尺寸或时间之后切割输出文件。请注意,各轨道只能在关键帧之前的地方切割开来。因此实际切割点可能比用户指定的稍稍靠后些。

目前 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' 的指定秒数时长的数字 dHH 为小时数,MM 为分钟数,SS 为秒数,而nnnnnnnnn 为纳秒数。 小时数与纳秒数均可省略。 小数点后最多可以有九位。 当前输出内容的时长达到此限制后将开始输出新的输出文件。

'duration:' 的首碼可因相容性理由省略。

3.指定時間戳記後分割。

語法: --split timestamps:A[,B[,C...]]

範例: --split timestamps:00:45:00.000,01:20:00.250,6300s

参数 ABC 等等的格式与按时长切割模式(见上文)所用的格式相同。时间戳表以逗号分隔。 输入流达到当前切割点的时间戳后将创建新的输出文件。然后将使用所给定的下一个切割点。

'timestamps:' 的首碼不可省略。

4.通过指定时间戳范围,保留特定部分,并丢弃其余部分。

語法: --split parts:起始1-結束1[,[+]起始2-結束2[,[+]起始3-結束3...]]

範例:

1.--split parts:00:01:20-00:02:45,00:05:50-00:10:30
2.--split parts:00:01:20-00:02:45,+00:05:50-00:10:30
3.--split parts:-00:02:45,00:05:50-

parts 模式可以告诉 mkvmerge(1) 保留特定时间戳范围,而丢弃其余部分。要保留的范围需要在 parts: 关键词后列出,以逗号隔开。各分段由起始及终止时间戳组成,格式与其他 --split 模式所能接受的相同 (如 00:01:20 与 80s 代表相同的时间戳)。

若起始时间戳留空,则默认为前一段的终止时间戳。若不存在前一段,则默认为文件开头 (参见示例 3)。

若终止时间戳留空,则默认为输入文件末尾,亦即告诉 mkvmerge(1) 保留其余部分 (参见示例 3)。

通常每一段都会写入新的文件。该行为也可以调整,以便将连续的分段写入同一个文件。要实现这种效果,用户可以在起始时间戳开头加上 + 前缀。这样可以告诉 mkvmerge(1) 不要创建新文件,而是将该分段写入与之前一段相同的文件当中。时间戳也会自动调整,确保即使输入文件中两分段不连续,输出文件中也不出现间隙。

例 1 中 mkvmerge(1) 会创建两个文件。第一个包含从 00:01:20 到 00:02:45 之间的内容。第二个文件包含从 00:05:50 到 00:10:30 之间的内容。

例 2 中 mkvmerge(1) 将只创建一个文件。该文件包含从 00:01:20 到 00:02:45 及从 00:05:50 到 00:10:30 的内容。

例 3 中 mkvmerge(1) 将创建两个文件。第一个包含从输入文件开头到 00:02:45 的内容。第二个文件将包含从 00:05:50 到输入文件结尾之间的内容。


注意
请注意,mkvmerge(1) 只在关键帧位置决定是否切割。每段切割区域的起始点与结束点均为关键帧。因此即使结束时间戳介于两个关键帧之间,mkvmerge(1) 也将继续输出帧,直到下一关键帧为止(不包括)。
5.通过指定帧/场序号范围,保留特定部分,并丢弃其余部分。

語法: --split parts-frames:start1-end1[,[+]start2-end2[,[+]start3-end3...]]

範例:

1.--split parts-frames:137-258,548-1211
2.--split parts-frames:733-912,+1592-2730
3.--split parts-frames:-430,2512-

parts-frames 模式可以告诉 mkvmerge(1) 保留特定帧/场序号范围,而丢弃其余部分。要保留的范围需要在 parts-frames: 关键词后列出,以逗号隔开。各分段由起始及终止帧/场序号组成。序号从 1 开始计数。

若起始序号留空,则默认为前一段的终止序号。若不存在前一段,则默认为文件开头 (参见示例 3)。

若终止序号留空,则默认为文件末尾,亦即告诉 mkvmerge(1) 保留其余部分 (参见示例 3)。

通常每一段都会写入新的文件。该行为也可以调整,以便将连续的分段写入同一个文件。要实现这种效果,用户可以在起始序号开头加上 + 前缀。这样可以告诉 mkvmerge(1) 不要创建新文件,而是将该分段写入与之前一段相同的文件当中。时间戳也会自动调整,确保即使输入文件中两分段不连续,输出文件中也不出现间隙。


注意
请注意,mkvmerge(1) 只在关键帧位置决定是否切割。每段切割区域的起始点与结束点均为关键帧。因此即使结束帧/场序号介于两个关键帧之间,mkvmerge(1) 也将继续输出帧,直到下一关键帧为止(不包括)。
例 1 中 mkvmerge(1) 会创建两个文件。第一个包含从第 137 帧或之后的第一个关键帧,到第 258 帧或之后的第一个关键帧(但不含该关键帧)之间的内容。第二个文件包含第 548 到 1211 帧之间的内容。

例 2 中 mkvmerge(1) 将只创建一个文件。该文件包含从 733 到 912 及从 1592 到 2730 的内容。

例 3 中 mkvmerge(1) 将创建两个文件。第一个包含输入文件开头到 430 的内容。第二个文件将包含从 2512 到输入文件结尾之间的内容。

该模式只考虑输出的第一条视频轨道。 如果没有输出视频轨道,则将不会进行切割操作。


注意
通过本参数给出的数字将根据输出的 Matroska(TM) 区块解析。 单个 Matroska(TM) 区块可包含完整的一帧 (对于逐行扫描的内容) 或单场 (对于隔行扫描的内容)。 mkvmerge 不区分两者,它直接统计区块数目。 例如: 假设某人希望在隔行扫描的第 25 个完整帧之后切割,则应使用 50 (每帧对应两场) 作为切割点。
6.在指定影格數/圖場數後分割。

語法: --split frames:A[,B[,C...]]

示例: --split frames:120,237,891

参数 ABC 等等必须全为正整数。编号从 1 开始。 帧/场编号列表以逗号分隔。 输入流达到当前切割点的帧/场编号后将创建新的输出文件。然后将使用所给定的下一个切割点。

'frames:' 的首碼不可省略。

该模式只考虑输出的第一条视频轨道。 如果没有输出视频轨道,则将不会进行切割操作。


注意
通过本参数给出的数字将根据输出的 Matroska(TM) 区块解析。 单个 Matroska(TM) 区块可包含完整的一帧 (对于逐行扫描的内容) 或单场 (对于隔行扫描的内容)。 mkvmerge 不区分两者,它直接统计区块数目。 例如: 假设某人希望在隔行扫描的第 25 个完整帧之后切割,则应使用 50 (每帧对应两场) 作为切割点。
7.在指定的章節前分割。

語法: --split chapters:all 或 --split chapters:A[,B[,C...]]

範例: --split chapters:5,8

参数 ABC 等等必须全为正整数。编号从 1 开始。 章节编号列表以逗号分隔。 切割将在时间戳等于或大于所列编号对应章节的起始时间戳的首个关键帧之前进行。从 0s 开始的章节将不作考虑,并不作提示,直接丢弃。

可以使用關鍵字 all 取代手動輸入所有章節編號。

'chapters:' 首碼的不可省略。


注意
Matroska(TM) 文件格式支持任意深度嵌套的章节结构,称为“版本条目”与“章节单位”。 但该模式仅考虑所有版本条目中最顶层的章节。

此切割模式下输出文件名将以不同于常用操作的方式对待。可能会含有类似 printf 中 '%d' 的表达式,包括可选的字段宽度,如 '%02d'。如果含有上述表达式,当前文件序号将按相应格式生成,然后插入到文件名中的相应位置。 如果没有此类匹配模式,则假定匹配模式为在文件扩展名之前插入 '-%03d': '-o 输出.mkv' 将生成 '输出-001.mkv' 这样的一系列文件。如果没有扩展名,'-%03d' 将被追加在文件名之后。

也可以选用「%c」,它将被替换为文件中首个章节的名称。注意:当「%c」存在时,不会再自动添加「-%03d」。

--link

切割输出文件时连接文件。详情请参阅下文 文件链接 段落。

--link-to-previous 剪輯-UID

连接第一个输出文件到指定 剪辑-UID 参数对应的剪辑。详情请参阅下文 文件链接 段落。

若 SID 以“=”开头,则其剩余部分将作为 Matroska 文件解析,将读取并使用该文件的剪辑 UID。

--link-to-next 剪輯-UID

连接最后一个输出文件到指定 剪辑-UID 参数对应的剪辑。详情请参阅下文 文件链接 段落。

若 SID 以“=”开头,则其剩余部分将作为 Matroska 文件解析,将读取并使用该文件的剪辑 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

[ 檔案1 檔案2 ]

如果方括号内包含多个文件名,则从第二个文件开始的所有文件都将追加合并到括号中第一个文件后面。

这是用“+”连接文件名的另一种语法。因此下述两条命令是等效的:

$ mkvmerge -o 完整.mkv 文件1.mkv + 文件2.mkv
$ mkvmerge -o 完整.mkv '[' 文件1.mkv 文件2.mkv ']'

=

对特定类型的文件 (MPEG 节目流,即 VOB 文件) mkvmerge(1) 通常会去输入文件所在的目录寻找是否存在基本文件名一致、仅编号存在差异的文件 (例如「VTS_01_1.VOB」「VTS_01_2.VOB」「VTS_01_3.VOB」等) 并将所有文件视为互相串联的单个大文件。此选项——单个「=」——要求 mkvmerge 不要去寻找其他文件。

'=' 也可以放在下一个文件名的前面。因此以下两条命令等效:

$ mkvmerge -o 完整.mkv = 文件1.vob
$ mkvmerge -o 完整.mkv =文件1.vob

( 檔案1 檔案2 )

如果一對括號中包含多個檔案名稱,這些檔案視為由單一大型檔案組成,而該大型檔案內容的組成是由一個檔案接著一個檔案的方式形成。

该功能可用于如 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 类型对附件来说是必需的。

如果没有指定附件的 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) 檔中提取附加檔。

--enable-legacy-font-mime-types

对于特定类型的字体附件,使用传统的 MIME 类型。例如,TrueType 字体的类型将标注为「application/x-truetype-font」而非「fonts/ttf」。

这将同时影响未手动指定 MIME 类型的新附件,以及现有的字体附件,其已存在的 MIME 类型将被重新映射至传统类型。

受影响的 MIME 类型如下:「font/sfnt」「font/ttf」「font/collection」将全部映射至「application/x-truetype-fonts」,「 font/otf」将被映射至「application/vnd.ms-opentype」。

可用於每個輸入檔的選項

-a, --audio-tracks [!]n,m,...

复制 nm 等音频轨。数字是可以通过 --identify 开关获取的轨道 ID。他们不只是简单的轨道序号(参见 轨道 ID段落)。默认: 复制所有音频轨道。

除轨道 ID 以外,您还可以提供 ISO 639-2 语言代码。仅当输入文件的轨道包含语言标签时可用。

預設: 複製此類型的所有軌道。

若 ID 以 ! 开头,则其意义相反: 复制该类的所有轨道,除了 ! 后面所列出的轨道。

-d, --video-tracks [!]n,m,...

复制 nm 等视频轨。数字是可以通过 --identify 开关获取的轨道 ID。他们不只是简单的轨道序号(参见 轨道 ID段落)。默认: 复制所有视频轨道。

除轨道 ID 以外,您还可以提供 ISO 639-2 语言代码。仅当输入文件的轨道包含语言标签时可用。

若 ID 以 ! 开头,则其意义相反: 复制该类的所有轨道,除了 ! 后面所列出的轨道。

-s, --subtitle-tracks [!]n,m,...

复制 nm 等字幕轨。数字是可以通过 --identify 开关获取的轨道 ID。他们不只是简单的轨道序号(参见 轨道 ID段落)。默认: 复制所有字幕轨道。

除轨道 ID 以外,您还可以提供 ISO 639-2 语言代码。仅当输入文件的轨道包含语言标签时可用。

若 ID 以 ! 开头,则其意义相反: 复制该类的所有轨道,除了 ! 后面所列出的轨道。

-b, --button-tracks [!]n,m,...

复制 nm 等按钮轨。数字是可以通过 --identify 开关获取的轨道 ID。他们不只是简单的轨道序号(参见 轨道 ID段落)。默认: 复制所有按钮轨道。

除轨道 ID 以外,您还可以提供 ISO 639-2 语言代码。仅当输入文件的轨道包含语言标签时可用。

若 ID 以 ! 开头,则其意义相反: 复制该类的所有轨道,除了 ! 后面所列出的轨道。

--track-tags [!]n,m,...

复制 nm 等轨道的标签。数字是可以通过 --identify 开关获取的轨道 ID。他们不只是简单的轨道序号(参见 轨道 ID段落)。默认: 复制所有轨道的标签。

如果 ID 以 ! 作为前缀,则含义相反: 复制除了列在 ! 后面的 ID 以外的所有轨道。

-m, --attachments [!]n[:all|first],m[:all|first],...

复制 ID 为 nm 等的附件到所有或者仅首个输出文件中。各 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

不要從此檔案複製全域標籤。

-y, --sync TID:d[,o[/p]]

将 id 为 TID 的轨道的时间戳按 d ms 进行调整。轨道 ID 与 --identify 所给出的相同 (参见 轨道 ID 段落)。

o/p: 按 o/p 调整时间戳以修复线性偏移。如果省略 p 则默认为 1。op 均可为浮点数。

默认: 无手动同步校正 (与 d = 0o/p = 1.0 效果相同)。

此选项可以对同一输入文件多次使用,通过每次选择不同轨道 ID 分别应用到多个轨道。

--cues TID:none|iframes|all

控制为指定轨道 (参阅 轨道 ID 段落) 创建何种 cue 索引。'none(无)' 将阻止 cue 索引的创建。 而 'iframes(仅 i 帧)' 表示仅将没有前后参考的块 ( = 视频轨道中的 I 帧) 置于 cue 索引项中。'all(全部)' 将使 mkvmerge(1) 为所有区块创建索引,会使生成的文件非常大。

默认值为 'iframes(仅 i 帧)'(视频及字幕轨道)或 'none(无)'(音频轨道)。参见 --no-cues 选项,后者可阻止 cue 条目的创建,无论是否使用了 --cues 选项。

此选项可以对同一输入文件多次使用,通过每次选择不同轨道 ID 分别应用到多个轨道。

--default-track-flag TID[:bool]

若可选参数「布尔值」已设为 1 或不存在该数值,则为指定轨道 (参见「轨道 ID」段落) 设置「默认轨」标记。若输入容器未提供此信息,且用户未通过选项参数指定,即会设置该标记。

如果用户在播放时不明确选择一条轨道,播放器应选择已设有「默认轨」标记的轨道,同时也应考虑用户偏好设置,例如用户偏好的语言。

此选项可以对同一输入文件多次使用,通过每次选择不同轨道 ID 分别应用到多个轨道。

--track-enabled-flag TID[:布尔值]

将指定轨道的「轨道启用」标记 (参阅「轨道 ID」段落) 设为指定值 布尔值 (0 或1; 若不指定,则默认为 1)。 只要没有特别指定选项值,且输入容器也未提供此类信息,轨道均默认为启用状态。

只有设置了「轨道启用」标记的轨道才应作为播放器考虑播放的对象。

此选项可以对同一输入文件多次使用,通过每次选择不同轨道 ID 分别应用到多个轨道。

--forced-display-flag TID[:bool]

若可选参数「 布尔值」已设为 1 或不存在该数值,则为指定轨道设置「强制显示」标记 (参阅「轨道 ID」段落)。 此选项适用于包含屏幕显示文字或外语对白翻译的轨道。

此选项可以对同一输入文件多次使用,通过每次选择不同轨道 ID 分别应用到多个轨道。

--hearing-impaired-flag TID[:布尔值]

若可选参数「布尔值」已设为 1 或不存在该数值,则为指定轨道设置「听觉障碍」标记 (参阅「轨道 ID」段落)。 此标记适用于适合听觉障碍人士使用的轨道。

此选项可以对同一输入文件多次使用,通过每次选择不同轨道 ID 分别应用到多个轨道。

--visual-impaired-flag TID[:布尔值]

若可选参数「布尔值」已设为 1 或不存在该数值,则为指定轨道设置「视觉障碍」标记 (参阅「轨道 ID」段落)。 此标记适用于适合视觉障碍人士使用的轨道。

此选项可以对同一输入文件多次使用,通过每次选择不同轨道 ID 分别应用到多个轨道。

--text-descriptions-flag TID[:布尔值]

若可选参数「布尔值」已设为 1 或不存在该数值,则为指定轨道设置「文字描述」标记 (参阅「轨道 ID」段落)。 此标记适用于包含对视频内容的文字描述的轨道,它们适合视觉障碍人士通过文本转语音系统播放。

此选项可以对同一输入文件多次使用,通过每次选择不同轨道 ID 分别应用到多个轨道。

--original-flag TID[:布尔值]

若可选参数「布尔值」已设为 1 或不存在该数值,则为指定轨道设置「原始语言」标记 (参阅「轨道 ID」段落)。 此标记适用于与内容原始语言一致 (而非翻译) 的轨道。

此选项可以对同一输入文件多次使用,通过每次选择不同轨道 ID 分别应用到多个轨道。

--commentary-flag TID[:布尔值]

若可选参数「布尔值」已设为 1 或不存在该数值,则为指定轨道设置「评论」标记 (参阅「轨道 ID」段落)。 此标记适用于包含评论内容的轨道。

此选项可以对同一输入文件多次使用,通过每次选择不同轨道 ID 分别应用到多个轨道。

--track-name TID:名稱

給指定軌道 (請參閱 軌道 ID 章節) 的名稱設定為 檔名

--language TID:語言

为指定轨道 (参见 轨道 ID) 设置语言。允许使用 ISO 639-2 语言代码与 ISO 639-1 国家代码。国家代码将被自动转换为语言代码。 可以使用 --list-languages 选项列出所有语言以及它们的 ISO 639-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。

--audio-emphasis TID:n|symbolic-name

Sets the emphasis for the audio track with the track ID TID. The mode can either be a number n (certain values between 0 and 16) or a symbolic name. All valid numbers & symbolic names can be listed with the --list-audio-emphasis option.

--reduce-to-core TID

有些音频编码的核心是有损的,但提供了可选的扩展来实现无损解码。该选项告诉 mkvmerge(1) 只复制核心部分,而不复制扩展部分。默认情况下,mkvmerge(1) 会复制全部内容。

目前只有 DTS 轨道受此选项影响。嵌入 AC-3 核心的 TrueHD 轨道以两个轨道的形式呈现,用户可以选择复制哪个轨道。DTS 无法采用这种方案,因为 HD 扩展部分不能单独解码 – 而 TrueHD 数据可以。

--remove-dialog-normalization-gain TID

部分音频编码包含告知解码器/播放器如何应用音量增益(通常是降低)的头部字段,从而实现对白正规化。此选项可让 mkvmerge(1)  修改相应头部字段,移除或减小增益。

目前只有 AC-3、DTS 和 TrueHD 軌道受此選項影響。

--timestamps TID:檔名

文件名 读取要应用到指定轨道 ID 的时间戳。 这些时间戳将强制覆盖 mkvmerge(1) 默认计算出的时间戳。参阅关于 外部时间戳文件 的章节。

--default-duration TID:x

强制指定轨道的默认时长为指定数值。 将同时修改轨道的时间戳以匹配该默认时长。 变量 x 必须有 's', 'ms', 'us', 'ns', 'fps', 'p' 或 'i' 作为后缀,分别以秒、毫秒、微秒、纳秒、“帧每秒”、“逐行帧每秒”或“隔行帧每秒”为单位指定默认时长。数字 x 本身可为浮点数或分数。

如果未强制指定默认时长,mkvmerge 将尝试继承容器中(及/或特定轨道类型,如 AVC/H.264 或 MPEG-2 已编码的位流中)该轨道的默认时长。

此选项也可用于在不使用外部时间戳文件的情况下更改视频轨的 FPS(帧率)。

--fix-bitstream-timing-information TID[:0|1]

通常 mkvmerge(1) 不会更改视频位流中存储的时间同步信息 (帧/场速率)。本选项可调整此信息,使之与容器的时间同步信息匹配。容器时间同步信息可从多个来源得到: 命令行指定 (参见 --default-duration 选项)、源容器或从位流得出。

注意
目前仅完成对 AVC/H.264 视频轨的实现。

--compression TID:n

选择用于轨道的压缩算法。请注意,播放器也需要支持该算法才能正常播放。有效的值有 'none(不压缩)'、'zlib' 以及 'mpeg4_p2'/'mpeg4p2'。

压缩方式 'mpeg4_p2'/'mpeg4p2' 是一种称为 '去头' 的特殊压缩方式,只对 MPEG4 part 2 视频轨可用。

部分字幕类型的默认压缩算法为 'zlib'。该算法也是大多数(如果不是所有)回放应用程序所支持的算法。无法保证对其他压缩算法的支持('none(不压缩)' 除外)。

僅適用於視訊軌的選項

-f, --fourcc TID:FourCC

强制 FourCC 为指定值。仅对 '微软兼容模式' 的视频轨有效。

--display-dimensions TID:寬x高

Matroska(TM) 文件含有两个设定播放器回放时应当将画面缩放到的显示属性值: 显示宽度与显示高度。 可以使用本选项设定这些数值,如 '1:640x480'。

指定所用数值的其他方法是使用 --aspect-ratio--aspect-ratio-factor 选项 (参见下文)。 这些选项是互相独立的。

--aspect-ratio TID:比例|寬度/高度

Matroska(TM) 文件含有两个设定播放器回放时应当将画面缩放到的显示属性值: 显示宽度与显示高度。 通过本选项 mkvmerge(1) 可自动根据画面原始宽高和本选项给定的宽高比计算出显示宽度和显示高度。 宽高比可以以浮点数 宽高比 或分数 '宽度/高度' 的形式给出,如 '16/9'。

指定所用数值的其他方法是使用 --aspect-ratio-factor--display-dimensions 选项 (参见上下文)。这些选项相互独立。

--aspect-ratio-factor TID:係數|n/d

另一种设置宽高比的方法是指定一个 系数。将将原始宽高比与 系数 相乘后用作目标宽高比。

指定所用数值的其他方法是使用 --aspect-ratio--display-dimensions 选项 (参见上文)。这些选项互相独立。

--cropping TID:l至左,至頂,至右,至底

将视频轨道的像素裁减参数设为指定数值。

--color-matrix-coefficients TID:n

设置视频从红绿蓝三原色衍生出亮度及色度值所用的矩阵系数。参数 n 是范围从 010 的整数。

有效值其含義為:

0: GBR, 1: BT709, 2: unspecified, 3: reserved, 4: FCC, 5: BT470BG, 6: SMPTE 170M, 7: SMPTE 240M, 8: YCOCG, 9: BT2020 非恒定亮度, 10: BT2020 恒定亮度

--color-bits-per-channel TID:n

设置颜色通道编码位数。数值 0 表示位数未指定。

--chroma-subsample TID:水平,垂直

对 Cr 与 Cb 通道中未移除的像素,水平/垂直方向需要移除的像素数量。

例如: 对于色度抽样为 4:2:0 的视频,该参数应设为 TID:1,1

--cb-subsample TID:水平,垂直

对 Cb 通道中未移除的像素,水平/垂直方向需要移除的像素数量。该数值将与 --chroma-subsample 相加。

例如: 对于色度抽样为 4:2:1 的视频,参数 --chroma-subsample 应设为 TID:1,0,Cb 抽样应设为 TID:1,0

--chroma-siting TID:水平,垂直

设置色度在水平/垂直方向上如何抽样 (0: 未指定, 1: 顶部/左侧合并, 2: 对半)。

--color-range TID:n

设置色域裁剪 (0: 未指定, 1: 广播色域, 2: 完整色域 (无裁剪), 3: 由 MatrixCoefficients/TransferCharacteristics 指定)。

--color-transfer-characteristics TID:n

視訊的傳輸類型。

有效值其含義為:

0: 保留, 1: ITU-R BT.709, 2: unspecified, 3: 保留, 4: gamma 2.2 曲线, 5: gamma 2.8 曲线, 6: SMPTE 170M, 7: SMPTE 240M, 8: 线性, 9: 对数, 10: 对数平方根, 11: IEC 61966-2-4, 12: ITU-R BT.1361 extended color gamut, 13: IEC 61966-2-1, 14: ITU-R BT.2020 10 bit, 15: ITU-R BT.2020 12 bit, 16: SMPTE ST 2084, 17: SMPTE ST 428-1; 18: ARIB STD-B67 (HLG)

--color-primaries TID:n

設定視訊的主要色彩。

有效值其含義為:

0: 保留, 1: ITU-R BT.709, 2: 未指定, 3: 保留, 4: ITU-R BT.470M, 5: ITU-R BT.470BG, 6: SMPTE 170M, 7: SMPTE 240M, 8: FILM, 9: ITU-R BT.2020, 10: SMPTE ST 428-1, 22: JEDEC P22 磷光体

--max-content-light TID:n

设置单个像素的最高亮度 (Maximum Content Light Level 最大内容亮度级别),单位为坎德拉每平方米 (cd/m²)。数值 n 应为非负整数。

--max-frame-light TID:n

设置单个完整帧的最高亮度 (Maximum Frame-Average Light Level 最大帧平均亮度级别),单位为坎德拉每平方米 (cd/m²)。数值 n 应为非负整数。

--chromaticity-coordinates TID:red-x,red-y,green-x,green-y,blue-x,blue-y

設定由 CIE 1931 定義的紅/綠/藍色度座標。

--white-color-coordinates TID:x,y

設定由 CIE 1931 定義的白色色度座標。

--max-luminance TID:浮點數

设置最高亮度,单位为坎德拉每平方米 (cd/m²)。数值应小于 9999.99。

--min-luminance TID:浮點數

设置最低亮度,单位为坎德拉每平方米 (cd/m²)。数值应小于 999.9999。

--projection-type TID:方式

设置要使用的视频投影方式。有效值包括:0 (方形投影), 1 (等距圆柱投影), 2 (立方面投影), 3 (网状投影)。

--projection-private TID:資料

设置仅用于特定投影方式的私有数据。数据格式为十六进制数字,可以有 "0x" 前缀,可以有空格。

--projection-pose-yaw TID:f漂浮點

指定繞 Z 軸旋轉至視訊外觀比。

--projection-pose-pitch TID:漂浮點

指定繞 X 軸旋轉至視訊外觀比。

--projection-pose-roll TID:漂浮點

指定繞 Y 軸旋轉至視訊外觀比。

--field-order TID:n

设置轨道 ID 为 TID 的视频轨道的场序。场序必须为以下数字之一:

0: 逐行扫描; 1: 隔行扫描,顶场先显示,顶场先存储; 2: 未定场序; 6: 隔行扫描,底场先显示,底场先存储; 9: 隔行扫描,底场先显示,顶场先存储; 14: 隔行扫描,顶场先显示,底场先存储

--stereo-mode TID:n|symbolic-name

Sets the stereo mode for the video track with the track ID TID. The mode can either be a number n between 0 and 14 or a symbolic name. All valid numbers & names can be listed with the --list-stereo-modes option.

僅適用於字幕軌的選項

--sub-charset TID:字元集

指定轨道 ID 对应的字符集,用于将字幕转换为 UTF-8 编码。如果未指定字符集,则将根据当前区域设置推算字符集。注意,对于从 Matroska(TM) 文件或 Kate 流中读取的字幕不必指定字符集,因为这些字幕总是以 UTF-8 编码存储。关于 mkvmerge(1) 如何转换不同字符集的说明,请参见关于文本文件与字符集的段落。

此选项可以对同一输入文件多次使用,通过每次选择不同轨道 ID 分别应用到多个轨道。

其他選項

-i, --identify 檔名

将使 mkvmerge(1) 探查单个文件并报告其类型、文件中包含的轨道及其轨道 ID。如果使用了本选项,唯一可用的其他选项就是文件名。

结果的输出格式可以通过 --identification-format 选项修改。

-J 檔名

這是 "--identification-format json --identify 檔名" 的簡便命名。

-F, --identification-format 格式

决定 --identify 选项使用的输出格式。支持下列格式: text (文本,未使用该选项时的默认值) 以及 json。
1.text 格式简短且适合人类阅读。每项 (容器、轨道、附件等) 占一行。

该格式不应该用来解析。输出内容会翻译为 mkvmerge(1) 所使用的语言 (参见 --ui-language)。

2.json 格式输出机器可读的 JSON 表达式。此格式遵循该文件所描述的 JSON 规范:

mkvmerge-identification-output-schema-v18.json[3]

所有版本的 JSON 规范可在线获取,也可在发布的源码压缩包中找到。

--probe-range-percentage 百分比

部分文件类型,如 MPEG 节目流及传输流 (.vob、.m2ts),需要解析一定量的数据,方可侦测出文件中所包含的所有轨道。该数据量为输入文件大小的 0.3% 或 10 MB,取其中较高者。

如果已知轨道存在,但未能找到,可以通过本选项更改探测百分比。 最小值 10 MB 为内置参数,无法更改。

--list-audio-emphasis

Lists all valid numbers & their corresponding symbolic names for the --audio-emphasis option.

--list-languages

列出所有语言及其 ISO 639-2 代码,这些代码可以在 --language 选项中使用。

--list-stereo-modes

Lists all valid numbers & their corresponding symbolic names for the --stereo-mode option.

-l, --list-types

列出已支援的輸入檔案類型。

--priority 優先順序

设置 mkvmerge(1) 运行时的进程优先级。有效的值为 'lowest(最低)', 'lower(较低)', 'normal(普通)', 'higher(较高)' 与 'highest(最高)'。如果未予设定,则使用 'normal(普通优先级)'。在 类-Unix 系统中 mkvmerge(1) 将使用 nice(2) 功能。因此只有超级用户才能使用 'higher(较高优先级)' 与 'highest(最高优先级)'。对于 Windows 用户来说所有值都可用。

选择'lowest' 不仅使用尽可能低的进程优先级,还会让 mkvmerge(1) 选择空闲 I/O 优先级。

--command-line-charset 字元集

設定在命令列顯示的字串字元集,以轉換為其他字元集。預設為目前系統所在位置指定的字元集。此設置適用於以下選項的參數:--title, --track-name and --attachment-description

--output-charset 字元集

設定要轉換為輸出字串的字元集。預設為目前系統所在位置指定的字元集。

-r, --redirect-output 檔名

將所有訊息寫入到檔案 檔名 而不是命令列。儘管使用輸出重新導向可以輕鬆完成此操作,但在某些情況下需要使用此選項: 當終端在將輸出寫入文件之前重新解釋(覆蓋)輸出時。 優先使用通過 --output-charset 設定字元集。

--flush-on-close

關閉已開啟寫入的檔案時,告訴程式清理所有在記憶體中的資料。這可以防止因斷電造成的資料遺失或避免作業系統或驅動程式造成的某些問題。缺點是執行合併工具會花費較久個時間,因為 mkvmerge 需要等待所有資料已寫入至儲存空間後,才會結束。請參閱 MKVToolNix 錯誤追蹤上的 #2469 和 #2480 問題,以便深入瞭解其優缺點。

--ui-language 語言碼

強制使用語言 編碼 對應的的翻譯(例如 'zh_TW' 為臺灣正體中文翻譯)。 在編碼欄位中輸入'list' 讓程式輸出時使用可用的對應翻譯清單。

--abort-on-warnings

發出第一個警告後,終止程式。程式的結束碼為 1 。

--deterministic 种子值

启用完全确定模式。若使用的 mkvmerge(1) 版本相同,且输入文件、选项参数及种子值完全相同,则会创建二进制层面完全一致的文件。注意,此模式下不会写入剪辑信息的「date」字段。

种子值可以是任意字符串,并不非得是数字。

需要满足下列条件才能确保生成二进制层面完全相同的文件:

1.相同版本的 mkvmerge(1),且编译时使用相同版本的 ibEBML 及 libMatroska。
2.所用的输入文件在二进制层面完全一致。
3.所使用的命令行选项及顺序完全相同 (唯一的例外是「--output ...」)。

使用其他版本的 mkvmerge(1) 或其他命令行选项也有可能输出完全一致的文件,但作者不作任何保证。

--debug 主題

針對特定功能開啟除錯。此選項適用於開發者。

--engage 功能

開啟實驗中功能。 透過mkvmerge --engage list啟用可用的列表。這些功能不會在正常情況下使用。

--gui-mode

開啟 GUI 模式。在這種模式中,可能會輸出特殊格式的行數,可以呈現控制的 GUI 發生什麼事。這些訊息會以 '#GUI#訊息'呈現。訊息可能包含機碼/值,例如 '#GUI#訊息#機碼1=值1#機碼2=值2...'。 無論是訊息或是機碼都不會轉為譯文,而且永遠使用 *英語* 輸出。

@options-file.json

檔案選項檔讀取其他命令列引數。更多資訊請參閱 選項檔案 章節。

--capabilities

列出编译时附加的可选功能并退出。输出信息的第一行是版本信息。接下来的每行包含一个单词,各单词的出现意味着编译时附加了相应功能。这些功能包括:
•'FLAC' -- 读取原始 FLAC 文件,以及处理其他容器中的 FLAC 轨道,例如 Ogg(TM) 或 Matroska(TM) 容器中的。

-h, --help

顯示使用方式並退出。

-V, --version

顯示版本資訊並離開。

使用方式

用户可以选择各文件中 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 '其他东东'

下面的例子中可以两次使用 --language 选项,因为在不同范围内使用。尽管应用到同一轨道 ID,但应用到的是不同的输入文件,因此属于不同范围:

$ 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

如果您的 AVI 文件已经含有一条音频轨,则将同时复制该轨道(只要 mkvmerge(1) 支持该音频格式)。要避免此状况,只需要这样

$ mkvmerge -o 我的有聲影片.mkv -A 我的影片.avi 我的影片.ogg

又过了几分钟,您又制作了另一条音频轨,如 导演评论或者是另一种语言的配音,您生成的文件名是 '我影片的另一音轨.wav'。 再进行一次编码操作,然后将其合并:

$ oggenc -q4 -o我影片的另一音轨 我影片的另一音轨.wav
$ mkvmerge -o 影片-成品.mkv 我的有声影片.mkv 我影片的另一音轨.ogg

照下面的做法结果相同

$ mkvmerge -o 我的影片-成品.mkv -A 我的影片.avi 我的影片.ogg 我影片的另一音轨.ogg

现在开启 mplayer(TM) 尽情享受吧。如果您有多条音频轨(或者甚至是视频轨),那么您可以通过 '-vid' 与 '-aid' 选项告诉 mplayer(TM) 应该播放哪些轨道。这些是基础功能,不区分视频与音频。

如果您需要同步音频轨,会非常容易。首先找清 Vorbis 轨道的轨道 ID

$ mkvmerge --identify 错开了的.ogg

現在可以在以下命令列使用該 ID :

$ mkvmerge -o 同步了的.mkv -A 源.avi -y 12345:200 错开了的.ogg

这将在 '错开了的.ogg' 中 ID 为 12345 的音频轨的开头添加 200ms 的静音。

有些影片在开头同步正常,但音画同步会慢慢偏离开。对此类影片您可以指定延时系数,该系数将被应用到所有时间戳 -- 不添加或移除任何数据。因此如果您所设定的系数过大或过小会造成很糟糕的结果。例如我转码的一期节目有 77340 帧长,在结尾处有 0.2 秒的同步偏离。在 29.97fps 帧率下大约是每 6 帧错开 0.2 秒。于是我这样操作

$ mkvmerge -o 同步了的.mkv -y 23456:0,77346/77340 错开了的.mkv

結果正常。

同步选项对字幕同样起作用。

对于文本字幕,您既可以选用一些 Windows 软件(如 SubRipper(TM))或 'contrib/subrip' 目录 transcode(1) 的源码中的 subrip(TM) 包。大体过程是这样的:

1.从输入文件中提取原始字幕流:
$ tccat -i /DVD/文件/的/路径/ -T 1 -L | tcextract -x ps1 -t vob -a 0x20 | subtitle2pgm -o 我的影片
2.使用 gocr 将生成的 PGM 图像转为文本:
$ pgm2txt mymovie
3.对生成的文本文件进行拼写检查:
$ ispell -d american *txt
4.将文本文件转为 SRT 文件:
$ srttool -s -w -i mymovie.srtx -o mymovie.srt

这样生成的文件可用作 mkvmerge(1) 的输入文件:

$ mkvmerge -o 我的影片.mkv 我的影片.avi 我的影片.srt

如果您希望为指定轨道指定语言,这将很容易完成。首先找到您所需语言的 ISO 639-2 代码。mkvmerge(1) 会为您列出所有代码:

$ mkvmerge --list-languages

在列表中找到您所需的语言。假定您已在 Matroska(TM) 文件中放入两条音轨,并希望设置它们的语言代码,两条轨道的轨道 ID 为 2 和 3。可以这样操作

$ mkvmerge -o 含语言代码的.mkv --language 2:ger --language 3:dut 无语言代码的.mkv

如您所见,--language 开关可多次使用。

或许您还想让荷兰语作为默认语言。您还有其他语言的字幕,如英语和法语的,并希望让播放器默认显示法语字幕。可以这样操作

$ mkvmerge -o 含语言代码的文件.mkv --language 2:ger --language 3:dut --default-track-flag 3 无语言代码的文件.mkv --language 0:eng 英文字幕.srt --default-track-flag 0 --language 0:fre 法文字幕.srt

如果您在 mkvinfo(1) 的输出信息中没找到您指定的语言或默认轨标记,请参阅关于 默认值 的段落。

关闭针对某输入文件的压缩。

$ mkvmerge -o 无压缩.mkv --compression -1:none 我的影片.avi --compression -1:none 我的影片.srt

軌道 ID

標準軌道 ID

mkvmerge(1) 的一些选项要求提供轨道 ID 以指定应应用到的轨道。 当读取器分离当前输入文件时,或者使用 --identify 选项调用 mkvmerge(1) 时这些轨道 ID 会被显示出来。此类输出的一个示例:

$ mkvmerge -i v.mkv
文件 'v.mkv': 容器: Matroska(TM)
轨道 ID 0: 视频 (V_MS/VFW/FOURCC, DIV3)
轨道 ID 1: 音频 (A_MPEG/L3)

不要混淆输出 MKV 文件时所分派的轨道 ID与输入文件的轨道 ID。只有输入文件的轨道 ID 可用于需要轨道 ID 值的选项。

还需注意,每个输入文件有其自己的一组轨道 ID。因此通过 'mkvmerge --identify' 报告的文件 '文件1.扩展名' 的轨道 ID 不随其他输入文件的数量或 '文件1.扩展名' 所用到的位置变化。

轨道 ID 通常这样分配:

•AVI 文件: 视频轨 ID 为 0。音频轨的 ID 由 1 开始升序分配。
•AAC、AC-3、MP3、SRT 与 WAV 文件: 此类文件中唯一的 '轨道' 的 ID 为 0。
•大多数其他文件: 轨道 ID 按在文件中被找到的顺序由 0 开始分配。

使用轨道 ID 的选项的描述中均含有 'TID'。此外下列选项也使用轨道 ID: --audio-tracks--video-tracks--subtitle-tracks--button-tracks 以及 --track-tags

特殊軌道 ID

一些 ID 具有特殊含义,不会出现在 id 输出结果中。

特殊的轨道 ID '-1' 是个百搭号,它将使给定的开关应用到从输入文件中读到的所有轨道。

特殊轨道 ID '-2' 指输入文件中的章节。目前只有 --sync 选项会用到此特殊 ID。--sync -2:...--chapter-sync ... 等效。

Matroska(TM) has support for two different types of language elements: the old, deprecated "Language" element containing ISO 639-2 alpha 3 codes and the new "LanguageIETF" tags containing IETF BCP 47 language tags. All of mkvmerge(1)'s options that accept a language accept a BCP 47 language tag. mkvmerge(1) will derive the value for the deprecated "Language" element from the BCP 47 language tags wherever possible.

When identifying a file in JSON mode, existing "LanguageIETF" track header elements will be output as the language_ietf track property.

When writing a file mkvmerge(1) will always write the "LanguageIETF", "ChapLanguageIETF" and "TagLanguageIETF" elements (the latter two only if chapters or tags are written respectively). In addition to those elements the corresponding old elements will be written; they'll be set to the ISO 639-2 code portion of the BCP 47 language tag. For example, when the track language is set to sr-Cyrl-RS "LanguageIETF" will be set to sr-Cyrl-RS and the old "Language" element will be set to srp.

When reading existing files (Matroska files, XML chapter or tag files etc.) that already contain "...LanguageIETF" elements the existing elements will be kept. Otherwise "...LanguageIETF" elements will be added based on command-line options and other existing deprecated "...Language" elements.

The creation of the new elements can be disabled completely with the command-line option --disable-language-ietf which operates on all three new elements.

You can chose the normalization method applied to extended language sub-tags with the parameter --normalize-language-ietf.

文字檔案與字元集轉換


注意

此段落可应用到 MKVToolNix 中的所有程序,尽管该段仅提及了 mkvmerge(1)

簡介

Matroska(TM) 文件中的所有文本均使用 UTF-8 编码。这意味着 mkvmerge(1) 需要将读取到的文本文件以及从命令行收到的文本从其他字符集转换为 UTF-8。相反,这意味着 mkvmerge(1) 的输出信息同样需要由 UTF-8 转回原来的字符集,例如来自 --ui-language 所选的非英语界面或来自 Matroska(TM) 文件中的文本。

mkvmerge(1) 根据是否有 字节顺序标记 (英文缩写: BOM) 出现以及系统的当前区域来进行自动转换。如何根据区域推定字符集取决于 mkvmerge(1) 所执行在的操作系统。

位元組順序記號 (BOM)

以 BOM 开头的文本文件已经使用 UTF 的某一种模式进行编码。mkvmerge(1) 支持以下五种模式: UTF-8、UTF-16 小端序 (LE) 及大端序 (BE)、UTF-32 小端序 (LE) 及大端序 (BE)。含 BOM 的文本文件将被自动转换为 UTF-8。任何对此类文件指定字符集的参数 (如 --sub-charset) 将被直接忽略,且不输出提示信息。

包含 mac 作業系統的 Linux 與 類Unix 系統

在 类-Unix 系统 mkvmerge(1) 将使用 setlocale(3) 系统指令,它将返回环境变量 LANGLC_ALLLC_CYPE。输出的字符集通常是 UTF-8 或 ISO-8859-* 家族之一,将被用于所有文本文件操作以及编码命令行上的字符串和输出到命令行。

在 Windows 平台,用于转换文本文件的默认字符集由系统调用 GetACP() 的结果决定。

读取命令行参数通过 GetCommandLineW() 函数完成,该函数所返回的已经是 Unicode 字符串。因此选项 --command-line-charset 在 Windows 平台是被忽略的。

输出到控制台分为三种情况:

1.若使用 --redirect-output 选项重定向输出,则默认字符集为 UTF-8。可以通过 --output-charset 修改。
2.若输出内容通过 cmd.exe 自身重定向,例如 mkvinfo 文件.mkv > info.txt,则其字符集必为 UTF-8,且无法修改。
3.否则 (直接写入控制台) 将使用 Windows 函数 WriteConsoleW() 并忽略 --output-charset 选项。控制台应该能够输出已安装对应语言支持的所有 Unicode 字符 (如汉字在英文版 Windows 可能不会正常显示)。

命令列選項

现有下述选项支持指定字符集:

--sub-charset 用于文本字幕文件以及存储于字符集含糊的容器格式(如 Ogg 文件)中的文本字幕轨,
--chapter-charset 用于章节文本文件以及存储于字符集含糊的容器格式(如 Ogg 文件的章节信息,轨道和文件标题等;MP4 文件的章节信息)中的章节和文件标题,
--command-line-charset 用于所有命令行上的字符串,
--output-charset 所有写入控制台的或通过 --redirect-output 选项重定向到文件的字符串的输出字符集。非 Windows 系统下,默认的输出字符集为系统的当前字符集。在 Windows 平台,默认为 UTF-8,包括通过 --redirect-output 的重定向以及 cmd.exe 自身的重定向,如 mkvinfo file.mkv > info.txt。

選項檔案

mkvmerge(1) 可从选项文件中读取额外的命令行参数。这样可以规避 shell 或操作系统在执行外部程序时的特定限制,如命令行长度的限制。

包含 JSON 格式数据的选项文件。其内容必须为有效的 JSON 数组,数组元素只能为 JSON 字符串。文件编码必须为 UTF-8。文件开头不需要有字节序标记 (byte order marker,BOM),但即使有也没关系,会跳过它。

在 JSON 内部转义特殊字符的规则请见官方 JSON 规范 RFC 7159[4]。

选项文件名本身应添加前缀字符「@」在命令行参数给出。

命令行“mkvmerge -o "我的文件.mkv" -A "一部影片.avi" 声音.ogg”可以转换为下述 JSON 选项文件,文件可以命名为“选项.json”:

[
  "-o",
  "c:\\Matroska\\我的檔案.mkv",
  "--title",
  "#65",
  "-A",
  "影片.avi",
  "聲音.ogg"
]

对应的命令行则为「mkvmerge @选项文件.json」。

檔案連結

Matroska(TM) 支持文件链接,即声明当前文件的前趋与后继文件是哪个文件。严谨地讲,被连接的不是文件而是 Matroska(TM) 剪辑。鉴于大多数文件只含有一个 Matroska(TM) 剪辑,以下说明中将使用术语 '文件链接',尽管 '剪辑链接' 更为贴切。

各剪辑由唯一的 128 位宽的剪辑 UID 确定。此 UID 是由 mkvmerge(1) 自动创建的。链接主要通过将前后文件的剪辑 UID (英文缩写: SID) 置于剪辑头部信息中完成。mkvinfo(1) 会在找到 SID 时输出它们。

如果文件被切割为多段,且启用了链接功能,则文件的时间戳不会重新从 0 开始,而是会从上一个文件结束的地方继续计算。这样可以保留绝对时间,即使之前的文件不可用 (如进行流式处理时)。如果未使用链接功能,各文件的时间戳应从 0 开始。mkvmerge(1) 默认不启用文件链接。如果您希望启用,可以通过 --link 选项打开。此选项仅当同时启用切割功能时有用。

无论是否开启了切割功能,用户都可以让 mkvmerge(1) 将生成的文件与指定的 SID 建立链接。可通过 --link-to-previous--link-to-next 选项实现。 这些选项只接受 mkvinfo(1) 所输出的剪辑 SID 格式: 16 个 0x000xff 之间的十六进制数,各数字带有 '0x' 前缀,如 '0x41 0xda 0x73 0x66 0xd9 0xcf 0xb2 0x1e 0xae 0x78 0xeb 0xb4 0x5e 0xca 0xb3 0x93'。还可以选用另一种较短的格式: 16 个 0x000xff 之间的十六进制数,无 '0x' 前缀,无空格,如 '41da7366d9cfb21eae78ebb45ecab393'。

如果启用了切割功能,第一个文件将与通过 --link-to-previous 给定的 SID 建立链接,而最后一个文件将与通过 --link-to-next 给定的 SID 建立链接。如果未启用切割功能,唯一的输出文件将同时与给定的两个 SID 建立链接。

預設值

Matroska(TM) 规范提到,一些元素有其默认值。通常为了节省空间,如果一个元素的值等同于其默认值,它将不被写入文件。用户在 mkvinfo(1) 的输出信息中可能发现缺失的元素有 语言默认轨标记语言 的默认值是 English ('eng'),默认轨标记 的默认值是 true。因此如果您对一条轨道应用选项 --language 0:eng ,它将不在 mkvinfo(1) 的输出信息中显示。

附件

或许您希望将一些照片与您的 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-mime-type application/octet-stream \
  --attach-file 超酷的字体.ttf

如果含有附件的 Matroska(TM) 文件被用作输入文件,mkvmerge(1) 会将附件复制到新文件中。要复制哪些文件、不复制那些文件的选择可以通过 --attachments--no-attachments 选项修改。

章節

Matroska(TM) 章节系统比大家知道的旧系统—— OGM 中所使用的——更为强大。完整的规范可以在 Matroska(TM) 网站[1] 找到。

mkvmerge(1) 支持输入两种章节文件。第一种格式,叫作 '简单章节格式',与 OGM tools 所用的相同。第二种是基于 XML 的章节格式,它支持 Matroska(TM) 的所有章节功能。

除了专用的章节文件格式以外,mkvmerge(1) 还能够从其他文件格式读取章节数据 (如 MP4、Ogg、Blu-ray 以及 DVD 光盘)。

簡易章節格式

此格式由成对的相继以 'CHAPTERxx=' 与 'CHAPTERxxNAME=' 开头的行组成。单数行包含起始时间戳,而双数行包含标题。这是一个示例:

CHAPTER01=00:00:00.000
CHAPTER01NAME=介紹
CHAPTER02=00:02:30.000
CHAPTER02NAME=萌娃準備演奏
CHAPTER03=00:02:42.300
CHAPTER03NAME=萌娃震撼表演

mkvmerge(1) will transform every pair or lines into one Matroska(TM) ChapterAtom. It does not set any ChapterTrackNumber which means that all chapters apply to all tracks in the file.

由于是文本文件,可能需要进行字符集转换。关于 mkvmerge(1) 如何在字符集间进行转换的说明请参见关于 文本文件与字符集 的段落。

基於 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 (二进制)

從 Blu-rays 藍光光碟讀取章節

mkvmerge(1) 可以从未加密的 Blu-ray 光盘读取章节数据。要这样做,您可以通过「--chapters」参数提供任一 MPLS 播放列表的路径。

例: --chapters /宝藏/蓝光/BigBuckBunny/BDMV/PLAYLIST/00001.mpls

從 DVD 光碟讀取章節

若 MKVToolNix 编译时链接了 libdvdread(TM) 库,mkvmerge(1) 就能从 DVD 光盘中读取章节数据。要这样做,您可以通过「--chapters」参数提供 DVD 文件夹或文件的路径。由于 DVD 光盘可包含多个标题,且每个标题可以有自己的一组章节,您可以在文件名参数后添加冒号及所需的标题编号。标题编号默认为 1。

例: --chapters /宝藏/dvd光盘/BigBuckBunny/VIDEO_TS:2

一般注意事項

mkvmerge(1) 切割文件时会同时适当调整章节。这意味着每个文件只包含应用到该文件的章节项,时间戳也将被调整到与各输出文件相匹配。

mkvmerge(1) 能够从 Matroska(TM) 输入文件中复制章节,除非使用 --no-chapters 选项明令禁用。来自各类来源 (Matroska(TM) 文件、Ogg 文件、MP4 文件、章节文本文件) 的章节通常不被合并,而是分成多个 ChapterEditions(章节版本)。仅当从多个 Matroska(TM) 或 XML 文件读取的章节具有相同的版本 UID 时,章节才会被合并为单个 ChapterEdition。如果在其他情况下需要此类合并,用户需要先用 mkvextract(1) 从所有来源提取章节,手动合并 XML 文件然后再混流。

標籤

簡介

Matroska(TM) 的标签系统与其他容器类似: 一组 键=值 对。不过,Matroska(TM) 中的标签还可以嵌套, 都是属于它们自身的元素。示例文件 example-tags-2.xml 展示了如何使用该系统。

标签细述

Matroska(TM) 标签不会自动应用到整个文件上。它们可以应用到整个文件,还可以应用到文件的不同部分: 一个或多个轨道, 一个或多个章节, 甚至是两者的组合。Matroska(TM) 规范[5] 有这方面的更多详情。

重要的一点是标签通过 Targets Matroska(TM) 标签元素与轨道或章节相连,而用于此链接的 UID 并非 mkvmerge(1) 常用的轨道 ID。而是 mkvmerge(1) 自动计算而来 (当轨道来自非 Matroska(TM) 文件时) 或当轨道输入文件是 Matroska(TM) 文件时复制而来的 的 UID。因此在文件被 mkvmerge(1) 处理过之前很难知道应该在标签文件中使用哪些 UID。

mkvmerge(1) 支持两个为 Matroska(TM) 文件添加标签的选项: --global-tags--tags 选项。不同之处在于前者,--global-tags,将通过移除上文提到的所有 Targets 元素使标签应用到整个文件。 而后者,--tags,将使 mkvmerge(1) 为通过 --tags 选项的 TID 部分指定的标签自动插入 UID。

範例

假定您希望为从一个 AVI 文件读取的视频轨道添加标签。mkvmerge --identify 文件.avi 告诉您该视频轨道的 ID (不要将此 ID 与 UID 混淆!) 为 0。于是您创建了一个标签文件,省去了所有 Targets 元素,然后这样调用 mkvmerge(1):

$ mkvmerge -o 文件.mkv --tags 0:标签.xml 文件.avi

标签文件格式

mkvmerge(1) 支持基于 XML 的标签文件格式。此格式是以 Matroska(TM) 规范[5] 为依据严格制定的。MKVToolNix 的程序以及源码分发包都含有名为 example-tags-2.xml 的示例文件,该文件已简明地列出了所有已知的可用作实际处理的基本标签。

基本要点有:

•最外层的元素必须为 <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 标签,其数据类型及有效值域:

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 文件设置 Matroska(TM) 文件 "剪辑信息" 头部字段的特定值。所有这些值都无法通过其他命令行选项设置。

还有一些 "剪辑信息" 头部字段可以通过命令行选项设置,而非通过 XML 文件。包括如 --title--timestamp-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) 文件规划非常灵活。mkvmerge(1) 将按预先定义的方式渲染文件。生成的文件是这样的:

[EBML 头] [剪辑 {元定位 #1} [剪辑信息] [轨道信息] {附件} {章节} [簇 1] {簇 2} ... {簇 n} {索引} {元定位 #2} {标签}]

大括号中的元素是可选的,依所用的内容和选项而定。有两点要注意的:

•元定位 #1 只包含很少量的 level 1 元素,且仅当它们存在时才包含:附件、章节、索引、标签以及元定位 #2。较早版本的 mkvmerge(1) 亦曾将簇放置在元定位元素中。因此应留给不精确的传言一些空间——真相总会大白。 现在只有簇才被储存在元定位 #2 中,元定位 #1 将引用元定位元素 #2。
•附件、章节和标签元素仅当被添加后才会出现。

允许的最精简的 Matroska(TM) 文件是像这样的:

[EBML 头] [剪辑 [剪辑信息] [轨道信息] [簇 1]]

这也是纯音频文件的样子。

外部時間戳記檔案

mkvmerge(1) 允许用户为各轨道选择特定的时间戳。这可用来创建包含可变帧率视频或音频中有空隙的文件。这种情况下的帧是 mkvmerge(1) 创建各 Matroska(TM) 块的单位。对视频来说恰好是一帧,对音频来说是相应音频类型的一个数据包。例如对 AC-3 来说是包含 1536 采样的一个数据包。

用于轨道追加合并的时间戳必须只指定给一系列(同一)轨道的第一部分。例如当您追加合并两个文件,v1.avi 与 v2.avi,且希望使用时间戳时,您的命令行必须像这样组织:

$ mkvmerge ... --timestamps 0:我的时间戳.txt v1.avi +v2.avi

mkvmerge(1) 可识别四种格式的时间戳。版本号在时间戳文件的第一行内。空行,只含有空格的行,以及以 '#' 开头的行在处理时将被忽略。

時間戳記檔案格式 v1

此格式的第一行是版本声明。第二行则声明默认的帧率。 接下来的各行包含由逗号分隔的三个数字: 起始帧(0 代表第一帧)、终止帧以及此范围内的帧率。FPS(帧率) 为浮点数,小数点用 '.' 表示。各行定义的范围间可以有间隔,间隔内将使用默认的 FPS。一个示例:

# timestamp format v1
assume 27.930
800,1000,25
1500,1700,30

時間戳記檔案格式 v2

此格式中每行包含相应帧的时间戳。此时间戳必须以毫秒为精度。可以使浮点数,但不强求。您指定的时间戳行数 必须 不少于对应轨道的帧数。此类文件中的时间戳必须经过排序。 以 25fps 为例:

# timestamp format v2
0
40
80

時間戳記檔案格式 v3

此格式中各行包含时长(秒数),后接(可选)帧率。 二者均可为浮点数。 如果未提供帧率,则采用默认的帧率。 对于音频,您应当让编解码器自行计算各帧的时间戳。 这样您应当使用 0.0 作为帧率。 您可以使用 'gap' 关键词后接空隙时长在流中创建空隙。 以音频文件为例:

# timestamp format v3
assume 0.0
25.325
7.530,38.236
gap, 10.050
2.000,38.236

時間戳記檔案格式 v4

此格式與 v2 格式一致。 唯一的差別是時間戳記不需要排序。 通常不應使用此格式。

結束代碼

使用三個之一的結束代碼結束 mkvmerge(1)

0 -- 此結束代碼表示合併已成功完成。
1 -- 在此情況下 mkvmerge(1) 輸出時至少有一則警告,但合併動作仍然進行。警告訊息會在前端出現 '警告:'字樣。依據問題的程度,生成的檔案也許可用。建議使用者檢視警告訊息與輸出檔。
2 -- 此結束代碼用於發生錯誤後。 mkvmerge(1) 在輸出錯誤訊息後立即中止動作。錯誤訊息的範圍包含從錯誤命令列參數的讀/寫至檔案損壞。

環境變數

mkvmerge(1) 使用決定系統的地區設定的變數 (例如: LANGLC_* 系列)。 附加變數:

MKVMERGE_DEBUG, MKVTOOLNIX_DEBUG 與其的簡短形式 MTX_DEBUG

視為通過 --debug 選項傳遞的內容。

MKVMERGE_ENGAGE, MKVTOOLNIX_ENGAGE 與其的簡短形式 MTX_ENGAGE

視為通過 --engage 選項傳遞的內容。

參閱

mkvinfo(1), mkvextract(1), mkvpropedit(1), mkvtoolnix-gui(1)

網路

永遠可在 MKVToolNix 首頁[6] 找到最新版。

作者

Moritz Bunkus <moritz@bunkus.org>

開發人員

备注

1.

Matroska(TM) 網站
2.
IANA 主页
3.
mkvmerge-identification-output-schema-v18.json
4.
RFC 7159
5.
Matroska(TM) 规范
6.
MKVToolNix 首頁
2024-03-10 MKVToolNix 83.0