MKVEXTRACT(1)

參考名
mkvextract - 將 Matroska 軌道檔案擷取至其他檔案

概要

mkvextract {輸入檔名} {模式1} [選項] [擷取規格1] [模式2] [選項] [擷取規格2] [...]

摘要說明

此程式從 Matroska 檔中提取特定部分到其他有用的格式。第一個參數是原始檔案的名稱，該檔必須是 Matroska 檔。

所有其他引數可切換至特定擷取模式，變更目前使用模式的選項，或指定要擷取那些內容至哪個檔案中。可在 mkvextract 同一次啟動中使用多個模式，允許一次擷取多個內容。大多數選項只能在特定模式下使用，只有少數選項適用於所有模式。

目前支援軌道 tracks 軌道, tags 標籤, attachments 附件, chapters 章節, CUE sheets CUE 工作表, timestamps 時間戳記 與 cues的擷取。

  一般選項

以下選項在所有模式下都可用，本節中僅介紹一次。

-f, --parse-fully
    將剖析模式設為 '完整' 。預設模式不會剖析完整檔案，而是使用變換定位元件尋找原始檔案所需的元件。在 99% 情形足以夠用。但對於不包含變換定位元件或受損的檔案來說，使用者很可能需要使用此模式。完整檔案掃描會耗費較久的時間，而快速掃描只需要幾秒鐘。

--command-line-charset 字元集
    設定在命令列顯示的字串字元集，以轉換為其他字元集。預設為目前系統所在位置指定的字元集。

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

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

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

--ui-language 語言碼
    強制使用語言 編碼 對應的的翻譯(例如 'zh_TW' 為臺灣正體中文翻譯)。 在編碼欄位中輸入'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
    顯示版本資訊並離開。

@options-file.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 input.mkv tracks 0:video.h264 2:output-two-vobsub-tracks.idx 3:output-two-vobsub-tracks.idx

  附件擷取模式

語法: mkvextract 原始檔名 attachments [選項] AID1:輸出檔名1 [AID2:輸出檔名2 ...]

AID:輸出檔名
    如果原始檔案中存在 ID 為 AID 的附件軌道，會將擷取為 輸出檔名 。假設 輸出檔名 保留空白，那麼將會使用原始 Matroska 檔案中的附件名稱。此選項可多次使用。此選項可多次使用。附件 ID 與 mkvmerge(1) 的 --identify 選項輸出的相同。

  章節擷取模式

語法: mkvextract 原始檔名 chapters [選項] 輸出檔名.xml

-s, --simple
    用 OGM 工具的簡易格式來匯出章節資訊 (CHAPTER01=..., CHAPTER01NAME=...)。 在此模式中，將會丟棄部分資訊。預設是以 XML 格式輸出章節。

--simple-language 語言
    如果啟用簡易模式， mkvextract(1) 即使單一章節單元包含一個以上的章節名稱，每個章節單元只會輸出單一項目。在預設情況下，無論任何語言， mkvextract(1) 都將會使用找到的第一個名稱。

    使用此選項，當單元包含一個以上章節名稱時，允許使用者決定使用哪一個章節名稱作為輸出使用。 語言 參數必須為 ISO 639-1 或 ISO 639-2 編碼。

章節將寫入指定輸出檔案。預設情況下，會使用 mkvmerge(1) 可識別的 XML 格式。如果檔案中沒有找到任何章節，將不會建立輸出檔案。

  標籤擷取模式

語法: mkvextract 原始檔名 tags [選項] 輸出檔名.xml

-T, --no-track-tags
    Exports only tags that aren't track-specific.

標籤將寫入指定輸出檔案。預設情況下，會使用 mkvmerge(1) 可識別的 XML 格式。如果檔案中沒有找到任何標籤，將不會建立輸出檔案。

  Cue 工作表擷取模式

語法: mkvextract 原始檔名 cuesheet [選項] 輸出檔名.cue

CUE 表單將寫入指定輸出檔案。如果檔案中沒有找到任何章節或標籤，將不會建立輸出檔案。

  時間戳記擷取模式

語法: mkvextract 原始檔名 timestamps_v2 [選項] TID1:輸出檔名1 [TID2:輸出檔名2 ...]

TID:輸出檔名
    如果原始檔案中存在 ID 為 TID 的時間戳記軌道，會將擷取為 輸出檔名 。此選項可多次使用。此選項可多次使用。軌道 ID 與 mkvmerge(1) 的 --identify 選項輸出的相同。

    範例:

        $ mkvextract input.mkv timestamps_v2 1:ts-track1.txt 2:ts-track2.txt

  Cue 擷取模式

語法: 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 點的時間戳記( timestamp)具有奈秒的精準度。格式為 HH:MM:SS.nnnnnnnnn。 此元件為必要設定。

duration
    CUE 點的時間長度(duration)具有奈秒的精準度。格式為 HH:MM:SS.nnnnnnnnn。

cluster_position
    包含引用元件的叢集起始的 Matroska 檔案內位元組的絕對位置。

        注意
        Matroska 檔案中的 CueClusterPosition 相對於剪輯資訊資料的起始偏移。但由 mkvextract(1) CUE 擷取模式輸出的值已經包含該偏移，並且是與文件開頭的絕對偏移。

relative_position
    CUE 點引用的 BlockGroup 或 SimpleBlock 元件在叢集起始內以位元組為單位的相對位置。

        注意
        Matroska 檔案中的 CueRelativePosition 是相對於叢集資料起始的偏移。但 mkvextract(1) 的 CUE 擷取模式所輸出的值，是相對於叢集的 ID 。可通過新增與新增檔案計算檔案內的 cluster_position 和 relative_position。

範例:

    $ mkvextract input.mkv cues 1:cues-track1.txt 2:cues-track2.txt

範例

同時擷取章節與標籤並依照各自的 XML 格式儲存:

    $ mkvextract movie.mkv chapters movie-chapters.xml tags movie-tags.xml

同時擷取數個軌道與各自對應的時間戳記:

    $ mkvextract "Another Movie.mkv" tracks 0:video.h265 "1:main audio.aac" "2:director's comments.aac" timestamps_v2 "0:timestamps video.txt" "1:timestamps main audio.txt" "2:timestamps director's comments.txt"

擷取 Ogg/OGM 格式的章節，然後將文字字幕軌道重新編碼到另一個字元集:

    $ mkvextract "My Movie.mkv" chapters --simple "My Chapters.txt" tracks -c MS-ANSI "2:My Subtitles.srt"

文字檔案與字元集轉換

关于 MKVToolNix 套件中所有工具如何处理字符集转换、输入/输出编码、命令行编码及控制台编码的深入讨论，请参见 mkvmerge(1) 手册中相对应名称的段落。

檔案輸出格式

输出的格式取决于轨道的类型，而不是输出文件名的扩展名。目前支持以下轨道类型:

A_AAC/MPEG2/*, A_AAC/MPEG4/*, A_AAC
    所有 AAC 文件将被输出为 AAC 文件，其中数据包前有 ADTS 头。ADTS 头将不含反增强字段（deprecated emphasis field）。

A_AC3, A_EAC3
    這將會擷取為 raw AC-3 檔案。

A_ALAC
    ALAC 軌道將寫入成 CAF 檔案。

A_DTS
    這將會擷取為 raw DTS 檔案。

A_FLAC
    FLAC 軌道將寫入成原始 FLAC 檔案。

A_MPEG/L2
    MPEG-1 音層 II 串流將會擷取為原始的 MP2 檔案。

A_MPEG/L3
    這將會擷取為 raw MP3 檔案。

A_OPUS
    Opus 軌道將寫入成 OggOpus 檔案。

A_PCM/INT/LIT, A_PCM/INT/BIG
    原始 PCM 数据将写入 WAV 文件。大端序整数数据在此期间将被转为小端序数据。

A_REAL/*
    RealAudio 軌道將寫入成 RealMedia 檔案。

A_TRUEHD, A_MLP
    這將會擷取為 raw 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
    TextST 字幕将以转为 mkvmerge(1) 与 mkvextract(1) 发明的特殊格式写入。

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) 所支持读取的标签格式相同。

附件
    附件将被以原样输出。不会进行任何转换。

章節
    章节将被转换为 XML 格式。此格式与 mkvmerge(1) 所支持读取的章节格式相同。您也可以选择输出精简的简单 OGM 格式。

Timestamps
    时间戳会先被排序，然后以 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 選項傳遞的內容。

參閱

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

網路

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

作者

Moritz Bunkus <moritz@bunkus.org>
    開發人員

注

1.  MKVToolNix 首頁
    https://mkvtoolnix.download/