table of contents
- NAME
- PřEHLED
- POPIS
- POUžITí
- POřADí VOLEB
- PříKLADY
- ID STOP
- ZPRACOVáNí JAZYKů
- TEXTOVé SOUBORY A PřEVODY ZNAKOVýCH SAD
- SOUBORY VOLEB
- PROPOJOVáNí SOUBORů
- VýCHOZí HODNOTY
- PříLOHY
- KAPITOLY
- ŠTíTKY
- INFORMACE O úSEKU
- USPOřáDáNí SOUBORU MATROSKA(TM)
- EXTERNí SOUBORY čASOVýCH RAZíTEK
- NáVRATOVé KóDY
- PROMěNNé PROSTřEDí
- VIZ TAKé
- WWW
- AUTHOR
- NOTES
| MKVMERGE(1) | Uživatelské příkazy | MKVMERGE(1) |
NAME¶
mkvmerge - Spojit multimediální proudy do souboru Matroska(TM)
PřEHLED¶
mkvmerge [global options] {-o out} [options1] {file1} [[options2] {file2}] [@options-file.json]
POPIS¶
Tento program načte vstup z několika mediálních souborů a spojí jejich proudy (všechny nebo pouze výběr) do souboru Matroska(TM); viz web Matroska(TM)[1].
Important
Pořadí voleb příkazového řádku je důležité. Pokud program používáte poprvé, přečtěte si oddíl "Pořadí voleb".
Globální volby¶
-v, --verbose
-q, --quiet
-o, --output file-name
-w, --webm
Pro kapitoly a štítky je povolena pouze podmnožina prvků. mkvmerge(1) automaticky odstraní všechny prvky, které specifikace nepovoluje.
--title title
--default-language language-code
Výchozí jazykový kód je pro „neurčeno“ und.
Zpracování informací o úseku (globální volby)¶
--segmentinfo filename.xml
Podrobnosti viz níže v oddílu soubory XML s informacemi o úseku.
--segment-uid SID1,SID2,...
Začíná-li SID znakem =, zbytek se interpretuje jako název souboru Matroska, jehož UID úseku se načte a použije.
Každý vytvořený soubor obsahuje jeden úsek a každý úsek má jedno UID úseku. Je-li zadáno více UID úseků než vytvořených úseků, přebytečná UID se ignorují. Je-li zadáno méně UID než vytvořených úseků, vytvoří se pro ně náhodná UID.
Zpracování kapitol a štítků (globální volby)¶
--chapter-language language-code
Tuto volbu lze použít jak pro jednoduché soubory kapitol, tak pro zdrojové soubory obsahující kapitoly, ale žádné informace o jazyku kapitol, například soubory MP4 a OGM.
Jazyk nastavený touto volbou se použije také při vytváření kapitol volbou --generate-chapters.
--chapter-charset character-set
Tato volba platí také pro kapitoly kopírované z určitých typů kontejnerů, například souborů Ogg/OGM a MP4. Podrobnosti viz níže v oddílu o kapitolách.
--chapter-sync d[,o[/p]]
o/p: upraví časová razítka o o/p, aby opravil lineární posuny. Není-li p uvedeno, výchozí je 1. Hodnoty o i p mohou být čísla s pohyblivou řádovou čárkou.
Výchozí: žádná ruční oprava synchronizace (což je stejné jako d = 0 a o/p = 1.0).
Tuto volbu lze pro vstupní soubor použít vícekrát; pokaždé lze vybrat jiné ID stopy, takže platí pro několik stop.
--generate-chapters mode
Tento režim funguje také s režimy rozdělení 'parts:' a 'parts-frames:'. V těchto režimech se vytvoří jedna kapitola pro každý připojený rozsah časových razítek (ty, jejichž počáteční časové razítko má předponu '+').
Note
mkvmerge(1) vyžaduje přítomnost video nebo zvukové stopy, aby mohl určit, kdy je připojen nový soubor. Jsou-li multiplexovány jedna nebo více video stop, použije se první z nich. Jinak se použije první zvuková stopa.
Příklad: --generate-chapters interval:45s
Názvy nových kapitol řídí volba --generate-chapters-name-template. Jazyk nastavuje volba --chapter-language, která musí být uvedena před --generate-chapters.
--generate-chapters-name-template template
V šabloně lze použít několik proměnných, které se při vytvoření kapitoly nahradí skutečnými hodnotami. Řetězec '<NUM>' se nahradí číslem kapitoly. Řetězec '<START>' se nahradí počátečním časovým razítkem kapitoly.
Řetězce '<FILE_NAME>' a '<FILE_NAME_WITH_EXT>' se vyplní pouze při vytváření kapitol pro připojené soubory. Nahradí se názvem připojeného souboru bez přípony, resp. s příponou. Vkládá se pouze základní název a přípona souboru, nikoli součásti adresáře nebo jednotky.
Minimální počet míst pro číslo kapitoly můžete určit pomocí '<NUM:places>', například '<NUM:3>'. Má-li číslo méně míst než je zadáno, doplní se počátečními nulami.
Formát počátečního časového razítka lze řídit pomocí <START:format>. Není-li formát zadán, výchozí je '%H:%M:%S'. Platné kódy formátu jsou:
Řetězec '<TITLE>' se vyplní pouze při vytváření kapitol pro připojené soubory. Je-li k dispozici, nahradí se názvem připojeného souboru.
--cue-chapter-name-format format
Není-li tato volba zadána, mkvmerge(1) používá výchozí formát '%p - %t' (interpret, za ním mezera, pomlčka, další mezera a název).
Je-li formát zadán, vše kromě následujících metaznaků se zkopíruje beze změny a metaznaky se nahradí takto:
--chapters file-name
--global-tags file-name
Obecné řízení výstupu (pokročilé globální volby)¶
--track-order FID1:TID1,FID2:TID2,...
Není-li tato volba zadána, stopy se seřadí nejprve podle typu & poté podle pořadí jejich zdrojových souborů. Nejdříve budou video stopy, po nich zvukové & titulkové stopy. Ostatní zřídka používané typy stop budou zařazeny nakonec.
--cluster-length spec
Není-li použita jednotka, mkvmerge(1) vloží do každého clusteru nejvýše n datových bloků. Maximální počet bloků je 65535.
Je-li číslo d zakončeno příponou 'ms', mkvmerge(1) vloží do každého clusteru nejvýše d milisekund dat. Minimální hodnota parametru d je '100ms' a maximální '32000ms'.
mkvmerge(1) ve výchozím nastavení vkládá do clusteru nejvýše 65535 datových bloků a 5000ms dat.
Programy hledající určitý snímek se mohou přesunout přímo pouze na cluster a poté musí přečíst celý cluster. Vytváření větších clusterů proto může vést k nepřesnému nebo pomalému vyhledávání.
--clusters-in-meta-seek
--timestamp-scale factor
mkvmerge(1) běžně používá hodnotu 1000000, což znamená, že časová razítka a délky mají přesnost 1 ms. U souborů bez video stopy, avšak alespoň s jednou zvukovou stopou, mkvmerge(1) automaticky zvolí faktor měřítka časových razítek tak, aby všechna časová razítka a délky měla přesnost jednoho zvukového vzorku. Zvyšuje to režii, ale umožňuje přesné vyhledávání a extrakci.
Použije-li se zvláštní hodnota -1, mkvmerge(1) použije přesnost na jeden vzorek i v případě, že je přítomna video stopa.
--enable-durations
--no-cues
--no-date
--date timestamp
--disable-lacing
--disable-track-statistics-tags
Zapnutí této volby zabrání programu mkvmerge(1) zapisovat tyto štítky a měnit existující štítky se stejnými názvy.
--disable-language-ietf
--normalize-language-ietf mode
V kanonické podobě se všechny podznačky, pro něž existují upřednostňované hodnoty, nahradí těmito hodnotami. Tím se např. 'zh-yue-jyutping' převede na 'yue-jyutping' nebo 'fr-FX' na 'fr-FR'.
Pro podobu rozšířených jazykových podznaček se nejprve vytvoří kanonická podoba. Poté se všechny primární jazykové podznačky, pro něž existuje rozšířená jazyková podznačka, nahradí touto rozšířenou jazykovou podznačkou a její předponou. Tím se např. 'yue-jyutping' převede zpět na 'zh-yue-jyutping', na 'fr-FR' to však nemá vliv, protože 'fr' není rozšířená jazyková podznačka.
--stop-after-video-ends
Rozdělení souborů, propojování, připojování a zřetězování (další globální volby)¶
--split specification
V současnosti mkvmerge(1) podporuje následující režimy:
Syntaxe: --split [size:]d[k|m|g]
Příklady: --split size:700m nebo --split 150000000
Parametr d může končit písmenem 'k', 'm' nebo 'g', čímž se určí velikost v KB, MB, respektive GB. Jinak se předpokládá velikost v bajtech. Jakmile aktuální výstupní soubor dosáhne tohoto limitu velikosti, začne se vytvářet nový výstupní soubor.
Předponu 'size:' lze z důvodů kompatibility vynechat.
Syntaxe: --split [duration:]HH:MM:SS.nnnnnnnnn|ds
Příklady: --split duration:00:60:00.000 nebo --split 3600s
Parametr musí mít buď tvar HH:MM:SS.nnnnnnnnn pro zadání trvání s přesností až na nanosekundy, nebo musí jít o číslo d následované písmenem 's' pro trvání v sekundách. HH je počet hodin, MM počet minut, SS počet sekund a nnnnnnnnn počet nanosekund. Počet hodin i počet nanosekund lze vynechat. Za desetinnou tečkou může být až devět číslic. Jakmile trvání obsahu aktuálního výstupního souboru dosáhne tohoto limitu, začne se vytvářet nový výstupní soubor.
Předponu 'duration:' lze z důvodů kompatibility vynechat.
Syntaxe: --split timestamps:A[,B[,C...]]
Příklad: --split timestamps:00:45:00.000,01:20:00.250,6300s
Parametry A, B, C atd. musí mít stejný formát jako hodnoty délky (viz výše). Seznam časových razítek je oddělen čárkami. Jakmile vstupní proud dosáhne časového razítka aktuálního bodu rozdělení, vytvoří se nový soubor. Poté se použije další bod rozdělení uvedený v seznamu.
Předpona 'timestamps:' se nesmí vynechat.
Syntaxe: --split parts:start1-end1[,[+]start2-end2[,[+]start3-end3...]]
Příklady:
Režim parts určuje programu mkvmerge(1), aby zachoval určité rozsahy časových razítek a ostatní zahodil. Zachovávané rozsahy musí být uvedeny za klíčovým slovem parts: a odděleny čárkami. Každý rozsah se skládá z počátečního a koncového časového razítka ve stejném formátu, jaký přijímají ostatní varianty --split (např. 00:01:20 a 80s označují stejné časové razítko).
Je-li počáteční časové razítko vynecháno, použije se ve výchozím nastavení koncové časové razítko předchozího rozsahu. Nebyl-li předchozí rozsah, použije se začátek souboru (viz příklad 3).
Je-li koncové časové razítko vynecháno, použije se ve výchozím nastavení konec zdrojových souborů, čímž se programu mkvmerge(1) v podstatě určí, aby zachoval zbytek (viz příklad 3).
Každý rozsah se běžně zapíše do nového souboru. To lze změnit tak, aby se po sobě jdoucí rozsahy zapisovaly do stejného souboru. Uživatel proto musí před počáteční časové razítko vložit +. Touto předponou se programu mkvmerge(1) určí, aby nevytvářel nový soubor, ale připojil rozsah ke stejnému souboru, do něhož byl zapsán předchozí rozsah. Časová razítka se upraví tak, aby ve výstupním souboru nebyla mezera, i když mezi oběma rozsahy ve vstupním souboru mezera byla.
V příkladu 1 mkvmerge(1) vytvoří dva soubory. První bude obsahovat část obsahu od 00:01:20 do 00:02:45. Druhý soubor bude obsahovat část obsahu od 00:05:50 do 00:10:30.
V příkladu 2 mkvmerge(1) vytvoří pouze jeden soubor. Tento soubor bude obsahovat části obsahu od 00:01:20 do 00:02:45 a od 00:05:50 do 00:10:30.
V příkladu 3 mkvmerge(1) vytvoří dva soubory. První bude obsahovat část obsahu od začátku zdrojových souborů do 00:02:45. Druhý soubor bude obsahovat část obsahu od 00:05:50 do konce zdrojových souborů.
Note
Upozorňujeme, že mkvmerge(1) rozhoduje o rozdělení pouze na pozicích klíčových snímků. To platí pro začátek i konec každého rozsahu. I když tedy koncové časové razítko leží mezi dvěma klíčovými snímky, mkvmerge(1) bude nadále zapisovat snímky až po následující klíčový snímek, ten však už nezahrne.
Syntaxe: --split parts-frames:start1-end1[,[+]start2-end2[,[+]start3-end3...]]
Příklady:
Režim parts-frames určuje programu mkvmerge(1), aby zachoval určité rozsahy čísel snímků/půlsnímků a ostatní zahodil. Zachovávané rozsahy musí být uvedeny za klíčovým slovem parts-frames: a odděleny čárkami. Každý rozsah se skládá z počátečního a koncového čísla snímku/půlsnímku. Číslování začíná od 1.
Je-li počáteční číslo vynecháno, použije se ve výchozím nastavení koncové číslo předchozího rozsahu. Nebyl-li předchozí rozsah, použije se začátek souboru (viz příklad 3).
Je-li koncové číslo vynecháno, použije se ve výchozím nastavení konec zdrojových souborů, čímž se programu mkvmerge(1) v podstatě určí, aby zachoval zbytek (viz příklad 3).
Každý rozsah se běžně zapíše do nového souboru. To lze změnit tak, aby se po sobě jdoucí rozsahy zapisovaly do stejného souboru. Uživatel proto musí před počáteční číslo vložit +. Touto předponou se programu mkvmerge(1) určí, aby nevytvářel nový soubor, ale připojil rozsah ke stejnému souboru, do něhož byl zapsán předchozí rozsah. Časová razítka se upraví tak, aby ve výstupním souboru nebyla mezera, i když mezi oběma rozsahy ve vstupním souboru mezera byla.
Note
Upozorňujeme, že mkvmerge(1) rozhoduje o rozdělení pouze na pozicích klíčových snímků. To platí pro začátek i konec každého rozsahu. I když tedy koncové číslo snímku/půlsnímku leží mezi dvěma klíčovými snímky, mkvmerge(1) bude nadále zapisovat snímky až po následující klíčový snímek, ten však už nezahrne.
V příkladu 2 mkvmerge(1) vytvoří pouze jeden soubor. Tento soubor bude obsahovat části obsahu od 733 do 912 a od 1592 do 2730.
V příkladu 3 mkvmerge(1) vytvoří dva soubory. První bude obsahovat část obsahu od začátku zdrojových souborů do 430. Druhý soubor bude obsahovat část obsahu od 2512 do konce zdrojových souborů.
Tento režim zohledňuje pouze první výstupní video stopu. Není-li výstupní žádná video stopa, nedojde k rozdělení.
Note
Čísla zadaná pomocí tohoto argumentu se interpretují podle počtu výstupních bloků Matroska(TM). Jeden blok Matroska(TM) obsahuje buď celý snímek (u progresivního obsahu), nebo jedno pole (u prokládaného obsahu). mkvmerge mezi nimi nerozlišuje a jednoduše počítá bloky. Příklad: chcete-li prokládaný obsah rozdělit po 25. celém snímku, je nutné jako bod rozdělení použít 50 (dvě pole na celý snímek).
Syntaxe: --split frames:A[,B[,C...]]
Příklad: --split frames:120,237,891
Parametry A, B, C atd. musí být kladná celá čísla. Číslování začíná od 1. Seznam čísel snímků/půlsnímků je oddělen čárkami. Jakmile vstupní proud dosáhne čísla snímku/pole aktuálního bodu rozdělení, vytvoří se nový soubor. Poté se použije další bod rozdělení uvedený v seznamu.
Předpona 'frames:' se nesmí vynechat.
Tento režim zohledňuje pouze první výstupní video stopu. Není-li výstupní žádná video stopa, nedojde k rozdělení.
Note
Čísla zadaná pomocí tohoto argumentu se interpretují podle počtu výstupních bloků Matroska(TM). Jeden blok Matroska(TM) obsahuje buď celý snímek (u progresivního obsahu), nebo jedno pole (u prokládaného obsahu). mkvmerge mezi nimi nerozlišuje a jednoduše počítá bloky. Příklad: chcete-li prokládaný obsah rozdělit po 25. celém snímku, je nutné jako bod rozdělení použít 50 (dvě pole na celý snímek).
Syntaxe: --split chapters:all nebo --split chapters:A[,B[,C...]]
Příklad: --split chapters:5,8
Parametry A, B, C atd. musí být kladná celá čísla. Číslování začíná od 1. Seznam čísel kapitol je oddělen čárkami. K rozdělení dojde těsně před prvním klíčovým snímkem, jehož časové razítko je stejné nebo vyšší než počáteční časové razítko kapitol s uvedenými čísly. Kapitola začínající v čase 0s se při rozdělení nikdy nezohlední a bez upozornění se zahodí.
Klíčové slovo all lze použít místo ručního výpisu všech čísel kapitol.
Předpona 'chapters:' se nesmí vynechat.
Note
Formát souborů Matroska(TM) podporuje libovolně hluboce vnořené struktury kapitol nazývané 'položky edice' a 'atomy kapitol'. Tento režim však zohledňuje jen nejvyšší úroveň kapitol ve všech položkách edice.
V tomto režimu rozdělení se s názvem výstupního souboru zachází jinak než při běžném zpracování. Může obsahovat výraz ve stylu printf '%d' včetně volitelné šířky pole, např. '%02d'. Pokud jej obsahuje, aktuální číslo souboru se odpovídajícím způsobem naformátuje a vloží na dané místo názvu souboru. Není-li takový vzor přítomen, před příponou souboru se předpokládá vzor '-%03d': '-o output.mkv' vytvoří 'output-001.mkv' atd. Nemá-li název příponu, '-%03d' se připojí k názvu.
Dalším možným vzorem je '%c', který se nahradí názvem první kapitoly v souboru. Je-li přítomen '%c', vzor '-%03d' se nepřidá automaticky.
--link
--link-to-previous segment-UID
Začíná-li SID znakem =, zbytek se interpretuje jako název souboru Matroska, jehož UID úseku se načte a použije.
--link-to-next segment-UID
Začíná-li SID znakem =, zbytek se interpretuje jako název souboru Matroska, jehož UID úseku se načte a použije.
--append-mode mode
Když mkvmerge připojí stopu (dále 'track2_1') z druhého souboru (dále 'file2') ke stopě (dále 'track1_1') z prvního souboru (dále 'file1'), musí všechna časová razítka stopy 'track2_1' posunout o určitou hodnotu. V režimu 'file' je touto hodnotou nejvyšší časové razítko nalezené v 'file1', i když pocházelo z jiné stopy než 'track1_1'. V režimu 'track' se jako posun použije nejvyšší časové razítko stopy 'track1_1'.
mkvmerge bohužel nedokáže spolehlivě zjistit, který režim použít. Proto je výchozí režim 'file'. Režim 'file' obvykle funguje lépe pro soubory vytvořené nezávisle na sobě, např. při připojování souborů AVI nebo MP4. Režim 'track' může fungovat lépe pro zdroje, které jsou v podstatě pouze částmi jednoho velkého souboru, např. pro soubory VOB a EVO.
S titulkovými stopami se vždy zachází, jako by byl aktivní režim 'file', i když je ve skutečnosti aktivní režim 'track'.
--append-to SFID1:STID1:DFID1:DTID1[,...]
Je-li tato volba vynechána, použije se standardní mapování. Při něm se každá stopa z aktuálního souboru připojí ke stopě z předchozího souboru se stejným ID stopy. Pokud byl film rozdělen na dvě části a oba soubory mají stejný počet stop i stejná ID stop, umožňuje to jejich snadné připojení příkazem mkvmerge -o output.mkv part1.mkv +part2.mkv.
+
$ mkvmerge -o full.mkv file1.mkv + file2.mkv $ mkvmerge -o full.mkv file1.mkv +file2.mkv
[ file1 file2 ]
Toto je alternativní syntaxe k použití znaku '+' mezi názvy souborů. Následující dva příkazy jsou proto ekvivalentní:
$ mkvmerge -o full.mkv file1.mkv + file2.mkv $ mkvmerge -o full.mkv '[' file1.mkv file2.mkv ']'
=
Znak '=' lze také umístit před název následujícího souboru. Následující dva příkazy jsou proto ekvivalentní:
$ mkvmerge -o full.mkv = file1.vob $ mkvmerge -o full.mkv =file1.vob
( file1 file2 )
To lze použít například pro soubory VOB pocházející z DVD nebo pro transportní proudy MPEG. Nelze to použít, pokud každý soubor obsahuje vlastní sadu hlaviček, což bývá případ samostatných souborů, jako jsou AVI nebo MP4.
Umístění názvu souboru do kulatých závorek také způsobí, že mkvmerge(1) nebude hledat další soubory se stejným základním názvem, jak je popsáno u volby =. Následující dva příkazové řádky jsou proto rovnocenné:
$ mkvmerge -o out.mkv = file.mkv
$ mkvmerge -o out.mkv '(' file.mkv ')'
Je třeba vzít v úvahu několik věcí:
Podpora příloh (další globální volby)¶
--attachment-description description
--attachment-mime-type MIME type
Není-li pro přílohu uveden žádný typ MIME, její typ se zjistí automaticky.
--attachment-name name
--attach-file file-name, --attach-file-once file-name
mkvextract(1) lze použít k extrahování připojených souborů ze souboru Matroska(TM).
--enable-legacy-font-mime-types
Týká se to jak nových příloh, pokud se jejich typ MIME zjišťuje automaticky, tak existujících příloh, jejichž uložené typy MIME se přemapují na zastaralé typy.
Dotčenými typy MIME jsou 'font/sfnt', 'font/ttf' a 'font/collection', které se všechny mapují na 'application/x-truetype-fonts', a 'font/otf', který se mapuje na 'application/vnd.ms-opentype'.
Volby, které lze použít pro každý vstupní soubor¶
-a, --audio-tracks [!]n,m,...
Místo ID stop lze zadat také jazykové kódy ISO 639-2. Funguje to pouze pro zdrojové soubory, které pro své stopy poskytují jazykové značky.
Výchozí: zkopírovat všechny stopy tohoto druhu.
Mají-li ID předponu !, význam se obrátí: zkopírují se všechny stopy tohoto druhu kromě stop uvedených za !.
-d, --video-tracks [!]n,m,...
Místo ID stop lze zadat také jazykové kódy ISO 639-2. Funguje to pouze pro zdrojové soubory, které pro své stopy poskytují jazykové značky.
Mají-li ID předponu !, význam se obrátí: zkopírují se všechny stopy tohoto druhu kromě stop uvedených za !.
-s, --subtitle-tracks [!]n,m,...
Místo ID stop lze zadat také jazykové kódy ISO 639-2. Funguje to pouze pro zdrojové soubory, které pro své stopy poskytují jazykové značky.
Mají-li ID předponu !, význam se obrátí: zkopírují se všechny stopy tohoto druhu kromě stop uvedených za !.
-b, --button-tracks [!]n,m,...
Místo ID stop lze zadat také jazykové kódy ISO 639-2. Funguje to pouze pro zdrojové soubory, které pro své stopy poskytují jazykové značky.
Mají-li ID předponu !, význam se obrátí: zkopírují se všechny stopy tohoto druhu kromě stop uvedených za !.
--track-tags [!]n,m,...
Mají-li ID předponu !, význam se obrátí: zkopíruje se vše kromě ID uvedených za !.
-m, --attachments [!]n[:all|first],m[:all|first],...
Ve výchozím stavu se všechny přílohy zkopírují do všech výstupních souborů.
Mají-li ID předponu !, význam se obrátí: zkopíruje se vše kromě ID uvedených za !.
-A, --no-audio
-D, --no-video
-S, --no-subtitles
-B, --no-buttons
-T, --no-track-tags
--no-chapters
-M, --no-attachments
--no-global-tags
--regenerate-track-uids
Toto chování se automaticky povoluje pro soubory Matroska vytvořené programem MakeMKV. Důvodem je, že MakeMKV používá jako UID po sobě jdoucí čísla (1, 2, 3...) namísto generování náhodných hodnot.
-y, --sync TID:d[,o[/p]]
o/p: upraví časová razítka o o/p, aby opravil lineární posuny. Není-li p uvedeno, výchozí je 1. Hodnoty o i p mohou být čísla s pohyblivou řádovou čárkou.
Výchozí: žádná ruční oprava synchronizace (což je stejné jako d = 0 a o/p = 1.0).
Tuto volbu lze pro vstupní soubor použít vícekrát; pokaždé lze vybrat jiné ID stopy, takže platí pro několik stop.
--cues TID:none|iframes|all
Výchozí hodnotou je 'iframes' pro video a titulkové stopy a 'none' pro zvukové stopy. Viz také volba --no-cues, která zakáže vytváření položek indexu bez ohledu na použité volby --cues.
Tuto volbu lze pro vstupní soubor použít vícekrát; pokaždé lze vybrat jiné ID stopy, takže platí pro několik stop.
--default-track-flag TID[:bool]
Nevybere-li uživatel během přehrávání stopu výslovně, měl by přehrávač vybrat jednu ze stop s nastaveným příznakem "výchozí stopa" a zohlednit přitom uživatelské předvolby, například upřednostňovaný jazyk.
Tuto volbu lze pro vstupní soubor použít vícekrát; pokaždé lze vybrat jiné ID stopy, takže platí pro několik stop.
--track-enabled-flag TID[:bool]
Při přehrávání se mají zohlednit pouze stopy, pro něž je nastaven příznak "povolená stopa".
Tuto volbu lze pro vstupní soubor použít vícekrát; pokaždé lze vybrat jiné ID stopy, takže platí pro několik stop.
--forced-display-flag TID[:bool]
Tuto volbu lze pro vstupní soubor použít vícekrát; pokaždé lze vybrat jiné ID stopy, takže platí pro několik stop.
--hearing-impaired-flag TID[:bool]
Tuto volbu lze pro vstupní soubor použít vícekrát; pokaždé lze vybrat jiné ID stopy, takže platí pro několik stop.
--visual-impaired-flag TID[:bool]
Tuto volbu lze pro vstupní soubor použít vícekrát; pokaždé lze vybrat jiné ID stopy, takže platí pro několik stop.
--text-descriptions-flag TID[:bool]
Tuto volbu lze pro vstupní soubor použít vícekrát; pokaždé lze vybrat jiné ID stopy, takže platí pro několik stop.
--original-flag TID[:bool]
Tuto volbu lze pro vstupní soubor použít vícekrát; pokaždé lze vybrat jiné ID stopy, takže platí pro několik stop.
--commentary-flag TID[:bool]
Tuto volbu lze pro vstupní soubor použít vícekrát; pokaždé lze vybrat jiné ID stopy, takže platí pro několik stop.
--track-name TID:name
--language TID:language
Tuto volbu lze pro vstupní soubor použít vícekrát; pokaždé lze vybrat jiné ID stopy, takže platí pro několik stop.
-t, --tags TID:file-name
--aac-is-sbr TID[:0|1]
Je-li zdrojovým souborem soubor Matroska(TM), měl by CodecID stačit k rozpoznání SBR AAC. Je-li však CodecID chybný, lze tuto volbu použít k jeho opravě.
Rozpozná-li mkvmerge chybně soubor AAC jako SBR, můžete k ID stopy přidat ':0'.
--audio-emphasis TID:n|symbolic-name
--reduce-to-core TID
V současnosti se tato volba týká pouze stop DTS. Stopy TrueHD obsahující vložené jádro AC-3 se namísto toho zobrazují jako dvě samostatné stopy, z nichž může uživatel vybrat, kterou zkopírovat. U DTS by takové řešení nefungovalo, protože rozšíření HD nelze na rozdíl od dat TrueHD dekódovat samostatně.
--remove-dialog-normalization-gain TID
V současnosti se tato volba týká pouze stop AC-3, DTS a TrueHD.
--timestamps TID:file-name
--default-duration TID:x
Není-li výchozí délka vynucena, pokusí se mkvmerge u určitých typů stop, např. AVC/H.264 nebo MPEG-2, odvodit výchozí délku stopy z kontejneru nebo zakódovaného bitového toku, případně z obou.
Touto volbou lze také změnit FPS video stop, aniž by bylo nutné použít externí soubor časových razítek.
--fix-bitstream-timing-information TID[:0|1]
Note
Dosud je to implementováno pouze pro video stopy AVC/H.264.
--compression TID:n
Metoda komprese 'mpeg4_p2'/'mpeg4p2' je zvláštní metoda zvaná 'odstranění hlavičky', která je dostupná pouze pro video stopy MPEG4 část 2.
Pro některé typy titulků je výchozí komprese 'zlib'. Tuto metodu komprese podporuje také většina, ne-li všechny přehrávací aplikace. Podpora jiných metod komprese než 'none' není zaručena.
Volby, které se vztahují pouze na video stopy¶
-f, --fourcc TID:FourCC
--display-dimensions TID:widthxheight
Hodnoty lze zadat také volbou --aspect-ratio nebo --aspect-ratio-factor (viz níže). Tyto volby se navzájem vylučují.
--aspect-ratio TID:ratio|width/height
Hodnoty lze zadat také volbami --aspect-ratio-factor nebo --display-dimensions (viz výše a níže). Tyto volby se navzájem vylučují.
--aspect-ratio-factor TID:factor|n/d
Hodnoty lze zadat také volbami --aspect-ratio nebo --display-dimensions (viz výše). Tyto volby se navzájem vylučují.
--cropping TID:left,top,right,bottom
--color-matrix-coefficients TID:n
Platné hodnoty a jejich význam jsou:
0: GBR, 1: BT709, 2: neurčeno, 3: vyhrazeno, 4: FCC, 5: BT470BG, 6: SMPTE 170M, 7: SMPTE 240M, 8: YCOCG, 9: BT2020 s nekonstantním jasem, 10: BT2020 s konstantním jasem
--color-bits-per-channel TID:n
--chroma-subsample TID:hori,vert
Příklad: U videa s podvzorkováním chrominance 4:2:0 má být parametr nastaven na TID:1,1.
--cb-subsample TID:hori,vert
Příklad: U videa s podvzorkováním chrominance 4:2:1 má být parametr --chroma-subsample nastaven na TID:1,0 a podvzorkování Cb na TID:1,0.
--chroma-siting TID:hori,vert
--color-range TID:n
--color-transfer-characteristics TID:n
Platné hodnoty a jejich význam jsou:
0: vyhrazeno, 1: ITU-R BT.709, 2: neurčeno, 3: vyhrazeno, 4: křivka gama 2.2, 5: křivka gama 2.8, 6: SMPTE 170M, 7: SMPTE 240M, 8: lineární, 9: log, 10: odmocnina z log, 11: IEC 61966-2-4, 12: rozšířený barevný gamut ITU-R BT.1361, 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
Platné hodnoty a jejich význam jsou:
0: vyhrazeno, 1: ITU-R BT.709, 2: neurčeno, 3: vyhrazeno, 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: luminofory JEDEC P22
--max-content-light TID:n
--max-frame-light TID:n
--chromaticity-coordinates TID:red-x,red-y,green-x,green-y,blue-x,blue-y
--white-color-coordinates TID:x,y
--max-luminance TID:float
--min-luminance TID:float
--projection-type TID:method
--projection-private TID:data
--projection-pose-yaw TID:float
--projection-pose-pitch TID:float
--projection-pose-roll TID:float
--field-order TID:n
0: progresivní; 1: prokládané, horní půlsnímek se zobrazí jako první a uloží jako první; 2: neurčené pořadí půlsnímků; 6: prokládané, dolní půlsnímek se zobrazí jako první a uloží jako první; 9: prokládané, dolní půlsnímek se zobrazí jako první a horní půlsnímek se uloží jako první; 14: prokládané, horní půlsnímek se zobrazí jako první a dolní půlsnímek se uloží jako první
--stereo-mode TID:n|symbolic-name
Volby, které platí pouze pro textové titulkové stopy¶
--sub-charset TID:character-set
Tuto volbu lze pro vstupní soubor použít vícekrát; pokaždé lze vybrat jiné ID stopy, takže platí pro několik stop.
Další volby¶
-i, --identify file-name
Výstupní formát výsledku lze změnit volbou --identification-format.
-J file-name
-F, --identification-format format
Tento formát není určen ke strojovému zpracování. Výstup se přeloží do jazyka používaného programem mkvmerge(1) (viz také --ui-language).
mkvmerge-identification-output-schema-v20.json[3]
Všechny verze schématu JSON jsou dostupné online i ve vydaných archivech zdrojového kódu.
--probe-range-percentage percentage
Je-li známo, že stopy jsou přítomny, ale nebyly nalezeny, lze touto volbou změnit procento prohledávaných dat. Minimum 10 MB je pevně vestavěno a nelze je změnit.
--list-audio-emphasis
--list-languages
--list-stereo-modes
-l, --list-types
--priority priority
Výběr hodnoty 'lowest' způsobí, že mkvmerge(1) vedle nejnižší možné priority procesu zvolí také prioritu I/O v režimu nečinnosti.
--command-line-charset character-set
--output-charset character-set
-r, --redirect-output file-name
--no-bom
--flush-on-close
--ui-language code
--abort-on-warnings
--deterministic seed
Počáteční hodnota může být libovolný řetězec a nemusí být číslem.
Výsledek bajtově shodných souborů je zaručen pouze při následujících podmínkách:
Použití jiných verzí mkvmerge(1) nebo jiných voleb příkazového řádku může vést ke stejnému bajtově shodnému souboru, není to však zaručeno.
--debug topic
--engage feature
--gui-mode
@options-file.json
Chcete-li použít znak @ jako první znak argumentu volby, například '--title', musíte jej zdvojit přidáním druhého znaku @. Příklad:
$ mkvmerge -o midnight-s01e01.mkv --title @@midnight midnight-s01e01.mp4
--capabilities
-h, --help
-V, --version
POUžITí¶
U každého souboru může uživatel vybrat, které stopy má mkvmerge(1) převzít. Všechny se vloží do souboru zadaného volbou -o. Seznam známých (a podporovaných) zdrojových formátů lze získat volbou -l.
Important
Pořadí voleb příkazového řádku je důležité. Pokud program používáte poprvé, přečtěte si oddíl "Pořadí voleb".
POřADí VOLEB¶
Pořadí, v němž se zadávají volby, je u některých voleb důležité. Volby spadají do dvou kategorií:
Volby se zpracovávají zleva doprava. Objeví-li se volba ve stejném rozsahu vícekrát, použije se její poslední výskyt. V následujícím příkladu se proto název nastaví na "Something else":
$ mkvmerge -o output.mkv --title 'This and that' input.avi --title 'Something else'
Následující příklad ukazuje, že dvojí použití volby --language je v pořádku, protože je použita v různých rozsazích. Přestože se obě použití vztahují ke stejnému ID stopy, platí pro různé vstupní soubory, a mají proto různé rozsahy:
$ mkvmerge -o output.mkv --language 0:fre français.ogg --language 0:deu deutsch.ogg
PříKLADY¶
Předpokládejme, že máte soubor MyMovie.avi a zvukovou stopu v samostatném souboru, např. 'MyMovie.wav'. Nejprve chcete zvuk zakódovat do OggVorbis(TM):
$ oggenc -q4 -oMyMovie.ogg MyMovie.wav
Po několika minutách můžete spojit video a zvuk:
$ mkvmerge -o MyMovie-with-sound.mkv MyMovie.avi MyMovie.ogg
Obsahuje-li váš soubor AVI již zvukovou stopu, zkopíruje se také (pokud mkvmerge(1) daný zvukový formát podporuje). Chcete-li tomu zabránit, jednoduše použijte
$ mkvmerge -o MyMovie-with-sound.mkv -A MyMovie.avi MyMovie.ogg
Po chvíli přemýšlení vyextrahujete další zvukovou stopu, například komentář režiséra nebo stopu v jiném jazyce, do souboru 'MyMovie-add-audio.wav'. Znovu ji zakódujte a spojte s druhým souborem:
$ oggenc -q4 -oMyMovie-add-audio.ogg MyMovie-add-audio.wav $ mkvmerge -o MM-complete.mkv MyMovie-with-sound.mkv MyMovie-add-audio.ogg
Stejného výsledku lze dosáhnout pomocí
$ mkvmerge -o MM-complete.mkv -A MyMovie.avi MyMovie.ogg MyMovie-add-audio.ogg
Nyní spusťte mplayer(TM) a užívejte si výsledek. Máte-li více zvukových stop (nebo dokonce video stop), můžete programu mplayer(TM) volbami '-vid' a '-aid' určit, kterou stopu má přehrát. Číslování začíná od 0 a nerozlišuje mezi videem a zvukem.
Potřebujete-li zvukovou stopu synchronizovat, lze to snadno provést. Nejprve zjistěte ID stopy Vorbis pomocí
$ mkvmerge --identify outofsync.ogg
Nyní můžete toto ID použít v následujícím příkazovém řádku:
$ mkvmerge -o goodsync.mkv -A source.avi -y 12345:200 outofsync.ogg
Tím by se na začátek zvukové stopy s ID 12345 převzaté ze souboru 'outofsync.ogg' přidalo 200 ms ticha.
Některé filmy začínají správně synchronizované, ale postupně se rozcházejí. Pro takové filmy lze zadat faktor zpoždění, který se použije na všechna časová razítka -- žádná data se nepřidají ani neodeberou. Je-li faktor příliš velký nebo příliš malý, bude výsledek chybný. Například jedna mnou překódovaná epizoda byla 0.2 sekundy mimo synchronizaci na konci filmu, který měl 77340 snímků. Při 29.97fps odpovídá 0.2 sekundy přibližně 6 snímkům. Použil jsem tedy
$ mkvmerge -o goodsync.mkv -y 23456:0,77346/77340 outofsync.mkv
Výsledek byl v pořádku.
Volby synchronizace lze stejným způsobem použít i pro titulky.
Pro textové titulky můžete použít buď některý program pro Windows (například SubRipper(TM)), nebo balíček subrip(TM), který se nachází ve zdrojích programu transcode(1) v adresáři 'contrib/subrip'. Obecný postup je následující:
$ tccat -i /path/to/copied/dvd/ -T 1 -L | tcextract -x ps1 -t vob -a 0x20 | subtitle2pgm -o mymovie
$ pgm2txt mymovie
$ ispell -d american *txt
$ srttool -s -w -i mymovie.srtx -o mymovie.srt
Výsledný soubor lze použít jako další vstupní soubor pro mkvmerge(1):
$ mkvmerge -o mymovie.mkv mymovie.avi mymovie.srt
Chcete-li zadat jazyk určité stopy, lze to snadno provést. Nejprve zjistěte kód ISO 639-2 svého jazyka. mkvmerge(1) vám může všechny tyto kódy vypsat:
$ mkvmerge --list-languages
Vyhledejte v seznamu potřebné jazyky. Předpokládejme, že jste do souboru Matroska(TM) vložili dvě zvukové stopy, chcete nastavit jejich jazykové kódy a jejich ID stop jsou 2 a 3. Lze to provést příkazem
$ mkvmerge -o with-lang-codes.mkv --language 2:ger --language 3:dut without-lang-codes.mkv
Jak vidíte, volbu --language lze použít vícekrát.
Možná také chcete, aby přehrávač ve výchozím nastavení používal nizozemštinu. Máte rovněž další titulky, například anglické a francouzské, a chcete, aby přehrávač ve výchozím nastavení zobrazoval francouzské. Lze to provést příkazem
$ mkvmerge -o with-lang-codes.mkv --language 2:ger --language 3:dut --default-track-flag 3 without-lang-codes.mkv --language 0:eng english.srt --default-track-flag 0 --language 0:fre french.srt
Nevidíte-li ve výstupu mkvinfo(1) zadané příznaky jazyka nebo výchozí stopy, přečtěte si oddíl o výchozích hodnotách.
Vypne kompresi pro vstupní soubor.
$ mkvmerge -o no-compression.mkv --compression -1:none MyMovie.avi --compression -1:none mymovie.srt
ID STOP¶
Běžná ID stop¶
Některé volby mkvmerge(1) vyžadují ID stopy k určení, na kterou stopu se mají použít. Tato ID stop vypisují čtečky při demultiplexování aktuálního vstupního souboru nebo se vypíší při spuštění mkvmerge(1) s volbou --identify. Příklad takového výstupu:
$ mkvmerge -i v.mkv File 'v.mkv': container: Matroska(TM) Track ID 0: video (V_MS/VFW/FOURCC, DIV3) Track ID 1: audio (A_MPEG/L3)
Nezaměňujte ID přiřazená stopám vkládaným do výstupního souboru MKV s ID stop vstupních souborů. Pro volby vyžadující tyto hodnoty se používají pouze ID stop vstupních souborů.
Každý vstupní soubor má navíc vlastní sadu ID stop. ID stop souboru 'file1.ext' oznámená příkazem 'mkvmerge --identify' se proto nemění bez ohledu na počet ostatních vstupních souborů nebo pozici, na které je 'file1.ext' použit.
ID stop se přiřazují takto:
ID stop se používají u voleb, jejichž popis obsahuje 'TID'. Používají je také následující volby: --audio-tracks, --video-tracks, --subtitle-tracks, --button-tracks a --track-tags.
Zvláštní ID stop¶
Existuje několik ID se zvláštním významem, která se nevyskytují ve výstupu identifikace.
Zvláštní ID stopy '-1' je zástupný znak a použije zadanou volbu na všechny stopy načtené ze vstupního souboru.
Zvláštní ID stopy '-2' odkazuje na kapitoly ve zdrojovém souboru. Toto zvláštní ID v současnosti používá pouze volba --sync. Jako alternativu k --sync -2:... lze použít volbu --chapter-sync ....
ZPRACOVáNí JAZYKů¶
Matroska(TM) podporuje dva různé typy jazykových prvků: starý, zastaralý prvek "Language" obsahující třípísmenné kódy ISO 639-2 a nové značky "LanguageIETF" obsahující jazykové značky IETF BCP 47. Všechny volby mkvmerge(1), které přijímají jazyk, přijímají jazykovou značku BCP 47. Kdykoli je to možné, mkvmerge(1) odvodí hodnotu zastaralého prvku "Language" z jazykových značek BCP 47.
Při identifikaci souboru v režimu JSON se existující prvky "LanguageIETF" v hlavičkách stop vypíší jako vlastnost stopy language_ietf.
Při zápisu souboru mkvmerge(1) vždy zapíše prvky "LanguageIETF", "ChapLanguageIETF" a "TagLanguageIETF" (poslední dva pouze tehdy, zapisují-li se kapitoly, respektive štítky). Vedle těchto prvků se zapíší odpovídající staré prvky, které budou nastaveny na část jazykové značky BCP 47 tvořenou kódem ISO 639-2. Je-li například jazyk stopy nastaven na sr-Cyrl-RS, "LanguageIETF" se nastaví na sr-Cyrl-RS a starý prvek "Language" na srp.
Při čtení existujících souborů (souborů Matroska, souborů kapitol nebo štítků XML atd.), které již obsahují prvky "...LanguageIETF", se tyto prvky zachovají. Jinak se prvky "...LanguageIETF" přidají na základě voleb příkazového řádku a ostatních existujících zastaralých prvků "...Language".
Vytváření nových prvků lze zcela zakázat volbou příkazového řádku --disable-language-ietf, která působí na všechny tři nové prvky.
Parametrem --normalize-language-ietf lze zvolit metodu normalizace používanou pro rozšířené jazykové podznačky.
TEXTOVé SOUBORY A PřEVODY ZNAKOVýCH SAD¶
Úvod¶
Veškerý text v souboru Matroska(TM) je kódován v UTF-8. mkvmerge(1) proto musí převádět každý načtený textový soubor i každý text zadaný na příkazovém řádku z určité znakové sady do UTF-8. Zároveň to znamená, že výstup mkvmerge(1) musí být z UTF-8 převeden zpět do této znakové sady, například při použití jiného než anglického překladu s volbou --ui-language nebo u textu pocházejícího ze souboru Matroska(TM).
mkvmerge(1) tento převod provádí automaticky podle přítomnosti značky pořadí bajtů (zkráceně BOM) nebo aktuálního národního prostředí systému. Způsob odvození znakové sady z národního prostředí závisí na operačním systému, na kterém mkvmerge(1) běží.
Značky pořadí bajtů (BOM)¶
Textové soubory začínající značkou BOM jsou již zakódovány v některé reprezentaci UTF. mkvmerge(1) podporuje následujících pět režimů: UTF-8, UTF-16 s pořadím bajtů Little Endian a Big Endian a UTF-32 s pořadím bajtů Little Endian a Big Endian. Textové soubory s BOM se automaticky převádějí do UTF-8. Všechny parametry, které by jinak nastavovaly znakovou sadu takového souboru (např. --sub-charset), se bez upozornění ignorují.
Linux a systémy podobné Unixu včetně macOS¶
Na systémech podobných Unixu používá mkvmerge(1) systémové volání setlocale(3), které používá proměnné prostředí LANG, LC_ALL a LC_CTYPE. Výslednou znakovou sadou je často UTF-8 nebo některá ze sady ISO-8859-*; používá se pro všechny operace s textovými soubory, pro kódování řetězců na příkazovém řádku i pro výstup do konzole.
Windows¶
V systému Windows se výchozí znaková sada používaná k převodu textových souborů určuje voláním systémové funkce GetACP().
Příkazový řádek se načítá funkcí GetCommandLineW(), která již vrací řetězec Unicode. Volba --command-line-charset se proto v systému Windows ignoruje.
Při výstupu do konzole nastávají tři případy:
Volby příkazového řádku¶
Pro zadání znakových sad jsou k dispozici následující volby:
SOUBORY VOLEB¶
Soubor voleb je soubor, ze kterého může mkvmerge(1) načíst další argumenty příkazového řádku. Lze jím obejít určitá omezení shellu nebo operačního systému při spouštění externích programů, například omezenou délku příkazového řádku.
Soubor voleb obsahuje data ve formátu JSON. Jeho obsah musí být platné pole JSON tvořené výhradně řetězci JSON. Soubor musí být kódován v UTF-8. Neměl by začínat značkou pořadí bajtů (BOM), je-li však přítomna, přeskočí se.
Pravidla pro uvozování zvláštních znaků uvnitř JSON stanovuje oficiální specifikace JSON, RFC 7159[4].
Samotný název souboru voleb musí být zadán jako argument příkazového řádku s předponou tvořenou znakem '@'.
Příkazový řádek 'mkvmerge -o "my file.mkv" -A "a movie.avi" sound.ogg' lze převést na následující soubor voleb JSON nazvaný například 'options.json':
[
"-o",
"c:\\Matroska\\my file.mkv",
"--title",
"#65",
"-A",
"a movie.avi",
"sound.ogg" ]
Odpovídající příkaz by potom byl 'mkvmerge @options.json'.
PROPOJOVáNí SOUBORů¶
Matroska(TM) podporuje propojování souborů, jímž se jednoduše určuje, že určitý soubor je předchůdcem nebo následníkem aktuálního souboru. Přesněji řečeno nejsou ve skutečnosti propojeny soubory, ale úseky Matroska(TM). Protože většina souborů bude pravděpodobně obsahovat pouze jeden úsek Matroska(TM), používají následující vysvětlení pojem 'propojování souborů', přestože přesnější by bylo 'propojování úseků'.
Každý úsek je identifikován jedinečným 128bitovým UID úseku. Toto UID automaticky vytváří mkvmerge(1). Propojení se provádí především vložením UID úseků (zkráceně SID) předchozího/následujícího souboru do informací v hlavičce úseku. mkvinfo(1) tyto identifikátory SIDs vypíše, pokud je najde.
Je-li soubor rozdělen na několik menších a použije se propojování, časová razítka nezačnou znovu od 0, ale pokračují od místa, kde skončil předchozí soubor. Tím se zachová absolutní čas, i když předchozí soubory nejsou dostupné (např. při streamování). Není-li propojování použito, měla by časová razítka každého souboru začínat od 0. Ve výchozím nastavení mkvmerge(1) propojování souborů nepoužívá. Chcete-li je použít, můžete je zapnout volbou --link. Tato volba má význam pouze tehdy, je-li aktivováno také rozdělení.
Bez ohledu na to, zda je rozdělení aktivní, může uživatel programu mkvmerge(1) určit, aby vytvořené soubory propojil s konkrétními SIDs. K tomu slouží volby --link-to-previous a --link-to-next. Tyto volby přijímají SID úseku ve formátu vypisovaném programem mkvinfo(1): 16 šestnáctkových čísel mezi 0x00 a 0xff, z nichž každé má předponu '0x', např. '0x41 0xda 0x73 0x66 0xd9 0xcf 0xb2 0x1e 0xae 0x78 0xeb 0xb4 0x5e 0xca 0xb3 0x93'. Alternativně lze použít kratší podobu: 16 šestnáctkových čísel mezi 0x00 a 0xff bez předpon '0x' a bez mezer, např. '41da7366d9cfb21eae78ebb45ecab393'.
Je-li použito rozdělení, první soubor se propojí s SID zadaným volbou --link-to-previous a poslední soubor s SID zadaným volbou --link-to-next. Není-li rozdělení použito, jediný výstupní soubor se propojí s oběma identifikátory SIDs.
VýCHOZí HODNOTY¶
Specifikace Matroska(TM) stanovuje pro některé prvky výchozí hodnotu. Je-li hodnota prvku rovna jeho výchozí hodnotě, prvek se do souboru obvykle nezapisuje, aby se šetřilo místem. Prvky, které může uživatel postrádat ve výstupu mkvinfo(1), jsou language a default track flag. Výchozí hodnotou prvku language je angličtina ('eng') a výchozí hodnotou prvku default track flag je true. Použijete-li tedy pro stopu --language 0:eng, ve výstupu mkvinfo(1) se neobjeví.
PříLOHY¶
Možná chcete se souborem Matroska(TM) uchovat také fotografie nebo používáte titulky SSA a potřebujete zvláštní, velmi vzácné písmo TrueType(TM). V takových případech lze tyto soubory přiložit k souboru Matroska(TM). Nebudou k souboru pouze připojeny, ale vloží se do něj. Přehrávač pak může tyto soubory zobrazit (v případě 'fotografií') nebo je použít k vykreslení titulků (v případě 'písem TrueType(TM)').
Zde je příklad, jak k výstupnímu souboru přiložit fotografii a písmo TrueType(TM):
$ mkvmerge -o output.mkv -A video.avi sound.ogg \
--attachment-description "Me and the band behind the stage in a small get-together" \
--attachment-mime-type image/jpeg \
--attach-file me_and_the_band.jpg \
--attachment-description "The real rare and unbelievably good looking font" \
--attachment-mime-type application/octet-stream \
--attach-file really_cool_font.ttf
Je-li jako vstupní soubor použit soubor Matroska(TM) obsahující přílohy, mkvmerge(1) zkopíruje přílohy do nového souboru. Výběr příloh, které se mají zkopírovat a které nikoli, lze změnit volbami --attachments a --no-attachments.
KAPITOLY¶
Systém kapitol Matroska(TM) je propracovanější než starší zavedený systém používaný v souborech OGM. Úplnou specifikaci najdete na webu Matroska(TM)[1].
mkvmerge(1) podporuje jako vstup dva druhy souborů kapitol. První formát, nazývaný „jednoduchý formát kapitol“, je stejný jako formát očekávaný nástroji OGM. Druhý je formát kapitol založený na XML, který podporuje všechny funkce kapitol Matroska(TM).
Kromě samostatných souborů kapitol umí mkvmerge(1) načítat kapitoly také z jiných formátů souborů (např. MP4, Ogg, Blu-ray nebo DVD).
Jednoduchý formát kapitol¶
Tento formát se skládá z dvojic řádků začínajících v tomto pořadí 'CHAPTERxx=' a 'CHAPTERxxNAME='. První obsahuje počáteční časové razítko a druhý název. Příklad:
CHAPTER01=00:00:00.000 CHAPTER01NAME=Intro CHAPTER02=00:02:30.000 CHAPTER02NAME=Baby prepares to rock CHAPTER03=00:02:42.300 CHAPTER03NAME=Baby rocks the house
mkvmerge(1) převede každou dvojici řádků na jeden prvek Matroska(TM) ChapterAtom. Nenastaví žádný prvek ChapterTrackNumber, což znamená, že všechny kapitoly platí pro všechny stopy v souboru.
Protože jde o textový soubor, může být nutný převod znakové sady. Vysvětlení převodu mezi znakovými sadami v programu mkvmerge(1) najdete v oddílu o textových souborech a znakových sadách.
Formát kapitol založený na XML¶
Formát kapitol založený na XML vypadá jako v následujícím příkladu:
<?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>A short chapter</ChapterString>
<ChapterLanguage>eng</ChapterLanguage>
</ChapterDisplay>
<ChapterAtom>
<ChapterTimeStart>00:00:46.000</ChapterTimeStart>
<ChapterTimeEnd>00:01:10.000</ChapterTimeEnd>
<ChapterDisplay>
<ChapterString>A part of that short chapter</ChapterString>
<ChapterLanguage>eng</ChapterLanguage>
</ChapterDisplay>
</ChapterAtom>
</ChapterAtom>
</EditionEntry> </Chapters>
Tento formát umožňuje tři věci, které v jednoduchém formátu kapitol možné nejsou:
Distribuce MKVToolNix obsahuje v podadresáři doc několik ukázkových souborů, které lze použít jako základ.
Následující seznam uvádí podporované značky XML, jejich datové typy a případně platný rozsah jejich hodnot:
Chapters (hlavní)
EditionEntry (hlavní)
EditionUID (celé číslo bez znaménka, platný rozsah: 1 <= hodnota)
EditionFlagHidden (celé číslo bez znaménka, platný rozsah: 0 <= hodnota <= 1)
EditionFlagDefault (celé číslo bez znaménka, platný rozsah: 0 <= hodnota <= 1)
EditionFlagOrdered (celé číslo bez znaménka, platný rozsah: 0 <= hodnota <= 1)
ChapterAtom (hlavní)
ChapterAtom (hlavní)
ChapterUID (celé číslo bez znaménka, platný rozsah: 1 <= hodnota)
ChapterTimeStart (celé číslo bez znaménka)
ChapterTimeEnd (celé číslo bez znaménka)
ChapterFlagHidden (celé číslo bez znaménka, platný rozsah: 0 <= hodnota <= 1)
ChapterFlagEnabled (celé číslo bez znaménka, platný rozsah: 0 <= hodnota <= 1)
ChapterSegmentUID (binární, platný rozsah: 1 <= délka v bajtech)
ChapterSegmentEditionUID (celé číslo bez znaménka, platný rozsah: 1 <= hodnota)
ChapterPhysicalEquiv (celé číslo bez znaménka)
ChapterTrack (hlavní)
ChapterTrackNumber (celé číslo bez znaménka, platný rozsah: 1 <= hodnota)
ChapterDisplay (hlavní)
ChapterString (řetězec UTF-8)
ChapterLanguage (řetězec UTF-8)
ChapterCountry (řetězec UTF-8)
ChapterProcess (hlavní)
ChapterProcessCodecID (celé číslo bez znaménka)
ChapterProcessPrivate (binární)
ChapterProcessCommand (hlavní)
ChapterProcessTime (celé číslo bez znaménka)
ChapterProcessData (binární)
Načítání kapitol z disků Blu-ray¶
mkvmerge(1) umí načítat kapitoly z nešifrovaných disků Blu-ray. K tomu lze parametru --chapters předat cestu k některému seznamu stop MPLS.
Příklad: --chapters /srv/blurays/BigBuckBunny/BDMV/PLAYLIST/00001.mpls
Načítání kapitol z disků DVD¶
Je-li MKVToolNix zkompilován s knihovnou libdvdread(TM), umí mkvmerge(1) načítat kapitoly z disků DVD. K tomu lze parametru --chapters předat cestu k některému adresáři nebo souboru na DVD. Protože DVD může obsahovat více titulů a každý titul má vlastní sadu kapitol, lze na konec argumentu s názvem souboru připojit dvojtečku a požadované číslo titulu. Výchozí číslo titulu je 1.
Příklad: --chapters /srv/dvds/BigBuckBunny/VIDEO_TS:2
Obecné poznámky¶
Při rozdělení souborů mkvmerge(1) správně upraví také kapitoly. Každý soubor tedy obsahuje pouze položky kapitol, které se na něj vztahují, a časová razítka se posunou tak, aby odpovídala novým časovým razítkům jednotlivých výstupních souborů.
mkvmerge(1) umí kopírovat kapitoly ze zdrojových souborů Matroska(TM), pokud to není výslovně zakázáno volbou --no-chapters. Kapitoly ze všech zdrojů (souborů Matroska(TM), souborů Ogg, souborů MP4 a textových souborů kapitol) se obvykle neslučují, ale skončí v samostatných prvcích ChapterEditions. Pouze pokud jsou kapitoly načteny z několika souborů Matroska(TM) nebo XML, které sdílejí stejná UID edic, sloučí se do jediného prvku ChapterEdition. Je-li takové sloučení požadováno i v jiných případech, musí uživatel nejprve pomocí mkvextract(1) extrahovat kapitoly ze všech zdrojů, ručně sloučit soubory XML a poté je multiplexovat.
ŠTíTKY¶
Úvod¶
Systém štítků Matroska(TM) je podobný systémům jiných kontejnerů: jde o sadu dvojic KEY=VALUE. V Matroska(TM) však mohou být tyto štítky také vnořené a KEY i VALUE jsou samostatné prvky. Ukázkový soubor example-tags-2.xml znázorňuje použití tohoto systému.
Rozsah platnosti štítků¶
Štítky Matroska(TM) se automaticky nevztahují na celý soubor. Mohou se na něj vztahovat, ale mohou se také vztahovat na různé části souboru: na jednu či více stop, jednu či více kapitol, nebo dokonce na kombinaci obojího. Další podrobnosti uvádí specifikace Matroska(TM)[5].
Důležité je, že štítky jsou se stopami nebo kapitolami propojeny prostřednictvím prvku štítku Matroska(TM) Targets a že UID použitá k tomuto propojení nejsou ID stop, která mkvmerge(1) používá na jiných místech. Používají se naopak UID, která mkvmerge(1) automaticky vypočítá (pochází-li stopa z jiného formátu než Matroska(TM)), nebo která zkopíruje ze zdrojového souboru, je-li zdrojem stopy soubor Matroska(TM). Proto je obtížné před předáním souboru programu mkvmerge(1) zjistit, která UID v souboru štítků použít.
mkvmerge(1) nabízí dvě volby pro přidávání štítků do souborů Matroska(TM): --global-tags a --tags. Rozdíl spočívá v tom, že první volba, --global-tags, odstraní všechny výše uvedené prvky Targets, a štítky se proto budou vztahovat na celý soubor. Druhá volba, --tags, automaticky vloží UID, které mkvmerge(1) vytvoří pro stopu zadanou částí TID volby --tags.
Příklad¶
Předpokládejme, že chcete přidat štítky k video stopě načtené ze souboru AVI. Příkaz mkvmerge --identify file.avi oznámí, že ID video stopy (nezaměňujte toto ID s UID) je 0. Vytvoříte tedy soubor štítků, vynecháte všechny prvky Targets a spustíte mkvmerge(1):
$ mkvmerge -o file.mkv --tags 0:tags.xml file.avi
Formát souboru štítků¶
mkvmerge(1) podporuje formát souboru štítků založený na XML. Formát je velmi těsně odvozen od specifikace Matroska(TM)[5]. Binární i zdrojová distribuce MKVToolNix obsahují ukázkový soubor example-tags-2.xml, který jednoduše uvádí všechny známé štítky a lze jej použít jako základ skutečných souborů štítků.
Základní pravidla:
Datové typy¶
Nový systém štítků Matroska(TM) zná pouze dva datové typy: řetězec UTF-8 a binární typ. První se používá pro název štítku a prvek <String>, zatímco binární typ se používá pro prvek <Binary>.
Protože samotná binární data nelze vložit do souboru XML, podporuje mkvmerge(1) dva jiné způsoby jejich uložení. Začíná-li obsah značky XML znakem '@', považuje se následující text za název souboru. Obsah odpovídajícího souboru se zkopíruje do prvku Matroska(TM).
Jinak se očekává, že data budou kódována pomocí Base64. Toto kódování převádí binární data na omezenou sadu znaků ASCII a používá se například v e-mailových programech. mkvextract(1) vypíše binární prvky jako data kódovaná pomocí Base64.
Zastaralý systém štítků zná několik dalších datových typů, které jsou uvedeny v oficiální specifikaci štítků Matroska(TM). Protože mkvmerge(1) tento systém již nepodporuje, nejsou zde tyto typy popsány.
Známé značky pro formát souboru XML¶
Následující seznam uvádí podporované značky XML, jejich datové typy a případně platný rozsah jejich hodnot:
Tags (hlavní)
Tag (hlavní)
Targets (hlavní)
TargetTypeValue (celé číslo bez znaménka)
TargetType (řetězec UTF-8)
TrackUID (celé číslo bez znaménka)
EditionUID (celé číslo bez znaménka)
ChapterUID (celé číslo bez znaménka)
AttachmentUID (celé číslo bez znaménka)
Simple (hlavní)
Simple (hlavní)
Name (řetězec UTF-8)
TagLanguage (řetězec UTF-8)
DefaultLanguage (celé číslo bez znaménka)
String (řetězec UTF-8)
Binary (binární)
INFORMACE O úSEKU¶
Pomocí souboru XML s informacemi o úseku lze nastavit určité hodnoty v poli hlavičky "informace o úseku" souboru Matroska(TM). Žádnou z těchto hodnot nelze nastavit jinými volbami příkazového řádku.
Jiná pole hlavičky "informace o úseku" lze nastavit volbami příkazového řádku, nikoli však souborem XML. Patří sem například volby --title a --timestamp-scale.
Některé další prvky nelze nastavit ani volbami příkazového řádku, ani soubory XML. Patří mezi ně následující prvky: DateUTC (známý také jako "datum multiplexování"), MuxingApp, WritingApp a Duration. Vždy je nastavuje samotný mkvmerge(1).
Následující seznam uvádí podporované značky XML, jejich datové typy a případně platný rozsah jejich hodnot:
Info (hlavní)
SegmentUID (binární, platný rozsah: délka v bajtech == 16)
SegmentFilename (řetězec UTF-8)
PreviousSegmentUID (binární, platný rozsah: délka v bajtech == 16)
PreviousSegmentFilename (řetězec UTF-8)
NextSegmentUID (binární, platný rozsah: délka v bajtech == 16)
NextSegmentFilename (řetězec UTF-8)
SegmentFamily (binární, platný rozsah: délka v bajtech == 16)
ChapterTranslate (hlavní)
ChapterTranslateEditionUID (celé číslo bez znaménka)
ChapterTranslateCodec (celé číslo bez znaménka)
ChapterTranslateID (binární)
USPOřáDáNí SOUBORU MATROSKA(TM)¶
Uspořádání souboru Matroska(TM) je poměrně flexibilní. mkvmerge(1) vytvoří soubor předem stanoveným způsobem. Výsledný soubor vypadá takto:
[hlavička EBML] [úsek {hlavička vyhledávání č. 1} [informace o úseku] [informace o stopách] {přílohy} {kapitoly} [cluster 1] {cluster 2} ... {cluster n} {indexy} {hlavička vyhledávání č. 2} {štítky}]
Prvky ve složených závorkách jsou volitelné a závisí na obsahu a použitých volbách. Několik poznámek:
Nejkratší možný soubor Matroska(TM) by vypadal takto:
[hlavička EBML] [úsek [informace o úseku] [informace o stopách] [cluster 1]]
Tak tomu může být u souborů obsahujících pouze zvuk.
EXTERNí SOUBORY čASOVýCH RAZíTEK¶
mkvmerge(1) umožňuje uživateli zvolit časová razítka pro konkrétní stopu. To lze využít k vytváření souborů s videem s proměnlivou frekvencí snímků nebo k vkládání mezer do zvuku. Snímek je zde jednotka, kterou mkvmerge(1) vytváří samostatně pro každý blok Matroska(TM). U videa jde přesně o jeden snímek, u zvuku o jeden paket příslušného zvukového typu. Například u AC-3 by šlo o paket obsahující 1536 vzorků.
Soubory časových razítek používané při připojování stop k sobě se smějí zadat pouze pro první část řetězce stop. Pokud například připojujete dva soubory v1.avi a v2.avi a chcete použít časová razítka, musí příkazový řádek vypadat přibližně takto:
$ mkvmerge ... --timestamps 0:my_timestamps.txt v1.avi +v2.avi
mkvmerge(1) rozpoznává čtyři formáty. První řádek vždy obsahuje číslo verze. Prázdné řádky, řádky obsahující pouze bílé znaky a řádky začínající znakem '#' se ignorují.
Formát souboru časových razítek v1¶
Tento formát začíná řádkem s verzí. Druhý řádek určuje výchozí počet snímků za sekundu. Všechny následující řádky obsahují tři čísla oddělená čárkami: počáteční snímek (0 je první snímek), koncový snímek a počet snímků za sekundu v tomto rozsahu. Hodnota FPS je číslo s plovoucí desetinnou čárkou, přičemž jako desetinný oddělovač se používá tečka '.'. Rozsahy mohou obsahovat mezery, pro které se použije výchozí hodnota FPS. Příklad:
# timestamp format v1 assume 27.930 800,1000,25 1500,1700,30
Formát souboru časových razítek v2¶
V tomto formátu obsahuje každý řádek časové razítko odpovídajícího snímku. Časové razítko musí být zadáno s přesností na milisekundy. Může jít o číslo s plovoucí desetinnou čárkou, ale nemusí. Musíte zadat alespoň tolik řádků s časovými razítky, kolik je ve stopě snímků. Časová razítka v tomto souboru musí být seřazena. Příklad pro 25 fps:
# timestamp format v2 0 40 80
Formát souboru časových razítek v3¶
V tomto formátu každý řádek obsahuje délku v sekundách následovanou volitelným počtem snímků za sekundu. Obě hodnoty mohou být čísla s plovoucí desetinnou čárkou. Není-li počet snímků za sekundu uveden, použije se výchozí hodnota. U zvuku byste měli nechat časová razítka snímků vypočítat samotný kodek. Proto použijte jako počet snímků za sekundu hodnotu 0.0. Mezery v proudu lze vytvořit také klíčovým slovem 'gap' následovaným délkou mezery. Příklad pro zvukový soubor:
# timestamp format v3 assume 0.0 25.325 7.530,38.236 gap, 10.050 2.000,38.236
Formát souboru časových razítek v4¶
Tento formát je totožný s formátem v2. Jediný rozdíl spočívá v tom, že časová razítka nemusejí být seřazena. Tento formát by se téměř nikdy neměl používat.
NáVRATOVé KóDY¶
mkvmerge(1) končí jedním ze tří návratových kódů:
PROMěNNé PROSTřEDí¶
mkvmerge(1) používá výchozí proměnné určující národní prostředí systému (např. LANG a rodinu LC_*). Další proměnné:
MKVMERGE_DEBUG, MKVTOOLNIX_DEBUG a její zkrácený tvar MTX_DEBUG
MKVMERGE_ENGAGE, MKVTOOLNIX_ENGAGE a její zkrácený tvar MTX_ENGAGE
VIZ TAKé¶
mkvinfo(1), mkvextract(1), mkvpropedit(1), mkvtoolnix-gui(1)
WWW¶
Nejnovější verzi lze vždy najít na domovské stránce MKVToolNix[6].
AUTHOR¶
Moritz Bunkus <moritz@bunkus.org>
NOTES¶
- 1.
- web Matroska(TM)
- 2.
- domovské stránce IANA
- 3.
- mkvmerge-identification-output-schema-v20.json
- 4.
- RFC 7159
- 5.
- specifikace Matroska(TM)
- 6.
- domovské stránce MKVToolNix
| 2026-09-14 | MKVToolNix 102.0 |