mkvextract -- Matroska(tm) 파일에서 다른 파일로 트랙 추출

# 1. 개요

mkvextract {소스-파일명} {모드1} 옵션 추출-스펙1 모드2 옵션 추출-스펙2 …

# 2. 설명

이 프로그램은 Matroska(tm) 파일에서 특정 부분을 다른 유용한 형식으로 추출합니다. 첫 번째 인수는 소스 파일의 이름이며 Matroska(tm) 파일이어야 합니다.

다른 모든 인수는 특정 추출 모드로 전환하거나, 현재 활성 모드에 대한 옵션을 변경하거나, 무엇을 어떤 파일에 추출할 것인지를 지정합니다. Mkvextract의 동일한 호출에서 여러 모드를 사용하여 한 번에 여러 항목을 추출할 수 있습니다. 대부분의 옵션은 모든 모드에 적용되는 몇 가지 옵션이 있는 특정 모드에서만 사용할 수 있습니다.

현재 지원되는 것은 트랙, 태그, 첨부 파일, 챕터, 큐 시트, 타임스탬프 및 큐의 추출입니다.

## 2.1. 공통 옵션

다음 옵션은 모든 모드에서 사용 가능하고 이 부분에서 단 한번만 설명합니다.

Option | Description
--- | ---
-f, --parse-fully | 분석 모드를 '전부'로 설정합니다. 기본 모드는 전체 파일을 분석하지 않지만 소스 파일의 필요한 요소를 찾기 위해 메타 탐색 요소를 사용합니다. 이것은 99% 가량의 모든 경우에 충분합니다. 그러나 메타 탐색 요소를 포함하지 않거나 손상된 파일에서 사용자는 이 모드를 사용해야 할 지 모릅니다. 빠른 스캔은 몇 초밖에 안 걸리지만, 파일 전체 스캔은 이 삼분 걸릴 수 있습니다.
--command-line-charset 문자셋 | 명령행에 주어진 문자열을 변환할 문자셋을 정합니다. 기본값은 현재 시스템 로케일에 따른 문자셋입니다.
--output-charset 문자셋 | 출력할 문자열을 변환할 문자셋을 정합니다. 기본값은 현재 시스템 로케일에 따른 문자셋입니다.
-r, --redirect-output 파일명 | 모든 메시지를 콘솔 화면 대신 파일명 파일에 기록합니다. 이것은 출력 방향 전환으로 쉽게 할 수 있지만 이 옵션이 필요한 경우가 있습니다: 터미널이 파일에 출력하기 전에 출력을 재해석할 때. 문자셋 설정은 --output-charset 을 준수합니다.
--no-bom | Normally text files that are created & encoded in one of the UTF variants will start with a byte order marker (BOM). Using this option disables writing that byte order marker.
--flush-on-close | 쓰기 위해 열린 파일을 닫을 경우 메모리에 캐시된 모든 데이터를 플러시 하도록 프로그램에게 지시합니다. 이를 통해 정전 시 데이터 손실을 방지하거나 운영 체제 또는 드라이버의 특정 문제를 방지할 수 있습니다. mkvmerge는 모든 데이터가 저장소에 기록될 때까지 기다리기 때문에 멀티플렉싱 시간이 더 오래 걸린다는 단점이 있습니다. 장단점에 대한 자세한 내용은 MKVToolNix 버그 트래커의 #2469 및 #2480호를 참조하십시오.
--ui-language 코드 | 언어 코드의 번역을 강제로 사용합니다 (예: 강제 사용할 독일어 번역 코드는 'de_DE'). 'list'를 코드로 입력하면 mkvextract(1) 에서 이용 가능한 번역 목록을 출력할 것입니다.
--abort-on-warnings | 첫 번째 경고가 발생한 후 프로그램을 중단하도록 지시합니다. 프로그램의 종료 코드는 1입니다.
--debug 토픽 | 특정 기능에 대해 디버깅을 켭니다. 이 기능은 개발자에게만 유용합니다.
--engage 기능 | 실험적인 기능을 켭니다. 이용 가능한 기능 목록은 mkvextract --engage list로 요청할 수 있습니다. 이 기능들은 보통 상황에서는 사용하면 안 됩니다.
--gui-mode | GUI 모드를 켭니다. 이 모드에서는 GUI 동작시 무슨 일이 일어나는지 알려줄 수 있는 특별하게 형식화된 줄을 출력할 것입니다. 이 메시지들은 '#GUI#message' 형식을 따릅니다. 이 메시지 뒤에 '#GUI#message#key1=value1#key2=value2…' 형태의 키/값 쌍이 붙을 수 있습니다. 메시지나 키값들은 결코 번역되지 않고 항상 영어로 출력됩니다.
-v, --verbose | 읽어들인 모든 중요한 Matroska(tm) 요소를 자세하게 보여 줍니다.
-h, --help | 사용법에 관한 정보를 표시하고 종료합니다.
-V, --version | 버전 정보를 표시하고 종료합니다.
@옵션 파일.json | 추가 명령행 인수는 옵션-파일 파일에서 읽어보세요. 이러한 파일용 지원 형식에 대한 자세한 설명은 mkvmerge(1) man page에서 "옵션 파일"이라는 섹션을 참고하세요.

## 2.2. 트랙 추출 모드

구문: mkvextract 소스-파일명 트랙 [옵션] TID1:대상-파일명1 [TID2:대상-파일명2 ...]

다음 명령행 옵션은 '트랙' 추출 모드에서 각 트랙에 대해 사용할 수 있습니다. 이 옵션들은 적용이 되야 하는 트랙 사양(아래 참고) 의 앞쪽에 나타나야 합니다.

Option | Description
--- | ---
-c 문자셋 | 다음 자막 트랙을 변환할 문자셋을 설정합니다. 다음 트랙 ID가 텍스트 자막 트랙을 대상으로 하는 경우에만 유효합니다. 기본값은 UTF-8.
--blockadd 수준 | 이 수준까지만 BlockAddition을 유지합니다. 기본값은 모든 수준을 유지하는 것입니다. 이 옵션은 WAVPACK4같은 특정한 코덱에만 효과가 있습니다.
--cuesheet | mkvextract(1)로 큐시트를 챕터 정보에서 추출하고 다음 트랙의 데이터를 파일명이 트랙의 출력 이름이고 확장자가 '.cue' 인 파일에 태그로 기록합니다.
--raw | 컨테이너에서 원시 데이터를 파일로 추출합니다. --fullraw 플래그와 다르게 이 플래그는 CodecPrivate 요소의 내용이 그 파일에 기록되지 않습니다. 이 모드는 모든 CodecIDs와 동작합니다. 그 외에 mkvextract(1)가 지원하지 않는 CodecIDs에서도 동작이 됩니다. 다만 그 결과로 나오는 파일은 아마도 사용하지 못할 것입니다.
--fullraw | 원시 데이터를 컨테이너에 넣지 않고 단순한 파일로 추출합니다. CodecPrivate 요소의 내용은 만약 트랙이 그런 헤더 요소를 포함하고 있으면 파일에 먼저 기록될 것입니다. 이 모드는 모든 CodecIDs과 mkvextract(1) 가 지원하지 않는 CodecIDs에서도 동작하지만 그 결과로 나오는 파일은 아마도 사용하지 못할 것입니다.
TID:출력이름 | 소스 파일에 TID ID의 트랙이 있으면 출력이름 파일로 추출합니다. 이 옵션은 여러 번 사용할 수 있습니다. 트랙 ID는 mkvmerge(1)'s --identify 옵션으로 나오는 것과 같습니다. 각 출력 이름은 한 번만 사용해야 합니다. RealAudio와 RealVideo 트랙은 예외적입니다. 다른 트랙들에 같은 이름을 사용하면 해당 트랙들은 같은 파일에 저장이 될 것입니다. 예:
    $ mkvextract input.mkv tracks 0:video.h264 2:output-two-vobsub-tracks.idx 3:output-two-vobsub-tracks.idx

## 2.3. 첨부 파일 추출 모드

구문: mkvextract 소스-파일명 attachments [옵션] AID1:출력명1 [AID2:출력명2 ...]

Option | Description
--- | ---
AID:출력이름 | 소스 파일에 ID AID의 첨부 파일이 있으면 출력이름 파일로 추출합니다. 출력이름이 없으면 소스 Matroska(tm) 파일 안의 첨부 파일명을 대신 사용합니다. 이 옵션은 여러 번 사용할 수 있습니다. 첨부 파일 ID는 mkvmerge(1)'s --identify 옵션으로 나오는 출력과 같습니다.

## 2.4. 챕터 추출 모드

구문: mkvextract 소스-파일명 챕터 [옵션] 출력-파일명.xml

Option | Description
--- | ---
-s, --simple | 챕터 정보를 OGM 도구에서 사용되는 단순 형식(CHAPTER01=... CHAPTER01NAME=...)으로 내보냅니다. 이 모드에서 몇몇 정보는 폐기되어야만 합니다. 기본값은 챕터를 XML 형식으로 출력하는 것입니다.
--simple-language 언어 | 간단한 형식이 활성화된 경우 mkvextract(1)는 챕터 아톰에 두 개 이상의 챕터 이름이 있어도, 마주치는 각 챕터 아톰에 대해 단일 항목만 출력합니다. 기본적으로 mkvextract(1)는 그 언어와 상관없이 각 아톰에 대해 찾은 첫 번째 챕터 이름을 사용합니다. 이 옵션을 사용시 아톰이 둘 이상의 챕터 이름을 포함하는 경우, 출력할 챕터 이름을 결정할 수 있습니다. 언어 매개 변수는 ISO 639-1 또는 ISO 639-2 코드여야 합니다.

챕터는 지정된 출력 파일에 기록됩니다. 기본적으로 mkvmerge(1)가 이해하는 XML 형식이 사용됩니다. 파일에 챕터가 없으면 출력 파일이 작성되지 않습니다.

## 2.5. 태그 추출 모드

구문: mkvextract 소스-파일명 태그 [옵션] 출력-파일명.xml

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

태그는 mkvmerge(1)가 이해하는 XML 형식으로 지정된 출력 파일에 기록됩니다. 파일에 태그가 없으면 출력 파일이 생성되지 않습니다.

## 2.6. 큐시트 추출 모드

구문: mkvextract 소스-파일명 큐 시트 [옵션] 출력-파일명.cue

큐 시트는 지정된 출력 파일에 기록됩니다. 파일에 챕터나 태그가 없으면 출력 파일이 생성되지 않습니다.

## 2.7. 타임스탬프 추출 모드

구문: mkvextract 소스-파일명 타임스탬프_v2 [옵션] TID1:대상-파일명1 [TID2:대상-파일명2 ...]

Option | Description
--- | ---
TID:출력이름 | 소스 파일에 TID ID의 트랙이 있으면 출력이름 파일로 추출합니다. 이 옵션은 여러 번 사용할 수 있습니다. 트랙 ID는 mkvmerge(1)'s --identify 옵션으로 나오는 것과 같습니다. 예:
    $ mkvextract input.mkv timestamps_v2 1:ts-track1.txt 2:ts-track2.txt

## 2.8. 큐 추출 모드

구문: mkvextract 소스-파일명 큐 [옵션] TID1:대상-파일명1 [TID2:대상-파일명2 ...]

Option | Description
--- | ---
TID:대상 파일명 | ID가 TID인 트랙에 대한 큐가 소스 파일에 있는 경우 해당 트랙이 outname 파일로 추출됩니다. 이 옵션은 여러 번 지정할 수 있습니다. 트랙 ID는 mkvmerge(1)의 --identify 옵션에 의해 출력되는 ID와 동일하며 CueTrack 요소에 포함된 번호가 아닙니다.

형식 출력은 key=value 쌍이 있는 CuePoint 요소당 한 줄씩의 간단한 텍스트 형식입니다. 옵션 요소가 CuePoint(예: CueDuration)에 없는 경우 대시가 값으로 출력됩니다.

예:

    timestamp=00:00:13.305000000 duration=- cluster_position=757741 relative_position=11

가능한 키:

Option | Description
--- | ---
타임스탬프 | 나노초 정밀도로 큐 포인트의 타임스탬프입니다. 형식은 HH:MM:SS.nnnnnnnnn입니다. 이 요소는 항상 설정됩니다.
지속 시간 | 나노초 정밀도로 큐 포인트의 타임스탬프입니다. 형식은 HH:MM:SS.nnnnnnnnn입니다.
클러스터_위치 | 참조된 요소를 포함하는 클러스터가 시작되는 Matroska(tm) 파일 내의 절대 위치(바이트 단위). Note: Matroska(tm) 파일 내에서 CueClusterPosition은 세그먼트의 데이터 시작 오프셋에 상대적입니다. 그러나 mkvextract(1)의 큐 추출 모드에 의해 출력되는 값은 이미 오프셋을 포함하고 있으며 파일의 시작부터 절대 오프셋입니다.
상대적인_위치 | 큐 포인트가 참조하는 BlockGroup 또는 SimpleBlock 요소가 시작되는 클러스터 내의 상대 위치(바이트 단위). Note: Matroska(tm) 파일 내 Cue Relative Position은 클러스터의 데이터 시작 오프셋을 기준으로 합니다. 그러나 mkvextract(1)의 큐 추출 모드에 의해 출력되는 값은 클러스터의 ID에 상대적입니다. 파일 내의 절대 위치는 cluster_position과 relative_position을 추가하여 계산할 수 있습니다.

예:

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

# 3. 보기

챕터와 태그를 각각 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"

# 4. 텍스트 파일과 문자셋 변환

MKVToolNix 제품군의 모든 도구가 문자 집합 변환, 입력/출력 인코딩, 명령줄 인코딩 및 콘솔 인코딩을 처리하는 방법에 대한 자세한 내용은 mkvmerge(1) 매뉴얼 페이지에서 동일한 이름의 섹션을 참조하십시오.

# 5. 출력 파일 형식

출력 형식에 대한 결정은 출력 파일 이름에 사용된 확장자가 아니라 트랙 유형에 따라 결정됩니다. 현재 지원되는 트랙 유형은 다음과 같습니다.

Option | Description
--- | ---
A_AAC/MPEG2/*, A_AAC/MPEG4/*, A_AAC | 모든 AAC 파일은 각 패킷 전에 ADTS 헤더가 있는 AAC 파일에 기록됩니다. ADTS 헤더에는 사용되지 않는 강조 필드가 포함되지 않습니다.
A_AC3, A_EAC3 | 이 파일은 원본 AC-3 파일로 압축 해제됩니다.
A_ALAC | ALAC트랙은 CAF파일에 쓰여집니다.
A_DTS | 이 파일은 원본 DTS 파일로 압축 해제됩니다.
A_FLAC | FLAC트랙은 원본FLAC파일에 쓰여집니다.
A_MPEG/L2 | MPEG-1 오디오 레이어 II 스트림이 원본 MP2 파일로 추출됩니다.
A_MPEG/L3 | 이것들은 원본 MP3 파일로 압축 해제됩니다.
A_OPUS | Opus(tm)트랙은 OggOpus(tm)파일에 쓰여집니다.
A_PCM/INT/LIT, A_PCM/INT/BIG | 원본PCM데이터는 WAV파일에 쓰여집니다. Big-endian 정수 데이터는 이 과정에서 little-endian 데이터로 변환됩니다.
A_REAL/* | RealAudio(tm)트랙은 RealMedia(tm)파일에 쓰여집니다.
A_TRUEHD, A_MLP | 이것들은 원본 TrueHD/MLP 파일로 압축 해제됩니다.
A_TTA1 | TrueAudio(tm)트랙은 TTA파일에 쓰여집니다. Matroska(tm)의 제한된 타임스탬프 정밀도로 인해 추출된 파일의 헤더는 data_length(파일에 있는 샘플의 총 수)와 CRC의 두 필드에 대해 다릅니다.
A_VORBIS | Vorbis 오디오는 OggVorbis(tm) 파일로 기록될 것입니다.
A_WAVPACK4 | WavPack(tm)트랙은 WV(tm)파일에 쓰여집니다.
S_HDMV/PGS | PGS자막은 SUP파일에 쓰여집니다.
S_HDMV/TEXTST | Text ST 자막은 mkvmerge(1) 및 mkvextract(1)용으로 개발된 특별한 파일 형식으로 작성될 것입니다.
S_KATE | Kate(tm)스트림은 Ogg(tm)컨테이너에 쓰여집니다.
S_TEXT/SSA, S_TEXT/ASS, S_SSA, S_ASS | SSA와 ASS 텍스트 자막은 각각 SSA/ASS 파일로 작성됩니다.
S_TEXT/UTF8, S_TEXT/ASCII | 간단한 텍스트 자막은 SRT파일에 쓰여집니다.
S_VOBSUB | VobSub(tm) 자막은 각 인덱스 파일과 함께 SUB 파일로 작성되며, IDX 파일로 작성됩니다.
S_TEXT/USF | USF 텍스트 자막은 USF 파일에 쓰여집니다.
S_TEXT/WEBVTT | WebVTT 텍스트 자막은 WebVTT 파일에 쓰여집니다.
V_MPEG1, V_MPEG2 | MPEG-1과 MPEG-2 비디오 트랙은 MPEG 기본 스트림으로 작성됩니다.
V_MPEG4/ISO/AVC | H.264 / AVC 비디오 트랙은 H.264 기본 스트림에 기록되며, GPAC(tm) 패키지의 MP4Box(tm)와 같이 추가로 처리할 수 있습니다.
V_MPEG4/ISO/HEVC | H.265 / HEVC 비디오 트랙은 H.265 기본 스트림에 기록되며, GPAC(tm) 패키지의 MP4Box(tm)와 같이 추가로 처리할 수 있습니다.
V_MS/VFW/FOURCC | 코덱으로 고정된 FPS 비디오 트랙 수정ID'는 AVI 파일에 기록됩니다.
V_REAL/* | RealVideo(tm)트랙은 RealMedia(tm)파일에 쓰여집니다.
V_THEORA | Theora(tm)스트림은 Ogg(tm)컨테이너에 쓰여집니다.
V_VP8, V_VP9 | VP8 / VP9트랙은 IVF파일에 쓰여집니다.
태그 | 태그가 XML 형식으로 변환됩니다. 이 형식은 mkvmerge(1)가 태그 읽기에 지원하는 형식과 동일합니다.
첨부 파일 | 첨부 파일은 출력 파일에 그대로 기록됩니다. 어떠한 변환도 수행되지 않습니다.
챕터 | 챕터는 XML 형식으로 변환됩니다. 이 형식은 mkvmerge(1)가 챕터 읽기에 지원하는 형식과 동일합니다. 또는 스트립된 버전을 간단한 OGM 스타일 형식으로 출력할 수 있습니다.
타임스탬프 | 타임스탬프가 먼저 정렬된 다음 mkvmerge(1)에 공급될 준비가 된 타임스탬프 v2 형식 호환 파일로 출력됩니다. 다른 형식(v1, v3 및 v4)으로의 추출은 지원되지 않습니다.

# 6. 종료 코드

mkvextract(1) 종료 코드 세 개 중 하나로 종료:

- 0 -- 이 종료 코드는 추출이 성공적으로 완료되었음을 의미합니다.

- 1 -- 이 경우 mkvextract(1)는 경고를 하나 이상 출력했지만 추출은 계속되었습니다. 경고 앞에 'Warning:'이라는 텍스트가 붙습니다. 관련된 문제에 따라 결과 파일이 정상 또는 그렇지 않을 수 있습니다. 사용자는 경고와 결과 파일을 모두 확인해야 합니다.

- 2 -- 오류가 발생한 후 이 종료 코드가 사용됩니다. 오류 메시지를 출력한 후 mkvextract(1)가 바로 중단됩니다. 오류 메시지는 읽기/쓰기 오류에 대한 잘못된 명령줄 인수에서 손상된 파일에 이르기까지 다양합니다.

# 7. 환경 변수

mkvextract(1)는 시스템의 로케일을 결정하는 기본 변수(예: LANG 및 LC_* 제품군)를 사용합니다. 추가 변수:

Option | Description
--- | ---
MKVEXTRACT_DEBUG, MKVTOOLNIX_DEBUG 와 그 간략한 형태인MTX_DEBUG | 내용은 --debug 옵션을 통해 전달된 것으로 간주됩니다.
MKVEXTRACT_ENGAGE, MKVTOOLNIX_ENGAGE 와 그 간략한 형태인 MTX_ENGAGE | 내용은 --engage 옵션을 통해 전달된 것으로 간주됩니다.

# 8. 더 보기

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

# 9. WWW

이전 버전은 언제나 MKVToolNix 홈페이지에서 찾을 수 있습니다.