mkvmerge -- Multiplexa secuencias multimedia en un archivo Matroska(tm)

# 1. Sinopsis

mkvmerge [opciones globales] {-o salida} [opciones1] {archivo1} [[opciones2] {archivo2}] [@archivo-opciones]

# 2. Descripción

Esto programa toma los archivos multimedia de entrada y une sus secuencias (todas ellas o sólo las seleccionadas) en un archivo Matroska(tm); mire la página web de Matroska.

Important:

El orden de las opciones en la línea de comandos es importante. Por favor, lea la sección "Orden de opciones" si eres nuevo usando el programa.

## 2.1. Opciones generales

Option | Description
--- | ---
-v, --verbose | Incrementa el detalle (verbose).
-q, --quiet | Suprime la salida.
-o, --output nombre-archivo | Escribe el nombre-archivo. Si la división es usada entonces este parámetro es tratado de distinta manera. Mire la explicación sobre la opción --split para obtener más detalles.
-w, --webm | Crea un archivo compatible WebM. Esto también lo habilita si el nombre de la extensión del archivo de salida es "webm". Este modo fuerza obliga a cumplir ciertas restricciones. Los únicos códecs permitidos son VP8, VP9 para video y Opus, Vorbis para pistas de audio. Ni los capítulos ni las etiquetas están permitidas. El encabezado DocType se cambia a "webm".
--title título | Establece el título general para el archivo de salida, p.e. el nombre de la película.
--default-language código-lenguaje | Establece el código de lenguaje predefinido que será usado para todas las pistas a menos que se sobrescriban con la opción --language. El código del lenguaje predefinido es 'und' para 'Indeterminado'.

## 2.2. Manipulación de información del segmento (opciones generales)

Option | Description
--- | ---
--segmentinfo nombre-archivo.xml | Lee la información del segmento a partir de un archivo XML. Este archivo puede contener el UID de la familia del segmento: el UID del segmento, el UID del segmento anterior y el UID del segmento siguiente. Un archivo de muestra así como un DTD están incluidos en el paquete de MKVToolNix. Mire la sección de más adelante sobre los archivos XML de información del segmento para más detalles.
--segment-uid SID1,SID2,... | Establece los UIDs del segmento que se usarán. Esto es una lista separada por comas con UIDs del segmento con una longitud de 128 bits en la forma típica del UID: números hexadecimales con o sin el prefijo "0x" con o sin espacios y siendo 32 dígitos exactos. If SID starts with = then its rest is interpreted as the name of a Matroska file whose segment UID is read and used. Cada archivo creado contiene un segmento, y cada segmento tiene un SID (UID del segmento). Si se especifican más SIDs que segmentos entonces los UIDs que sobren son ignorados. Si se especifican menos UIDs que segmentos entonces se crearán de manera aleatoria los UIDs que faltan.

## 2.3. Manipulación de capítulos y etiquetas (opciones generales)

Option | Description
--- | ---
--chapter-language código-idioma | Establece el código de idioma ISO639-2 que se escribe en cada entrada de capítulo. Por defecto se establece a 'eng'. Mire la sección de más adelante sobre los capítulos para obtener más detalles. Esta opción puede ser usada tanto para archivos simples de capítulos como para archivos de entrada que contengan capítulos sin información del idioma de los capítulos, p.e. archivos MP4 y OGM.
--chapter-charset conjunto-caracteres | Establece el conjunto de caracteres que se usará para la conversión a UTF-8 para archivos simples de capítulos. Mire la sección sobre la conversión de archivos de texto y conjunto de caracteres para ver una explicación sobre cómo mkvmerge(1) realiza la conversión entre conjunto de caracteres. Este ajuste también se aplica a los capítulos que se copian desde ciertos tipos de contenedores, p.e. archivos Ogg/OGM y MP4. Mire la sección de más adelante sobre capítulos para obtener más detalles.
--cue-chapter-name-format formato | mkvmerge(1) puede leer CUE sheets de archivos de audio como entrada para capítulos. Los CUE sheets normalmente contiene las entradas PERFORMER y TITLE para cada entrada del índice. mkvmerge(1) usa estos dos textos a fin de construir el nombre del capítulo. Con esta opción, se puede configurar el formato usado para este nombre. Si esta opción no se establece entonces mkvmerge(1) usa por defecto el formato '%p - %t' (el artista, seguido por un espacio, una barra, otro espacio y el título). Si el formato está establecido entonces todo es copiado tal y como está excepto los siguientes meta caracteres que serán reemplazados por: %p es reemplazado por el texto de la entrada PERFORMER, %t es reemplazado por el texto de la entrada TITLE, %n es reemplazado por el número de la pista y, %N es reemplazado por el número de la pista, agregándole un cero a la izquierda si el número es menor de 10.
--chapters nombre-archivo | Lee la información de capítulo de nombre-archivo. Mire la sección de más adelante sobre capítulos para obtener más detalles.
--global-tags nombre-archivo | Lee las etiquetas globales de nombre-archivo. Mire la sección de más adelante sobre etiquetas para obtener más detalles.

## 2.4. Control general de salida (opciones generales avanzadas)

Option | Description
--- | ---
--track-order FID1:TID1,FID2:TID2,... | Esta opción cambia el orden en el que se crean las pistas de un archivo de entrada. El argumento es una lista separada por comas de pares de IDs. Cada par contiene primero el ID de archivo (FID1) que es tan sólo es el número del archivo en la línea de comandos partiendo de cero. El segundo es el ID de pista (TID1) de ese archivo. Si algunos IDs de pista son omitidos entonces esas pistas se crean después de que se hayan creado las establecidas con esta opción.
--cluster-length especificación | Limita el número de bloques de datos o la duración de los datos en cada clúster. El parámetro especificación puede ser un número n sin unidad o un número d con el sufijo 'ms'. Si no se usa ninguna unidad entonces mkvmerge(1) pondrá como máximo n bloques de información en cada clúster. El número máximo de bloques es 65535. Si el número d tiene el sufijo 'ms' entonces mkvmerge(1) pondrá como máximo d milisegundos de información en cada clúster. El valor mínimo para d es '100ms', y el máximo es '32000ms'. mkvmerge(1) por defecto pone como máximo 65535 bloques de información y 5000ms de información en cada clúster. Los programas al tratar de encontrar cierto fotograma tan sólo pueden buscar directamente un clúster y posteriormente leer todo el clúster. Por lo tanto, crear clústeres muy grandes podría conllevar una búsqueda lenta e imprecisa.
--no-cues | Le dice a mkvmerge(1) no crear y escribir la información del índice (cue) que puede ser comparada al índice de un AVI. Los archivos Matroska(tm) se pueden reproducir sin la información del índice, pero la búsqueda será probablemente imprecisa y lenta. Usa esto tan sólo si realmente estás desesperado por ahorrar espacio o con fines de testeo. Mire también la opción --cues que puede ser especificada para cada archivo de entrada.
--clusters-in-meta-seek | Le dice a mkvmerge(1) crear un elemento meta seek al final del archivo que contendrá todos los clústeres. Mire también la sección sobre diseño de archivos Matroska.
--disable-lacing | Deshabilita el lacing para todas las pistas. Esto incrementará el tamaño del archivo, especialmente si hay muchas pistas de audio. Esta opción no está diseñada para su uso frecuente.
--enable-durations | Escribe las duraciones para todos los bloques. Esto incrementará el tamaño del archivo y por ahora, no ofrece ningún valor adicional para los reproductores.
--disable-track-statistics-tags | Normalmente, mkvmerge(1) escribirá algunas etiquetas con estadísticas para cada pista. Si dichas etiquetas ya están presentes entonces serán sobrescritas. Las etiquetas BPS, DURATION, NUMBER_OF_BYTES y NUMBER_OF_FRAMES. Habilitar esta opción impide que mkvmerge(1) escriba y edite las etiquetas existentes con los mismos nombres.
--timecode-scale factor | Fuerza el factor de escala de los códigos de tiempo con factor. Los valores admitidos están comprendidos en el rango 1000..10000000 o el valor especial -1. Normalmente, mkvmerge(1) usará el valor 1000000 lo que significa que los códigos de tiempo y duraciones tendrán una precisión de 1ms. Para los archivos que no vayan a contener una pista de video pero si al menos una de audio entonces mkvmerge(1) elegirá automáticamente un factor de escala de códigos de tiempo por lo que todos los códigos de tiempo y duraciones tendrán una precisión de una muestra (sample) de audio. Esto causa una sobrecarga mayor pero permite que la búsqueda y extracción sea más precisa. Si se usa el valor especial -1 entonces mkvmerge(1) usará la precisión de la muestra incluso si existe una pista de video.

## 2.5. División, vinculación, unión y concatenación de archivos (más opciones generales)

Option | Description
--- | ---
--split especificación | Divide el archivo generado después de un tamaño o tiempo especificado. Por favor, tenga en cuenta que estas pistas sólo pueden ser divididas justo antes de un fotograma clave (keyframe). Debido al buffering y tras alcanzar el punto de división especificado, mkvmerge(1) realizará la división justo antes de que se haya alcanzado el siguiente fotograma clave. Por lo tanto, el punto de división podría ser algo distinto del especificado por el usuario. Hasta ahora, mkvmerge(1) admite cuatro modos diferentes. División por tamaño. Sintaxis: --split [size:]d[k|m|g] Ejemplos: --split size:700m or --split 150000000 El parámetro d puede acabar con 'k', 'm' o 'g' para indicar que el tamaño están en KB, MB o GB, respectivamente. De cualquier otro modo, se asume el tamaño en bytes. Después de que el archivo de salida alcance el tamaño limite, comienza la creación de otro archivo. El prefijo 'size:' se puede omitir por motivos de compatibilidad. División por duración. Sintaxis: --split [duration:]HH:MM:SS.nnnnnnnnn|ds Ejemplos: --split duration:00:60:00.000 o --split 3600s El parámetro puede tener la forma HH:MM:SS.nnnnnnnnn para especificar la duración en precisión de nanosegundos o puede ser un número d seguido por la letra 's' para una duración en segundos. HH es el número de las horas, MM el de los minutos, SS para los segundos y nnnnnnnnn son los nanosegundos. Tanto los números de las horas como los nanosegundos pueden ser omitidos. Hay hasta nueve dígitos después del punto decimal. Después de que la duración del contenido, en el archivo actual, alcance este límite comienza la creación de otro archivo. El prefijo 'duration:' puede ser omitido por motivos de compatibilidad. División por códigos de tiempo. Sintaxis: --split timecodes:A[,B[,C...]] Ejemplo: --split timecodes:00:45:00.000,01:20:00.250,6300s Los parámetros A, B, C, etc... pueden tener el mismo formato que el usado para la división por duración (mire más arriba). La lista de códigos de tiempo están separados por comas. Tras alcanzar, en la secuencia de entrada, el código de tiempo del punto de división actual se crea un nuevo archivo. Entonces se usa el siguiente punto de división especificado en la lista. El prefijo 'timecodes:' no puede ser omitido. Conservar las partes especificadas por los rangos de códigos de tiempo especificados mientras que las otras que son descartadas. Sintaxis: --split parts:inicio1-fin1[,[+]inicio2-fin2[,[+]inicio3-fin3...]] Ejemplos: --split parts:00:01:20-00:02:45,00:05:50-00:10:30 --split parts:00:01:20-00:02:45,+00:05:50-00:10:30 --split parts:-00:02:45,00:05:50- El modo parts le dice a mkvmerge(1) conservar ciertos rangos de códigos de tiempo mientras se descartan otros. Los rangos a conservar tienen que ser listados después de la palabra clave parts: y separados por comas. Un rango, en sí mismo, consiste en un inicio y un fin, en el mismo formato y formas que acepta --split (p.e. tanto 00:01:20 y 80s se refieren al mismo código de tiempo). Si el código de tiempo de inicio se omite entonces por defecto lo toma del valor del código de tiempo final del rango anterior. Si no existe un rango anterior entonces por defecto lo toma el valor del inicio del archivo (mire el ejemplo 3). Si el código de tiempo final se omite entonces por defecto lo toma del valor final de los archivos entrada que básicamente le dice a mkvmerge(1) que conserve el resto (mire el ejemplo 3). Por lo general, cada rango será escrito a un nuevo archivo. Esto se puede cambiar para que los rangos consecutivos se escriban en el mismo archivo. Por eso el usuario tiene que asignar el prefijo + al código de tiempo de inicial. Esto le dice a mkvmerge(1) que no cree un nuevo archivo y, en vez de eso, concatene el rango después del último rango escrito en el archivo. Los códigos de tiempo serán ajustados para que no existan discontinuidades en el archivo de salida incluso si había un espacio sin abarcar entre dos rangos del archivo de entrada. En el ejemplo 1 mkvmerge(1) creará dos archivos. El primero abarca el contenido a partir de 00:01:20 hasta 00:02:45. El segundo archivo comprende el contenido a partir de 00:05:50 hasta 00:10:30. En el ejemplo 2 mkvmerge(1) creará sólo un archivo. Este archivo abarcará tanto el contenido a partir de 00:01:20 hasta 00:02:45, como el contenido a partir de 00:05:50 hasta 00:10:30. En el ejemplo 3 mkvmerge(1) creará dos archivos. El primero abarcará el contenido desde el inicio del archivo de entrada hasta 00:02:45. El segundo archivo abarca el contenido a partir de 00:05:50 hasta el final del archivo de entrada. Note: Tenga en cuenta que mkvmerge(1) sólo realiza divisiones en fotogramas claves. Esto es aplicable tanto al inicio como al final de cada rango. Así que si un código de tiempo final está entre dos fotogramas claves, mkvmerge(1) continuará el procesamiento de los fotogramas hasta el final pero excluirá el siguiente fotograma clave. Conservar partes concretas especificando rangos numéricos de fotogramas/campos mientras se descartan otros. Sintaxis: --split parts-frames:inicio1-fin1[,[+]inicio2-fin2[,[+]inicio3-fin3...]] Ejemplos: --split parts-frames:137-258,548-1211 --split parts-frames:733-912,+1592-2730 --split parts-frames:-430,2512- El modo parts-frames le dice a mkvmerge(1) para conservar ciertos rangos numéricos de fotogramas/campos mientras se descartan otros. Los rangos a conservan tienen que ser especificados después de la palabra clave parts-frames: y separados por comas. Un rango, en si mismo, es un número de un fotograma/campo inicial y final. La numeración comienza en 1. Si el número inicial se omite entonces por defecto lo toma del número final del rango anterior. Si no existe un rango anterior entonces por defecto lo toma del inicio del archivo (mire el ejemplo 3). Si el número final se omite entonces por defecto lo toma del final del archivo de entrada que básicamente le dice a mkvmerge(1) que conserve el resto (mire el ejemplo 3). Por lo general, cada rango será escrito a un nuevo archivo. Esto se puede cambiar para que los rangos consecutivos se escriban en el mismo archivo. Por eso el usuario tiene que asignar el prefijo + al código de tiempo de inicial. Esto le dice a mkvmerge(1) que no cree un nuevo archivo y, en vez de eso, concatene el rango después del último rango escrito en el archivo. Los códigos de tiempo serán ajustados para que no existan discontinuidades en el archivo de salida incluso si había un espacio sin abarcar entre dos rangos del archivo de entrada. Note: Tenga en cuenta que mkvmerge(1) sólo realiza divisiones en fotogramas claves. Esto es aplicable tanto al inicio como al final de cada rango. Así que si un código de tiempo final está entre dos fotogramas claves, mkvmerge(1) continuará el procesamiento de los fotogramas hasta el final pero excluirá el siguiente fotograma clave. En el ejemplo 1 mkvmerge(1) creará dos archivos. El primero abarca el contenido a partir del primer fotograma clave anterior, posterior o el mismo 137 hasta el primer fotograma clave anterior o el mismo 258. El segundo abarca el contenido a partir del 548 hasta el 1211. En el ejemplo 2 mkvmerge(1) creará sólo un archivo. Este archivo contendrá tanto el contenido a partir del 733 hasta el 912 como el contenido a partir del 1592 hasta el 2730. En el ejemplo 3 mkvmerge(1) creará dos archivos. El primero abarcará el contenido a partir del inicio del archivo de entrada hasta el 430. El segundo archivo abarcará el contenido a partir del 2512 hasta el final del archivo de entrada. Este modo sólo toma en cuenta la primera pista de video que se genera. Si no se genera ninguna pista de video entonces la división no ocurrirá. Note: Los números especificados con este argumento son interpretados en base al número de bloques Matroska(tm) que se generan. Un único bloque Matroska(tm) contiene un fotograma completo (material progresivo) o sólo un campo(material entrelazado). Mkvmerge no hace distinciones entre estos dos y tan sólo cuenta el número de bloques. Por ejemplo: Si se quiere dividir después del 25º fotograma con material entrelazado, entonces tendría que usar 50 (dos campos por fotograma) como punto de corte. División después fotogramas/campos específicos. Sintaxis: --split frames:A[,B[,C...]] Ejemplo: --split frames:120,237,891 Los parámetros A, B, C, etc... deben ser todos enteros positivos. La numeración comienza por 1. La lista de números de fotograma/campo está separada por comas. Después de que la secuencia de entrada haya alcanzado el número de fotograma/campo establecido como punto de división, se crea un nuevo archivo. Entonces se usa el siguiente punto de división especificado en la lista. es usado. El prefijo 'frames:' no puede ser omitido. Este modo sólo toma en cuenta la primera pista de video que se genera. Si no se genera ninguna pista de video entonces la división no ocurrirá. Note: Los números especificados con este argumento son interpretados en base al número de bloques Matroska(tm) que se generan. Un único bloque Matroska(tm) contiene un fotograma completo (material progresivo) o sólo un campo(material entrelazado). Mkvmerge no hace distinciones entre estos dos y tan sólo cuenta el número de bloques. Por ejemplo: Si se quiere dividir después del 25º fotograma con material entrelazado, entonces tendría que usar 50 (dos campos por fotograma) como punto de corte. División antes de capítulos específicos. Sintaxis: --split chapters:all o --split chapters:A[,B[,C...]] Ejemplo: --split chapters:5,8 Los parámetros A, B, C, etc... deben ser todos enteros positivos. La numeración comienza por 1. La lista de capítulos está separada por comas. La división ocurrirá justo antes del primer fotograma clave cuyo código de tiempo sea igual o mayor que el código de tiempo inicial para los capítulos cuyos números están listados. Un capítulo que comienza a los 0s nunca se tiene en cuenta para la división siendo omitido silenciosamente. La palabra clave all puede ser usado en vez de una lista de todos los números de los capítulos. El prefijo 'chapters:' no puede ser omitido. Note: El formato del archivo Matroska(tm) soporta estructuras arbitrarias y profundamente anidadas de capítulos llamadas 'edition entries' y 'chapter atoms'. Sin embargo, esta modalidad sólo tiene en cuenta el nivel más alto de los capítulos a través de todas las entradas de la edición. En el modo de división el nombre del archivo generado se trata de manera diferente que con el funcionamiento normal. Puede contener un printf como expresión '%d' incluyendo un ancho de campo opcional, p.e. '%02d'. Si se hace entonces el número de archivo actual es formateado apropiadamente e insertado en ese punto del nombre del archivo. Si no existe dicho patrón entonces se asume '-%03d' como patrón justo antes de la extensión del archivo: '-o salida.mkv' resultaría en 'salida-001.mkv' y así en adelante. Si no hay extensión entonces '-%03d' será agregado al nombre.
--link | Archivos vinculados a otros cuando se divide el archivo generado. Mire la siguiente sección vinculación de archivos para más detalles.
--link-to-previous segmento-UID | Vincula el primer archivo generado al segmento con el UID del segmento especificado mediante el parámetro segmento-UID. Mire la siguiente sección vinculación de archivos para más detalles. If SID starts with = then its rest is interpreted as the name of a Matroska file whose segment UID is read and used.
--link-to-next segmento-UID | Vincula el último archivo generado al segmento con el UID del segmento especificado por el parámetro segmento-UID. Mire la siguiente sección vinculación de archivos para más detalles. If SID starts with = then its rest is interpreted as the name of a Matroska file whose segment UID is read and used.
--append-mode modo | Establece cómo se calculan los códigos de tiempo al unir archivos. El parámetro modo puede tener dos valores: 'file' que es la opción por defecto y 'track'. Cuando mkvmerge realiza la unión de una pista (llamada 'pista2_1' de ahora en adelante) procedente de un segundo archivo llamado 'archivo2') a una pista (llamada 'pista1_1') del primer archivo (llamado 'archivo1') entonces tiene que compensar cierta cantidad en todos los códigos de tiempo de 'pista2_1'. En el modo 'file' esta cantidad es el mayor código de tiempo encontrado en el 'archivo1' incluso si ese código de tiempo proviniera de una pista diferente a 'pista1_1'. En el modo track la compensación es el mayor código de tiempo de 'pista1_1'. Por desgracia, mkvmerge no puede detectar qué modo es más conveniente para ser utilizado. Por lo tanto, por defecto usa el modo 'file'. El modo 'file' por lo general funciona mejor para archivos que fueron creados independientemente los unos de los otros; p.e. cuando se unen archivos AVI o MP4. El modo 'track' podría funcionar mejor para fuentes que esencialmente son partes de un archivo, p.e. para archivos VOB y EVO. Las pistas de subtítulos siempre son tratadas como si el modo 'file' estuviese activado incluso si el que está activado es el modo 'track'.
--append-to SFID1:STID1:DFID1:DTID1[,...] | Esta opción controla que pista es unida a otra. Cada especificación contiene cuatro IDs: un ID de archivo (FID), un ID de pista (TID), un segundo ID de archivo y un segundo ID de pista. El primera par, "Source File ID" y "Source Track ID", identifica la pista que va a ser unida. El segundo par, "Destination File ID" y "Destination Track ID", identifica la pista a la que será unida la primera. Si se omite esta opción entonces se usa un mapeo estándar. Este mapeo estándar une cada pista del archivo actual a una pista del anterior archivo con el mismo ID de pista. Esto permite unir fácilmente dos archivos que habían sido divididos a partir de una película, si tienen el mismo número de pistas y el ID de pista, con ayuda del comando: mkvmerge -o salida.mkv parte1.mkv +parte2.mkv.
+ | Un único '+' provoca que el siguiente archivo es unido en vez de añadido. El '+' también se puede poner delante del siguiente nombre del archivo. Por lo tanto, los dos comandos siguientes son equivalentes:
    mkvmerge -o completo.mkv archivo1.mkv + archivo2.mkv
    mkvmerge -o completo.mkv archivo1.mkv +archivo2.mkv
= | Por lo general, mkvmerge(1) busca archivos en el mismo directorio como archivo de entrada que tienen el mismo nombre base y que sólo se diferencian en su número de orden de ejecución (p.e. 'VTS_01_1.VOB', 'VTS_01_2.VOB', 'VTS_01_3.VOB', etc...) y trata todos estos archivos como si estuviesen unidos en un único archivo. Esta opción, un único '=', hace que mkvmerge no busque estos archivos adicionales. El '=' también se puede poner delante del siguiente nombre del archivo. Por lo tanto, los dos comandos siguientes son equivalentes:
    mkvmerge -o completo.mkv = archivo1.mkv
    mkvmerge -o completo.mkv =archivo1.mkv
( archivo1 archivo2 ) | Si múltiples nombres de archivos están entre paréntesis entonces estos archivos serán tratados como si estuviesen unidos en un único archivo, el cual consiste en el contenido de cada uno de los archivos uno detrás de otro. Por ejemplo, esto se puede usar con archivos VOB procedentes de de un DVD o de MPEG-TS (transport streams). No se puede usar si cada archivo contiene su propio conjunto de encabezados que suele ser el caso con archivos como AVI o MP4. Poner el nombre del archivo entre paréntesis también evita que mkvmerge(1) busque archivos adicionales con el mismo nombre base tal y como se ha descrito en opción =. Por lo tanto, los dos comandos siguientes son equivalentes:
    mkvmerge -o salida.mkv = archivo.mkv
    mkvmerge -o salida.mkv "(" archivo.mkv ")"
Varias cosas se deben tener en cuenta: Debe haber espacios antes y después de los signos de paréntesis. Cada parámetro entre paréntesis se interpreta como un nombre de archivo. Por lo tanto, todas las opciones que se deban aplicar a este archivo lógico deben ser introducidas antes del signo de apertura del paréntesis. Algunos entornos tratan a los paréntesis como caracteres especiales. Por lo tanto, deben ser escapados o entrecomillados tal y como se muestra en el ejemplo anterior.

## 2.6. Soporte de adjuntos (más opciones globales)

Option | Description
--- | ---
--attachment-description descripción | Descripción en texto sin formato del siguiente adjunto. Esto afecta a la opción --attach-file o --attach-file-once option.
--attachment-mime-type Tipo MIME | Tipo MIME del siguiente adjunto. Esto afecta a la opción --attach-file o --attach-file-once. Una lista oficial de tipos MIME que son reconocidos pueden ser encontrados en la página web de IANA. El tipo MIME es obligatorio para un adjunto.
--attachment-name nombre | Establece el nombre de este adjunto que será almacenado en el archivo de salida. Si esta opción no se especificación entonces el nombre será derivado del nombre del archivo del adjunto especificado con la opción --attach-file o --attach-file-once.
--attach-file nombre-archivo, --attach-file-once nombre-archivo | Crea un archivo adjunto dentro del archivo Matroska(tm). El tipo MIME debe establecerse antes de que esta opción pueda ser utilizada. La diferencia entre las dos formas es que durante la división los archivos adjuntos con --attach-file son adjuntados a todos los archivos de salida mientras que con --attach-file-once tan sólo se adjuntan al primer archivo creado. Si no se usa la división entonces ambas opciones hacen lo mismo. mkvextract(1) puede ser utilizado para extraer los archivos adjuntos de un archivo Matroska(tm).

## 2.7. Opciones que se pueden usar para cada archivo de entrada

Option | Description
--- | ---
-a, --audio-tracks [!]n,m,... | Copia las pistas de audio n, m, etc. Los números son los ID de pista que pueden ser obtenidos con la opción --identify. No son los números de la pista (mire la sección IDs de pista). Por defecto: copia todas las pistas de audio. En lugar del ID de pista también se puede especificar el código de idioma ISO 639-2. Esto sólo funciona para archivos de entrada que ofrecen etiquetas de idioma para sus pistas. Por defecto: copia todas las pistas de este tipo. Si los IDs están prefijados con ! entonces significa lo contrario: copia todas las pistas de este tipo excepto las enumeradas después del !.
-d, --video-tracks [!]n,m,... | Copia las pistas de video n, m, etc. Los números son los ID de pista que pueden ser obtenidos con la opción --identify. No son los números de la pista (mire la sección IDs de pista). Por defecto: copia todas las pistas de video. En lugar del ID de pista también se puede especificar el código de idioma ISO 639-2. Esto sólo funciona para archivos de entrada que ofrecen etiquetas de idioma para sus pistas. Si los IDs están prefijados con ! entonces significa lo contrario: copia todas las pistas de este tipo excepto las enumeradas después del !.
-s, --subtitle-tracks [!]n,m,... | Copia las pistas de subtítulos n, m, etc. Los números son los ID de pista que pueden ser obtenidos con la opción --identify. No son los números de la pista (mire la sección IDs de pista). Por defecto: copia todas las pistas de subtítulos. En lugar del ID de pista también se puede especificar el código de idioma ISO 639-2. Esto sólo funciona para archivos de entrada que ofrecen etiquetas de idioma para sus pistas. Si los IDs están prefijados con ! entonces significa lo contrario: copia todas las pistas de este tipo excepto las enumeradas después del !.
-b, --button-tracks [!]n,m,... | Copia las pistas de botón n, m, etc. Los números son los ID de pista que pueden ser obtenidos con la opción --identify. No son los números de la pista (mire la sección IDs de pista). Por defecto: copia todas las pistas de botón. En lugar del ID de pista también se puede especificar el código de idioma ISO 639-2. Esto sólo funciona para archivos de entrada que ofrecen etiquetas de idioma para sus pistas. Si los IDs están prefijados con ! entonces significa lo contrario: copia todas las pistas de este tipo excepto las enumeradas después del !.
--track-tags [!]n,m,... | Copia las etiquetas de las pistas n, m, etc. Los números son los ID de pista que pueden ser obtenidos con la opción --identify. No son los números de la pista (mire la sección --identify). Por defecto: copia las etiquetas de todas las pistas. Si los IDs están prefijados con ! entonces significa lo contrario: copia todas las pistas de este tipo excepto las enumeradas después del !.
-m, --attachments [!]n[:all|first],m[:all|first],... | Copia los adjuntos con los IDs n, m, etc... a todos (all) o sólo al primer archivo generado (first). A cada ID se le puede añadir ':all' (que es la opción predeterminada) o ':first'. Si la división está activada entonces estos adjuntos cuyos IDs especificados con ':all' serán copiados a todos los archivos generados mientras que los especificados con ':first' sólo serán copiados al primer archivo generado. Si la división no está activada entonces ambas variantes producen el mismo efecto. Por defecto todos los adjuntos se copian a todos los archivos generados. Si los IDs están prefijados con ! entonces significa lo contrario: copia todas las pistas de este tipo excepto las enumeradas después del !.
-A, --no-audio | No copia ninguna pista de audio de este archivo.
-D, --no-video | No copia ninguna pista de video de este archivo.
-S, --no-subtitles | No copia ninguna pista de subtítulos de este archivo.
-B, --no-buttons | No copia ninguna pista de botón de este archivo.
-T, --no-track-tagsc | No copia ninguna etiqueta de la pista especificada de este archivo.
--no-chapters | No copia ningún capítulo de este archivo.
-M, --no-attachments | No copia ningún adjunto de este archivo.
--no-global-tagsc | No copia las etiquetas globales de este archivo.
--chapter-charset conjunto-caracteres | Establece el conjunto de caracteres que se usarán en la conversión a UTF-8 de la información de capítulos almacenada en el archivo de entrada. Mire la sección acerca de la conversión de archivos de texto y conjunto de caracteres para una explicación sobre cómo mkvmerge(1) realiza la conversión entre conjunto de caracteres.
--chapter-language código-idioma | Establece el código de idioma ISO639-2 que será escrito para cada entrada de capítulo. Esta opción puede ser usada para archivo de entrada que contengan capítulos sin información sobre los idiomas de los capítulos, p.e. para archivos MP4 y OGM.
-y, --sync TID:d[,o[/p]] | Ajusta los códigos de tiempo de la pista con el ID TID por d ms. Los IDs de la pista son los mismos que se muestran con la opción --identify. (mire la sección IDs de pista). o/p: ajusta las marcas de tiempo por o/p para fijar desfases lineales. Si se omite, p por defecto es 1. Tanto o y p pueden ser números decimales. Por defecto: no hay ninguna sincronización manual (que es lo mismo que d = 0 y o/p = 1.0). Esta opción se puede utilizar varias veces para un archivo de entrada aplicándola a diversas pistas seleccionando IDs de pista diferente de pista cada vez.
--cues TID:none|iframes|all | Controla qué entradas del índice (cue) de la pistas se crean para una pista concreta (mira la sección IDs de pista). 'None' evita la creación de entradas del índice. Sólo los bloques 'iframes' sin referencias anteriores o posteriores ( = fotogramas I en pistas de video) se insertan en el cue sheet. 'All' provoca que mkvmerge(1) genere las entradas del índice para todos los bloques lo que hará que el archivo sea más grande. Por defecto es 'iframes' para pistas de video y 'none' para las demás. Mire también la opción --no-cues que evita la creación de entradas del índice a pesar de las opciones --cues utilizadas. Esta opción se puede utilizar varias veces para un archivo de entrada aplicándola a diversas pistas seleccionando IDs de pista diferente de pista cada vez.
--default-track TID[:bool] | Establece el flag 'predefinida' a la pista especificada (mire la sección IDs de pista) si el argumento opcional bool no está presente. Si el usuario no selecciona explicitamente una pista entonces el reproductor debería preferir la pista marcada con el flag de 'predefinida'. Sólo una pista de cada tipo (audio, video, subtítulos, botones) puede ser establecida como 'predefinida'. Si el usuario quiere que ninguna pista tenga el flag de 'predefinida' entonces debe establecer bool a 0 para todas las pistas. Esta opción se puede utilizar varias veces para un archivo de entrada aplicándola a diversas pistas seleccionando IDs de pista diferente de pista cada vez.
--forced-track TID[:bool] | Establece el flag 'forzada' a la pista especificada (mire la sección IDs de pista) si el argumento opcional bool no está presente. Un reproductor debe mostrar todas las pistas marcadas con este flag establecido a 1. Esta opción se puede utilizar varias veces para un archivo de entrada aplicándola a diversas pistas seleccionando IDs de pista diferente de pista cada vez.
--blockadd TID:nivel | Conserva sólo los BlockAdditions hasta el nivel nivel de la pista especificada. Por defecto se conservan todos los niveles. Esta opción sólo afecta a ciertos tipos de códecs como WAVPACK4.
--track-name TID:nombre | Establece el nombre de la pista especificada al dado en nombre (mire la sección IDs de pista).
--language TID:idioma | Establece el idioma de la pista especificada (mire la sección IDs de pista). Tanto los códigos de idioma ISO639-2 y los códigos de país ISO639-1 están permitidos. Los códigos de los países serán convertidos a códigos de idioma automáticamente. Todos los idiomas incluidos sus códigos ISO639-2 pueden ser listados con la opción --list-languages. Esta opción se puede utilizar varias veces para un archivo de entrada aplicándola a diversas pistas seleccionando IDs de pista diferente de pista cada vez.
-t, --tags TID:nombre-archivo | Lee las etiquetas para la pista con el número TID del archivo nombre-archivo. Mire la sección de más adelante acerca de las etiquetas para más detalles.
--aac-is-sbr TID[:0|1] | Le dice a mkvmerge(1) que la pista con el ID TID es SBR AAC (también conocido como HE-AAC o AAC+). Estas opciones son necesarias si: a) el archivo de entrada es un archivo AAC (no para un archivo Matroska(tm)) y b) el archivo AAC contiene datos SBR AAC. La razón para esta opción es que es técnicamente imposible distinguir los datos AAC de los datos SBR AAC sin decodificar un fotograma completo de AAC. Cómo hay diversos problemas de patentes con los decodificadores AAC, mkvmerge(1) nunca realizará esta fase de decodificación. Por lo que, para archivos SBR AAC esta opción es obligatoria. El archivo generado podría no reproducirse correctamente, o ni si quiera hacerlo, si esta opción es omitida. Si el archivo de entrada es un archivo Matroska(tm) entonces el CodecID debería ser suficiente para detectar SBR AAC. Sin embargo, si el CodecID es erróneo entonces esta opción puede ser usada para corregirlo. Si mkvmerge detecta erróneamente que es un archivo AAC es SBR entonces puedes añadir ':0' al ID de pista.
--reduce-to-core TID | Algunos códecs de audio tienen un núcleo (core) con pérdidas y una extensión adicional que realiza una decodificación sin pérdidas. Esta opción le dice a mkvmerge(1) que sólo copie el núcleo y no la extensión. Por defecto, mkvmerge(1) copia tanto el núcleo como la extensión. Actualmente sólo a las pistas DTS les afecta esta opción. Sin embargo, las pistas TrueHD que contienen un núcleo AC-3 se presentan como dos pistas independientes para que el usuario puede seleccionar que pista quiere copiar. Para un DTS esto no funcionaría ya que las extensiones HD no puede ser decodificadas en si misma - a diferencia de lo que pasa con los datos TrueHD. Si mkvmerge detecta erróneamente que es un archivo AAC es SBR entonces puedes añadir ':0' al ID de pista.
--timecodes TID:nombre-archivo | Lee los códigos de tiempo que se utilizarán para el ID de pista especificado de nombre-archivo. Estos códigos de tiempo reemplazan de manera forzosa los códigos de tiempo que mkvmerge(1) normalmente calcula. Lea la sección acerca de archivos de códigos de tiempo externos.
--default-duration TID:x | Fuerza la duración predeterminada de una pista a un valor específico. También modifica los códigos de tiempo para que coincidan con la duración predeterminada. El argumento x debe tener el sufijo 's', 'ms', 'us', 'ns', 'fps', 'p' o 'i' para especificar la duración predeterminada en segundos, milisegundos, microsegundos, nanosegundos, 'fotogramas por segundo', 'fotogramas progresivos por segundo', o 'fotogramas entrelazados por segundo, respectivamente. El número x en si mismo puede ser un número decimal o fracción. Si la duración predeterminada no se fuerza entonces mkvmerge intentará derivar la duración predeterminada de la pista a partir del contenedor y/o el bitstream codificado para ciertos tipos de pista, p.e. AVC/h.264 o MPEG-2. Esta opción también puede ser utilizado para cambiar los FPS de las pistas de video sin tener que usar códigos de tiempo externos.
--fix-bitstream-timing-information TID[:0|1] | Por lo general, mkvmerge(1) no cambia la información del tiempo (frecuencia de fotograma/campo) almacenada en el bitstream de video. Con esta opción esa información se ajusta para coincidir con la información del tiempo. La información del tiempo del contenedor puede provenir de varias fuentes: desde la línea de comandos (mire la sección --default-duration), el contenedor de la fuente o derivado del bitstream. Note: Por ahora, sólo ha sido implementado para pistas AVC/h.264.
--nalu-size-length TID:n | Fuerza la longitud del tamaño NALU en n bytes. Este parámetro sólo se utiliza si el empaquetador de secuencias elementales AVC/h.264 es usado. Si se omite por defecto usa 4 bytes, pero hay archivos que contienen fotogramas o slices los cuales son todos menores de 65536 bytes. Para dichos archivos puede usar este parámetro y disminuir el tamaño a 2.
--compression TID:n | Selecciona el método de compresión para ser utilizado en la pista. Tenga en cuenta que el reproductor debe ser compatible con este método. Los valores válidos son 'ninguna', 'zlib', 'lzo'/'lxo1x', 'bz2'/'bzlib' y 'mpeg4_p2'/'mpeg4p2'. Los valores 'lzo'/'lxo1x' y 'bz2'/'bzlib' sólo están disponibles si mkvmerge(1) ha sido compilado con soporte para las librerías de compresión liblzo(tm) y bzlib(tm), respectivamente. El método de compresión 'mpeg4_p2'/'mpeg4p2' es un método especial llamado 'eliminador de encabezado' que sólo está disponible para pistas de video MPEG4 part 2. La compresión por defecto para algunas pistas de subtítulos es 'zlib'. Este método de compresión es para el que casi todas, si no todas, las aplicaciones de reproducción son compatibles. No se puede asegurar la compatibilidad para otros métodos de compresión que no sea 'ninguna'.

## 2.8. Opciones que sólo afectan a pistas de video

Option | Description
--- | ---
-f, --fourcc TID:FourCC | Fuerza el FourCC a un valor especificado. Sólo funciona para pistas de video en el modo 'modo compatibilidad de MS'.
--display-dimensions TID:anchoxalto | Los archivos Matroska(tm) contienen dos valores que establecen las propiedades de visualización a las que un reproductor debería usar para redimensionar la imagen en la reproducción a: ancho y alto de visualización. Estos valores pueden ser establecidos con esta opción, p.e. '1:640x480'. Otra manera de especificar los valores de visualización es usar la opción --aspect-ratio o --aspect-ratio-factor (mire más abajo). Estas opciones son mutuamente excluyentes.
--aspect-ratio TID:proporción|ancho/alto | Los archivos Matroska(tm) contienen dos valores que establecen las propiedades de visualización que un reproductor debería usar para redimensionar la imagen para reproducir a: ancho y alto de visualización. Con esta opción Matroska(tm) calculará automáticamente el ancho y alto de reproducción basado en el ancho y alto original de la imagen y la relación de aspecto especificada con esta opción. La relación de aspecto puede ser especificada como un número decimal de proporción o una fracción 'ancho/alto', p.e. '16/9'. Otra manera de especificar los valores de visualización es usar la opción --aspect-ratio-factor o --display-dimensions (mire más abajo). Estas opciones son mutuamente excluyentes.
--aspect-ratio-factor TID:factor|n/d | Otra manera de establecer la relación de aspecto es especificar un factor. La relación de aspecto original es primero multiplicada por este factor y después se usa como la relación de aspecto definitiva. Otra manera de especificar los valores de visualización es usar la opción --aspect-ratio o --display-dimensions (mire más abajo). Estas opciones son mutuamente excluyentes.
--cropping TID:izquierda,arriba,derecha,abajo | Establece los valores especificados como los parámetros de recorte de píxeles para una pista de video.
--stereo-mode TID:n|palabraclave | Establece el modo estereoscópico para la pista de video con el ID de pista TID. El modo puede ser un número n entre 0 y 14 o una de estas palabras clave: 'mono', 'side_by_side_left_first', 'top_bottom_right_first', 'top_bottom_left_first', 'checkerboard_right_first', 'checkerboard_left_first', 'row_interleaved_right_first', 'row_interleaved_left_first', 'column_interleaved_right_first', 'column_interleaved_left_first', 'anaglyph_cyan_red', 'side_by_side_right_first', 'anaglyph_green_magenta', 'both_eyes_laced_left_first', 'both_eyes_laced_right_first'.

## 2.9. Opciones que sólo afectan a pistas de subtítulos

Option | Description
--- | ---
--sub-charset TID:conjunto-caracteres | Establece el conjunto de caracteres para realizar la conversión a UTF-8 para los subtítulos UTF-8 de un ID de pista especificada. Si no se especifica el conjunto de caracteres será derivado de la configuración regional actual. Tenga en cuenta que un conjunto de caracteres no es necesario para leer subtítulos desde archivos mkvmerge(1) o desde secuencias Kate, ya que estos siempre se almacenan en UTF-8. Mire la sección acerca de archivos de texto y conjunto de caracteres para una explicación sobre cómo mkvmerge(1) realiza la conversión entre conjunto de caracteres. Esta opción se puede utilizar varias veces para un archivo de entrada aplicándola a diversas pistas seleccionando IDs de pista diferente de pista cada vez.

## 2.10. Otras opciones

Option | Description
--- | ---
-i, --identify nombre-archivo | Le permitirá a mkvmerge(1) analizar el archivo e informar de qué tipo es, las pistas que contiene y los IDs de pista. Si se usa esta opción entonces la unica opción permitida es el nombre-archivo. The output format used for the result can be changed with the option --identification-format.
-I, --identify-verbose nombre-archivo | This option is deprecated. Use --identification-format verbose-text --identify … instead.
-F, --identification-format format | Determines the output format used by the --identify option. The following formats are supported: text (the default if this option isn't used), verbose-text and json. The text format is short and human-readable. It consists of one line per item found (container, tracks, attachments etc.). This format is not meant to be parsed. The output will be translated into the language mkvmerge(1) uses (see also --ui-language). The verbose-text format extends the text format with additional properties for each item. The extra information is surronded by square brackets. It consists of space-saparated key/value pairs where keys and values are separated by a colon. Cada valor es escapado conforme a las reglas descritas en la sección acerca de caracteres especiales de escape en el texto. This format is not meant to be parsed. The output will be translated into the language mkvmerge(1) uses (see also --ui-language). The json format outputs a machine-readable JSON representation. This format follows the JSON schema described in the file mkvmerge-identification-output-schema.json.
-l, --list-types | Muestra una lista de archivos de entrada compatibles.
--list-languages | Muestra una lista de idiomas y sus códigos ISO639-2 que se pueden utilizar con la opción --language.
--priority prioridad | Establece la prioridad de procesamiento con la que mkvmerge(1) se ejecutará. Los valores válidos son 'muy baja', 'baja', 'normal', 'alta' y 'muy alta'. Si no se especifica nada entonces se usa la opción 'normal'. En sistemas basados en Unix, mkvmerge(1) usará la función nice(2). Por lo tanto, sólo el súper usuario puede usar 'alta' y 'muy alta'. En Windows todos los valores pueden se usados por todos los usuarios. Seleccionando 'muy baja' también provocará que mkvmerge(1) seleccione la más baja prioridad de entrada y salida, así como la de procesamiento.
--command-line-charset conjunto-caracteres | Establece el conjunto de caracteres para convertir las cadenas de texto especificadas en la línea de comandos. Por defecto, el conjunto de caracteres está especificado por la configuración regional actual. Esta configuración se aplica a los argumentos de las siguientes opciones: --title, --track-name y --attachment-description.
--output-charset conjunto-caracteres | Establece el conjunto de caracteres para convertir las cadenas de texto que serán usadas en el archivo de salida. Por defecto, se ajusta al conjunto de caracteres dado por la configuración local del sistema.
-r, --redirect-output nombre-archivo | Escribe todos los mensajes al archivo nombre-archivo en vez de en la consola. Aunque esto se puede hacer fácilmente con la opción de redirección hay casos en los que es necesaria esta opción: cuando el terminal reinterpreta la salida antes de escribirlo al archivo. El conjunto de caracteres establecido con --output-charset se respeta.
--ui-language código | Fuerza el uso de la traducción de un concreto código de idioma (p.e. 'es_ES' para el Español). Pienso que es preferible usar las variables de entorno LANG, LC_MESSAGES y LC_ALL. Introducir 'list' como el valor del código provocará que mkvmerge(1) genere una lista de traducciones disponibles.
--debug topic | Habilita la depuración para una característica concreta. Esta opción sólo es útil para desarrolladores.
--engage característica | Habilita características experimentales. Una lista de características disponibles puede ser solicitada con la instrucción mkvmerge --engage list. Estas características no están indicadas para ser usadas en situaciones normales.
--gui-mode | Habilita el modo GUI. En este modo las líneas especialmente formateadas pueden ser generadas para decirle a un control de la GUI lo que está pasando. Estos mensajes se rigen bajo el formato '#GUI#mensaje'. El mensaje puede ser continuado por pares de valores/claves como en '#GUI#mensaje#clave1=valor1#clave2=valor2…'. Ni los mensajes ni las claves pueden ser traducidas y siempre se generan en inglés.
@archivo-opciones | Lee argumentos adicionales de la línea de comandos desde el archivo archivo-opciones. Mire la sección acerca de archivos de opciones para más información.
--capabilities | Muestra información sobre las características adicionales que han sido compiladas y sale. La primera línea generada será la información de la versión. El resto de líneas contienen exactamente una palabra cuya presencia indica que esa característica ha sido compilada. Estas características son: 'BZ2' -- la librería de compresión bzlib(tm). Se aplica a los métodos de compresión disponibles para la opción --compression. 'LZO' -- la librería de compresión lzo(tm). Se aplica a los métodos de compresión disponibles para la opción --compression. 'FLAC' -- lee archivos en bruto FLAC y manipula pistas FLAC en otros contenedores. p.e. Ogg(tm) o Matroska(tm).
-h, --help | Muestra información de uso y sale.
-V, --version | Muestra la información de la versión y sale.
--check-for-updates | Comprueba online si hay nuevas versiones al descargar el archivo ubicado en la URL http://mkvtoolnix-releases.bunkus.org/latest-release.xml. Cuatro líneas serán generadas del tipo clave=valor: la URL desde donde se obtuvo la información (clave version_check_url), la versión actual (clave running_version), la última versión disponible (clave available_version) y la URL de descarga (clave download_url). Después el programa sale con un código de salida 0 si ninguna versión nueva está disponible, con 1 si hay disponible una versión más actual y con 2 si ocurre algún error (p.e. si la información de la actualización no puede ser obtenida). Esta opción sólo está disponible si el programa fue creado con compatibilidad para libcurl.

# 3. Uso

Para cada archivo, el usuario puede seleccionar qué pistas mkvmerge(1) debe tomar. Todos se almacenan en un archivo especificado con -o. Una lista de formatos conocidos (y soportados) se pueden obtener con la opción -l.

Important:

El orden de las opciones en la línea de comandos es importante. Por favor, lea la sección "Orden de opciones" si eres nuevo usando el programa.

# 4. Orden de opciones

El orden en el qué las opciones son especificadas son importantes para algunas opciones. Las opciones se dividen en dos categorías:

1. Opciones que afectan a todo el programa y no están vinculadas a ningún archivo de entrada. Estas son, entre otras, --command-line-charset, --output o --titlee. Estas pueden aparecer en cualquier parte de la línea de comandos.

2. Opciones que afectan a un solo archivo de entrada o una sola pista de un archivo de entrada. Estas opciones se aplican al siguiente archivo en la línea de comandos. Todas las opciones que se aplican al mismo archivo de entrada (o las pistas del mismo archivo de entrada) se pueden especificar en cualquier orden, siempre y cuando, todas aparezcan antes del nombre del archivo de entrada. Ejemplos para las opciones que se aplican a un archivo de entrada son --no-chapters o --chapter-charset. Ejemplos para las opciones que se aplican a una única pista son --default-duration o --language.

Las opciones se procesan de izquierda a derecha. Si una opción aparece varias veces en el mismo ámbito, se utilizará la ultima ocurrencia. Por lo tanto, el título se establecerá a "Algo más" en el siguiente ejemplo:

    mkvmerge -o salida.mkv --title "Esto y eso" entrada.avi --title "Algo más"

El siguiente ejemplo muestra como usando dos veces la opción --language todo es correcto ya que son usadas en diferentes ámbitos. A pesar de que se aplican al mismo ID de pista, estas se aplican a diferentes archivos de entrada y por lo tanto tienen diferentes ámbitos:

    mkvmerge -o salida.mkv --language 0:spa español.ac3 --language 0:jpn japones.ac3

# 5. Ejemplos

Supongamos que tienes un archivo llamado MiPelícula.avi y una pista de audio en otro archivo, p.e. 'MiPelícula.wav'. Lo primero que necesitas es codificar el audio a OggVorbis(tm):

    oggenc -q4 -o MiPelícula.ogg MiPelícula.wav

Después de unos minutos ya puedes unir el audio y el video:

    mkvmerge -o MiPelícula-con-sonido.mkv MiPelícula.avi MiPelícula.ogg

Si tu AVI ya contiene una pista de audio entonces también será copiada (si mkvmerge(1) soporta el formato de ese audio). Para evitar esto, simplemente hacer lo siguiente:

    mkvmerge -o MiPelícula-con-sonido.mkv -A MiPelícula.avi MiPelícula.ogg

Después de unos minutos decides ripear otra pista de audio, p.e. los comentarios del director u otro idioma, 'MiPelícula-añadir-audio.wav'. La codificas de nuevo y la añades al anterior archivo:

    oggenc -q4 -o MiPelícula-añadir-audio.ogg MiPelícula-añadir-audio.wav
    mkvmerge -o MM-completa.mkv MiPelícula-con-sonido.mkv MiPelícula-añadir-audio.ogg

El mismo resultado se puede lograr con:

    mkvmerge -o MM-completa.mkv -A MiPelícula.avi MiPelícula.ogg MiPelícula-añadir-audio.ogg

Ahora abra el mplayer(tm) y disfruta. Si tienes múltiples pistas de audios (o incluso pistas de video) entonces le puedes decir a mplayer(tm) que pista debe reproducir con las opciones '-vid' y '-aid'. Estos están en base y no distinguen entre video y audio (el índice comienza en el cero).

i necesitas una pista de audio sincronizada puedes hacerlo fácilmente. Lo primero es averiguar que ID de pista tiene la pista Vorbis, con:

    mkvmerge --identify desincronizado.ogg

Ahora pues usar ese ID en la siguiente línea de comandos:

    mkvmerge -o sincronizado.mkv -A entrada.avi -y 12345:200ms desincronizado.ogg

Esto añadiría 200ms de silencio al inicio de la pista de audio con el ID 12345 obtenido de 'desincronizado.ogg'.

Algunas películas comienzan sincronizadas correctamente pero poco a poco se desincronizan. Para este tipo de películas se puede especificar un factor de desfase que será aplicado a todas las marcas de tiempo (timestamps) -- ningún dato es añadido o eliminado. Si se aplicas un factor muy grande o pequeño el resultado puede ser incorrecto. Un ejemplo sería un episodio transcodificado que tiene 0.2 segundos de desincronización al final de la película, y cuya longitud total es de 77340 fotogramas. Si el framerate es 29.97fps, 0.2 segundos corresponden aproximadamente a 6 fotogramas. Así que se puede hacer:

    mkvmerge -o sincronizado.mkv -y 23456:0,77346/77340 desincronizado.mkv

El resultado fue bueno.

Las opciones de sincronización también pueden ser usadas para subtítulos de igual modo.

Para subtítulos de texto puede utilizar cualquier programa para Windows (como SubRipper(tm)) o el paquete subrip(tm) que se puede encontrar en fuentes de transcodificación(1) en el directorio 'contrib/subrip'. El proceso general es:

1. Extraer una secuencia de subtítulos en bruto para la fuente:

       tccat -i /ruta/a/copiar/dvd/ -T 1 -L | tcextract -x ps1 -t vob -a 0x20 | subtítulo2pgm -o MiPelícula

2. Convertir las imágenes PGM generadas a texto con gocr:

       pgm2txt MiPelícula

3. Revisar el resultado de los archivos de texto:

       ispell -d americano *txt

4. Convertir los archivos de texto a un archivo SRT:

       srttool -s -w -i MiPelícula.srtx -o MiPelícula.srt

El archivo generado puede ser utilizado como otro archivo de entrada para mkvmerge(1):

    mkvmerge -o MiPelícula.mkv MiPelícula.avi MiPelícula.srt

Si necesitas especificar un idioma para una pista concreta, esto es realmente fácil. Primero busca tu idioma en el código ISO639-2. mkvmerge(1) puede mostrarte todos esos códigos para ti:

    mkvmerge --list-languages

Busca en la lista de los idiomas el que necesites. Supongamos que tienes dos pistas de audio en un archivo Matroska(tm) y necesitas establecer sus códigos de idioma, y que sus IDs de pista son 2 y 3. Esto se puede hacer con:

    mkvmerge -o con-códigos-idioma.mkv --language 2:spa --language 3:jpn sin-códigos-idioma.mkv

Como puedes ver puedes usar la opción --language varias veces.

Es posible que quiera que el reproductor use el holandés como el idioma predeterminado. También tiene subtítulos adicionales, p.e. en inglés y francés, y desea que el programa de reproducción muestre por defecto en francés. Esto se puede hacer con:

    mkvmerge -o con-códigos-idioma.mkv --language 2:ger --language 3:dut --default-track 3 sin-códigos-idioma.mkv --language 0:eng inglés.srt --default-track 0 --language 0:fre francés.srt

Si no ves en la salida de mkvinfo(1), los flags del idioma o pista predeterminada que ha especificado, por favor lea la sección acerca de valores predeterminados.

Deshabilita la compresión para un archivo de entrada.

    mkvmerge -o sin-compresión.mkv --compression -1:none MiPelícula.avi --compression -1:none MiPelícula.srt

# 6. IDs de pista

Algunas opciones para mkvmerge(1) necesitan un ID de pista para especificar a qué pista se le tienen que aplicar. Estos IDs de pista son mostrados por los lectores cuando desmultiplexan el archivo de entrada actual, o si mkvmerge(1) es invocado con la opción --identify. Un ejemplo para esto:

    mkvmerge -i v.mkv
    File 'v.mkv': container: Matroska
    Track ID 0: video (V_MS/VFW/FOURCC, DIV3)
    Track ID 1: audio (A_MPEG/L3)

No debe confundir los IDs de pista que se asignan a las pistas, que se escriben en el archivo MKV generado, con los IDs de pista del archivo de entrada. Sólo los IDs de pista del archivo de entrada se utilizan para las opciones que necesitan estos valores.

También tenga en cuenta que cada archivo de entrada tiene su propio conjunto de IDs de pista. Por lo tanto, los IDs de pista para el archivo 'archivo1.ext', tal y como había reportado 'mkvmerge --identify' no cambian, no importa cuántos otros archivos de entrada existan o en qué posición se use 'archivo1.ext'.

Los IDs de pista son asignados como estos:

- Archivos AVI: La pista de video tiene el ID 0. Las pistas de audio obtienen sus IDs en orden creciente empezando desde el 1.

- Los archivos AAC, AC-3, MP3, SRT y WAV: La única 'pista' en ese archivo se le asigna el ID 0.

- La mayoría de archivos: Los IDs de pista son asignados en el orden en el qué se encuentran, empezando desde el número 0.

El ID de pista especial '-1' es un comodín y aplica la opción especificada a todas las pistas que se leen del archivo de entrada.

Las opciones que utilizan los IDs de pista son aquellos cuya descripción contiene un 'TID'. Las siguientes opciones también utilizan IDs de pista: --audio-tracks, --video-tracks, --subtitle-tracks, --button-tracks y --track-tags.

# 7. Conversión de archivos de texto y conjunto de caracteres

Note:

Esta sección se aplica a todos los programas de MKVToolNix aunque sólo se mencione mkvmerge(1).

## 7.1. Introducción

Todos los textos en un archivo Matroska(tm) están codificados en UTF-8. Esto implica que mkvmerge(1) convierte cada archivo de texto que lee, así como cada texto dado en la línea de comandos, desde un conjunto de caracteres a UTF-8. Por contra, esto también significa que la salida de mkvmerge(1) tiene que ser convertida desde UTF-8 a un conjunto de caracteres, p.e. si una traducción no inglesa se usa con --ui-language o para texto que proviene desde un archivo Matroska(tm).

mkvmerge(1) realiza esta conversión automáticamente en función de la presencia de un Marcador de Orden Bytes (abreviado: BOM) o de la configuración regional actual. Cómo el conjunto de caracteres se deduce de la configuración regional depende del sistema operativo donde se ejecute mkvmerge(1)

## 7.2. Marcador de Orden Bytes (BOM)

Los archivos de texto que comienzan con un BOM ya están codificados en una representación de UTF. mkvmerge(1) admite los siguientes cinco modos: UTF-8, UTF-16 Little y Big Endian, UTF-32 Little y Big Endian. Los archivos de texto con un BOM son convertidos automáticamente a UTF-8. Todos los parámetros que, de otra manera, cambian el conjunto de caracteres de un archivo de este tipo (p.e. --sub-charset) son ignorados silenciosamente.

## 7.3. Sistemas Linux y Unix-like incluido Mac OS

El sistemas Unix, mkvmerge(1) usa la llamada al sistema setlocale(3) que a su vez utiliza las variables de entorno LANG, LC_ALL y LC_CYPE. El conjunto de caracteres resultante es a menudo uno de UTF-8 o de la familia ISO-8859-* y se utiliza para todas las operaciones del archivo de texto y para codificar las cadenas de texto en la línea de comandos y la salida de la consola.

## 7.4. Windows

En Windows el juego de caracteres predeterminado utilizado para la conversión de archivos de texto se determina mediante una llamada a la GetACP() del sistema.

La lectura de la línea de comandos se realiza con la función GetCommandLineW() que ya devuelve una cadena de texto Unicode. Por lo tanto, en Windows la opción --command-line-charset se ignora.

La salida a la consola se presenta en tres escenarios:

1. Si la salida se redirige con la opción --redirect-output entonces el conjunto de caracteres predeterminado es UTF-8. Se puede cambiar con --output-charset.

   Si la salida se redirige con cmd.exe, p.e. con mkvinfo archivo.mkv > info.txt, entonces el conjunto de caracteres siempre es UTF-8 y no se puede cambiar.

   De otra manera, (cuando se escribe directamente a la consola) la función de Windows WriteConsoleW() se utiliza y la opción --output-charset se ignora. La consola debería ser capaz de generar todos los caracteres Unicode del correspondiente idioma que está instalado (p.e. los caracteres chinos podrían no ser mostrados en versiones inglesas de Windows).

## 7.5. Opciones de línea de comandos

Las siguientes opciones permiten especificar los conjuntos de caracteres:

- --sub-charset para archivos y pistas de subtítulos de textos almacenadas en formatos de contenedores para las que el conjunto de caracteres no se puede determinar sin ambigüedad. (p.e. archivo Ogg),

- --chapter-charset para archivos y pistas de capítulos de texto almacenadas en formatos de contenedores para las que el conjunto de caracteres no se puede determinar sin ambigüedad. (p.e. archivos Ogg para información de capítulos, pista y archivos, etc..; archivos MP4 para información del capítulos),

- --command-line-charset para todas las cadenas de texto en la línea de comandos,

- --output-charset para todas las cadenas de texto escritas en la consola o a un archivo si la salida ha sido redirigida con la opción --redirect-output. En los sistemas que no sean Windows, el conjunto de caracteres por defecto, es el del sistema actual. En windows por defecto es a UTF-8, tanto redirigiendo con --redirect-output como con cmd.exe, p.e. mkvinfo archivo.mkv > info.txt.

# 8. Archivos de opciones

Un archivo de opciones es un archivo que mkvmerge(1) puede leer argumentos adicionales de la línea de comandos. Esto se puede utilizar para eludir ciertas limitaciones en el shell (entorno) o el sistema operativo como una longitud limitada de la línea de comandos cuando se ejecutan programas externos.

Hay diversas reglas respecto a los archivos de opciones. Las líneas cuyo primer carácter es una almohadilla ('#') son tratadas como comentarios e ignorados. Los espacios en blanco al principio y final serán eliminados. Cada línea debe contener sólo una opción.

Una línea que no contiene nada es ignorada. Un argumento vacío se representa con la línea '#EMPTY#'.

Varios caracteres pueden ser escapados, p.e. si necesitas iniciar una línea no comentada con '#'. Las reglas están descritas en la sección acerca de texto escapado.

Las barras invertidas deben ser siempre escapadas. Las almohadillas deben ser escapadas si no inicia ningún comentario.

La línea de comandos 'mkvmerge -o "mi archivo.mkv" -A "una película.avi" audio.ogg' podría ser convertida al siguiente archivo de opciones:

    # Escribe en el archivo "C:\Matroska\mi archivo.mkv", bajo Windows.

    C:\\Matroska\\mi archivo.mkv
    # Establece el título a '#65'.
    --title
    \h65
    # Sólo toma el video de "una película.avi".
    -A
    una película.avi
    audio.ogg

# 9. Caracteres especiales de escape en el texto

Hay pocos sitios en los que los caracteres especiales en el texto puedan o deban ser escapados. Las reglas del escape son simples: cada carácter que necesite ser escapado es reemplazado con una barra invertida seguida de otro carácter.

Las reglas son: ' ' (un espacio) se convierte a '\s', '"' (doble comillas) sería '\2', ':' se convierte a '\c', '#' será reemplazada como '\h', '[' será '\B', y '\' (una barra invertida) se expresaría como '\\'.

# 10. Subtítulos

Hay diversos formatos de subtítulos de texto y bitmap que pueden ser embebidos en Matroska(tm). Los subtítulos de texto se deben recodificar a UTF-8 para que se muestren correctamente en un reproductor (mire la sección acerca de archivos de texto y conjunto de caracteres para una explicación sobre cómo mkvmerge(1) realiza la conversión entre conjunto de caracteres). Los subtítulos Kate ya están codificados en UTF-8 y no se tienen que recodificar.

Por el momento, se admiten los siguientes formatos de subtítulos:

- Archivos Subtitle Ripper (SRT)

- Scripts Substation Alpha (SSA) / Advanced Substation Alpha (ASS)

- Archivos Universal Subtitle Format (USF)

- Secuencias OggKate

- Archivos de subtítulos bitmap VobSub

- Archivos de subtítulos bitmap PGS, tal y como se encuentran en discos BluRay.

# 11. Vinculación de archivos

Matroska(tm) admite la vinculación de archivos que simplemente lo que significa que un archivo en especifico es el predecesor o sucesor del archivo actual. Para ser precisos, los archivos están realmente vinculados sino los segmentos Matroska(tm). Como la mayoría de archivos probablemente sólo contienen un segmento Matroska(tm) las siguientes explicaciones usan el término 'vinculación de archivos' aunque realmente 'vinculación de segmentos' sería lo más correcto.

Cada segmento se identifica por un único UID del segmento de 128 bits de longitud. Este UID es automáticamente generado por mkvmerge(1). La vinculación se realiza principalmente insertando los UIDs del segmento (abreviado: SID) del anterior/siguiente archivo en la información del encabezado del segmento. mkvinfo(1) muestra estos SIDs si los encuentra.

Si un archivo se divide en varios archivos más pequeños y se utiliza la vinculación, entonces los códigos de tiempo no comenzarán por 0 si no que continuará desde dónde el último archivo lo dejó. De esta manera el tiempo absoluto se mantiene incluso si los archivos anteriores no están disponibles p.e. cuando se transmiten). Si no se utiliza la vinculación entonces los códigos de tiempo de cada archivo comenzarán desde 0. Por defecto, mkvmerge(1) no usa la vinculación de archivos. Si lo necesita podrá activarlo con la opción --link. Esta opción sólo es útil si la división también se activa.

Independientemente de si la división se activa o no, el usuario le puede decir a mkvmerge(1) que vincule los archivos generados a un especifico SIDs. Esto se consigue con las opciones --link-to-previous y --link-to-next. Estas opciones aceptan un segmento SID en el formato que mkvinfo(1) genera: 16 números hexadecimales comprendidos entre 0x00 y 0xff, cada uno con el prefijo '0x', p.e. '0x41 0xda 0x73 0x66 0xd9 0xcf 0xb2 0x1e 0xae 0x78 0xeb 0xb4 0x5e 0xca 0xb3 0x93'. De manera alternativa, se puede utilizar una forma más simple: 16 números hexadecimales comprendidos entre 0x00 y 0xff, sin el prefijo '0x' y sin espacios, p.e. '41da7366d9cfb21eae78ebb45ecab393'.

Si se utiliza la división entonces el primer archivo se vincula al SID especificado con SID y el último archivo se vincula al SID especificado con --link-to-next. Si no se utiliza la división entonces el archivo será vinculado a ambos SIDs.

# 12. Valores predeterminados

La especificación Matroska(tm) establece que algunos elementos tienen un valor predeterminado. Por lo general, si el valor es igual al predeterminado entonces no será escrito en el archivo a fin de ahorrar espacio. Los elementos que el usuario podría echar en falta en la salida de mkvinfo(1) son los elementos idioma y flag de pista predefinida. El valor predeterminado para el idioma es Inglés ('eng'), y para flag de pista predefinida es true. Por lo tanto, si utiliza --language 0:eng para una pista entonces no se mostrará en la salida de mkvinfo(1).

# 13. Attachments

Es posible que desee conservar algunas fotos junto con su archivo Matroska(tm), o usar subtítulos SSA que requieren de una fuente especial SSA que es realmente rara. En estos casos puede adjuntar estos archivos al archivo Matroska(tm). No sólo son añadidos al archivo sino que son embebidos. Un reproductor puede entonces mostrar estos archivos (en el caso de las 'fotos') o usarlos para renderizar los subtítulos (en el caso de las fuentes 'TrueType(tm)').

Aquí está un ejemplo de cómo adjuntar una foto y fuente TrueType(tm) al archivo generado:

    mkvmerge -o salida.mkv -A video.avi audio.ogg \
      --attachment-description "La banda y yo, detrás del escenario en una pequeña reunión" \
      --attachment-mime-type image/jpeg \
      --attach-file la_banda_y_yo.jpg \
      --attachment-description "Una fuente rara e increíblemente chula" \
      --attachment-type application/octet-stream \
      --attach-file fuente_muy_chula.ttf

Si un archivo Matroska(tm) contiene adjuntos se utiliza como archivo de entrada entonces mkvmerge(1) copiará todos los adjuntos en el nuevo archivo. La selección de qué archivos serán copiados o no, puede ser cambiada con las opciones --attachments y --no-attachments.

# 14. Chapters

El sistema de capítulos de Matroska(tm) es más poderoso de lo que era el antiguo sistema utilizado con los archivos OGM. Las completas especificaciones se pueden encontrar en la página web de Matroska.

mkvmerge(1) admite dos tipos de archivos de capítulos como entrada. El primer formato, denominado 'formato simple de capítulos', que es el mismo formato que se encuentra en las herramientas OGM. El segundo formato se basa en el formato de capítulos XML que son admitidos por todas las funcionalidades de capítulos de Matroska(tm).

## 14.1. El formato simple de capítulos

Este formato consiste en un par de líneas que comienzan con 'CHAPTERxx=' y 'CHAPTERxxNAME=', respectivamente. La primera contiene el código de tiempo inicial mientras que el segundo lo hace al títlo. Ejemplo:

    CHAPTER01=00:00:00.000
    CHAPTER01NAME=Intro
    CHAPTER02=00:02:30.000
    CHAPTER02NAME=El niño se prepara para el rock
    CHAPTER03=00:02:42.300
    CHAPTER03NAME=El niño sacude la casa

mkvmerge(1) transformará cada par de líneas en un ChapterAtom de Matroska(tm). No se establece ningún ChapterTrackNumber lo que significa que todos los capítulos se aplican a todas las pistas del archivo.

Como se trata de un archivo de texto, podría ser necesaria realizar una conversión del conjunto de caracteres. Mire la sección acerca de archivos de texto y conjunto de caracteres para una explicación sobre cómo mkvmerge(1) realiza la conversión entre conjunto de caracteres.

## 14.2. El formato de capítulos basados en XML

El formato de capítulos basados en XML es similar a este ejemplo:

    <?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>Un capítulo corto</ChapterString>
            <ChapterLanguage>spa</ChapterLanguage>
          </ChapterDisplay>
          <ChapterAtom>
            <ChapterTimeStart>00:00:46.000</ChapterTimeStart>
            <ChapterTimeEnd>00:01:10.000</ChapterTimeEnd>
            <ChapterDisplay>
              <ChapterString>Una parte de un capítulo corto</ChapterString>
              <ChapterLanguage>spa</ChapterLanguage>
            </ChapterDisplay>
          </ChapterAtom>
        </ChapterAtom>
      </EditionEntry>
    </Chapters>

Con este formato, se pueden realizar tres cosas que con el formato simple no se puede:

1. Se puede establecer la marca de tiempo para el final del capítulo,

2. los capítulos se pueden anidar,

3. el idioma y país también.

La distribución mkvtoolnix contiene algunos archivos a modo de ejemplo en el subdirectorio doc que se pueden usar como base.

A continuación, se muestran las etiquetas soportadas por XML, sus tipos de datos y, en dónde corresponda, el rango válido para sus valores:

    Chapters (maestro)
      EditionEntry (maestro)
        EditionUID (entero sin signo, rango válido: 1 <= valor)
        EditionFlagHidden (entero sin signo, rango válido: 0 <= valor <= 1)
        EditionFlagDefault (entero sin signo, rango válido: 0 <= valor <= 1)
        EditionFlagOrdered (entero sin signo, rango válido: 0 <= valor <= 1)
        ChapterAtom (maestro)
          ChapterAtom (maestro)
          ChapterUID (entero sin signo, rango válido: 1 <= valor)
          ChapterTimeStart (entero sin signo)
          ChapterTimeEnd (entero sin signo)
          ChapterFlagHidden (entero sin signo, rango válido: 0 <= valor <= 1)
          ChapterFlagEnabled (entero sin signo, rango válido: 0 <= valor <= 1)
          ChapterSegmentUID (binario, rango válido: 1 <= tamaño en bytes)
          ChapterSegmentEditionUID (entero sin signo, rango válido: 1 <= valor)
          ChapterPhysicalEquiv (entero sin signo)
          ChapterTrack (maestro)
            ChapterTrackNumber (entero sin signo, rango válido: 1 <= valor)
          ChapterDisplay (maestro)
            ChapterString (cadena de texto UTF-8)
            ChapterLanguage (cadena de texto UTF-8)
            ChapterCountry (cadena de texto UTF-8)
          ChapterProcess (maestro)
            ChapterProcessCodecID (entero sin signo)
            ChapterProcessPrivate (binario)
            ChapterProcessCommand (maestro)
              ChapterProcessTime (entero sin signo)
              ChapterProcessData (binario)

## 14.3. Notas generales

Cuando se dividen los archivos, mkvmerge(1) también ajustará correctamente los capítulos. Esto significa que cada archivo sólo incluye las entradas de capítulo que se aplican a él, y que se compensará el código de tiempo para que coincida con el nuevo código de tiempo de cada archivo generado.

mkvmerge(1) es capaz de copiar los capítulos de los archivos de entrada mkvmerge(1) a menos que explícitamente se deshabilite con la opción --no-chapters. Los capítulos procedentes de todas las fuentes (archivos Matroska(tm), Ogg, Matroska(tm), archivos de texto de capítulos) por lo general no se fusionan y acaban en ChapterEditions independientes. Sólo si los capítulos que se leen de diversos archivos Matroska(tm) o XML, comparten el mismo UID de edición, entonces los capítulos se fusionarán en un único ChapterEdition. Si dicha fusión también se desea realizar en otras situaciones, el usuario tiene que extraer primero los capítulos de todas las fuentes con mkvextract(1), y fusionar los archivos XML manualmente para multiplexarlos después.

# 15. Tags

## 15.1. Introducción

Matroska(tm) admite un amplio conjunto de etiquetas que están en desuso así como un nuevo sistema, más simple, como se utiliza en la mayoría de los contenedores: CLAVE=VALOR. Sin embargo, en Matroska(tm) estas etiquetas también se pueden anidar, y tanto la CLAVE como el VALOR son elementos propios. El archivo de ejemplo example-tags-2.xml muestra cómo usar este nuevo sistema.

## 15.2. Alcance de las etiquetas

Las etiquetas Matroska(tm) no se aplican automáticamente al archivo entero. Es posible hacerlo, y también a partes diferentes del archivo: a una o más pistas, a una o más capítulos, o incluso a una combinación de ambas. La especificación de Matroska proporciona más detalles sobre esto.

Una cosa importante es que las etiquetas están vinculadas a pistas o capítulos con el elemento de etiquetas Targets de Matroska(tm), además los UIDs usados para vincularlos no son los IDs de la pista que mkvmerge(1) utiliza en todas partes. En cambio, los números usados son los UIDs que mkvmerge(1) calcula automáticamente (si la pista se toma de otro formato de archivo que no sea Matroska(tm) o que se copian desde el archivo de origen si el archivo de origen de la pista es un archivo Matroska(tm). Por lo tanto, es complicado saber que UIDs se van a usar en el archivo de etiquetas antes de que el archivo se proporcione a mkvmerge(1).

mkvmerge(1) tiene dos opciones con las que se pueden añadir etiquetas a los archivos Matroska(tm): las opciones --global-tags y --tags. La diferencia es que la opción anterior, --global-tags, hará que las etiquetas se apliquen al archivo entero mediante la eliminación de cualquiera de los elementos Targets mencionados anteriormente. La última opción, --tags, inserta automáticamente el UID que mkvmerge(1) genera para la etiqueta especificada con la parte TID de la opción --tags.

## 15.3. Ejemplo

Supongamos que necesitas añadir etiquetas a una pista de video leída desde un archivo AVI. Mkvmerge --identify archivo.avi informa que el ID de la pista de video (¡No confundir este ID con el UID!) es 0. Así que creará el archivo de etiquetas, dejando a un lado todos los elementos Targets e invocar a mkvmerge(1):

    mkvmerge -o archivo.mkv --tags 0:etiquetas.xml archivo.avi

## 15.4. Formato del archivo de etiquetas

mkvmerge(1) admite el formato de archivos de etiquetas basadas en XML. El formato es muy similar al modelo de la especificación Matroska. Tanto la distribución binaria como la fuente de MKVToolNix vienen acompañadas de un archivo de ejemplo llamado example-tags-2.xml que enumera simplemente todas las etiquetas conocidas y que se puede usar como base para las etiquetas de la vida real.

Las básicas son:

- El elemento más externo debe ser <Tags>.

- Una etiqueta lógica está contenido dentro de un par de etiquetas XML <Tag>.

- Los espacios en blanco, directamente antes y después del contenido de la etiqueta, se ignoran.

## 15.5. Tipos de datos

El nuevo sistema de etiquetado de Matroska(tm) sólo conoce dos tipos de datos, una cadena de texto UTF-8 y un tipo binario. El primero se usa para el nombre de la etiqueta junto con el elemento <String> mientras que el tipo binario se usa para el elemento <Binary>.

Como dato binario, en si mismo, no tendría sentido en un archivo XML, mkvmerge(1) admite otros dos métodos para almacenar datos binarios. Si el contenido de una etiqueta XML comienza con '@' entonces el texto siguiente se trata como un nombre de archivo. El contenido del archivo correspondiente se copia en el elemento Matroska(tm).

De lo contrario, se espera que la información se codifique en Base64. Esta es una codificación que transforma datos binarios en un conjunto limitado de caracteres ASCII y p.e. se usa en programas de mensajería. mkvextract(1) generará datos codificados en Base64 para elementos binarios.

El obsoleto sistema de etiquetado conoce más tipos de datos que se pueden encontrar en las especificaciones oficiales de etiquetas Matroska(tm). Como mkvmerge(1) ya no admite este sistema estos tipos no serán descritos.

## 15.6. Etiquetas conocidas para el formato de archivos XML

A continuación, se muestran las etiquetas soportadas por XML, sus tipos de datos y, en dónde corresponda, el rango válido para sus valores:

    Tags (maestro)
      Tag (maestro)
        Targets (maestro)
          TargetTypeValue (entero sin signo)
          TargetType (cadena de texto UTF-8)
          TrackUID (entero sin signo)
          EditionUID (entero sin signo)
          ChapterUID (entero sin signo)
          AttachmentUID (entero sin signo)
        Simple (maestro)
          Simple (maestro)
          Name (cadena de texto UTF-8)
          TagLanguage (cadena de texto UTF-8)
          DefaultLanguage (entero sin signo)
          String (cadena de texto UTF-8)
          Binary (binario)

# 16. Archivos XML de información del segmento

Con archivos XML de información del segmento es posible establecer ciertos valores en el campo del encabezado de "información del segmento" de un archivo Matroska(tm). Todos estos valores no se pueden establecer a través de otras opciones de la línea de comandos.

Otros campos del encabezado de "información del segmento" se pueden establecer a través de las opciones de la línea de comandos pero no mediante archivos XML. Eso afecta p.e. las opciones --title y --timecode-scale.

Hay otros elementos que no pueden establecerse a través de la línea de comandos ni mediante archivos XML. Eso afecta a los siguientes elementos: DateUTC (también conocido como "fecha multiplexado"), MuxingApp, WritingApp y Duration. Estas siempre se establecen mediante mkvmerge(1), en si mismo.

A continuación, se muestran las etiquetas soportadas por XML, sus tipos de datos y, en dónde corresponda, el rango válido para sus valores:

    Info (maestro)
      SegmentUID (binario, rango válido: tamaño en bytes == 16)
      SegmentFilename (cadena de texto UTF-8)
      PreviousSegmentUID (binario, rango válido: tamaño en bytes == 16)
      PreviousSegmentFilename (cadena de texto UTF-8)
      NextSegmentUID (binario, rango válido: tamaño en bytes == 16)
      NextSegmentFilename (cadena de texto UTF-8)
      SegmentFamily (binario, rango válido: tamaño en bytes == 16)
      ChapterTranslate (maestro)
        ChapterTranslateEditionUID (entero sin signo)
        ChapterTranslateCodec (entero sin signo)
        ChapterTranslateID (binario)

# 17. Diseño de archivo matroska

El diseño de archivo Matroska(tm) es bastante flexible. mkvmerge(1) realizará un archivo de una manera concreta. El archivo creado tendrá una apariencia como esta:

[Encabezado EBML] [segmento {meta seek #1} [información segmento] [información pista] {adjuntos} {capítulos} [clúster 1] {clúster 2} ... {clúster n} {índices} {meta seek #2} {etiquetas}]

Los elementos que están entre llaves son opcionales, y dependen del contexto y opciones utilizadas. Unos cuantos apuntes:

- meta seek #1 sólo incluye un pequeño número de elementos de nivel 1, y sólo si realmente existen: adjuntos, capítulos, índices, etiquetas, meta seek #2. Las versiones anteriores de mkvmerge(1) también colocan los clústers en estos elementos meta seek. Por lo tanto, en algunos casos imprecisos era necesario reservar suficiente espacio. Esto a veces fallaba. Ahora sólo los clústeres son almacenados en meta seek#2, y meta seek #1 se refiere al elemento meta seek #2.

- Los elementos de adjuntos, capítulos y etiquetas sólo están presentes si se han añadidos.

El archivo Matroska(tm) más corto posible se parecería a esto:

[Encabezado EBML] [segmento [información segmento] [información pista] [clúster 1]]

Este podría ser el caso para archivos de audio.

# 18. Archivos de códigos de tiempo externos

mkvmerge(1) permite al usuario elegir los códigos de tiempo para una pista en concreto. Se puede usar para crear archivos con video de tasa de fotogramas variable (VFR) o incluir discontinuidades en el audio. En este caso, un fotograma es la unidad que mkvmerge(1) utiliza por cada bloque Matroska(tm) creado. Para el video es exactamente un fotograma, para audio esto es un paquete de un especifico tipo de audio. P.e. para AC-3 esto sería un paquete que contiene 1536 muestras.

Los archivos de códigos de tiempo que se utilizan cuando las pistas se unen a otras, sólo se deben especificar a la primera parte de una sucesión de pistas. Por ejemplo, si unes dos archivos, video1.avi y video2.avi, y deseas usar códigos de tiempo entonces tu línea de comandos se debería parecer a esto:

    mkvmerge ... --timecodes 0:códigos_tiempo.txt video1.avi +video2.avi

Hay cuatro formatos que son reconocidos por mkvmerge(1). La primera línea siempre contiene el número de la versión. Las líneas vacías, con sólo espacios y las que comienzan con '#' se ignoran.

## 18.1. Formato de archivo de código de tiempo v1

Este formato comienza la línea de la versión. La segunda línea declara el número por defecto de fotogramas por segundo. El resto de líneas contienen tres números separados por comas: el fotograma inicial (0 es el primer fotograma), el último fotograma y el número de fotogramas para este rango. Los Fotogramas Por Segundo (FPS) es un número con un punto decimal '.'. Los rangos pueden contener discontinuidades para el FPS usado por defecto. Un ejemplo:

    # Formato de código de tiempo v1
    assume 27.930
    800,1000,25
    1500,1700,30

## 18.2. Formato de archivo de código de tiempo v2

En este formato cada línea contiene un código de tiempo para el fotograma correspondiente. Este código de tiempo se debe especificar con una precisión de milisegundos. Puede ser un número decimal o no. Se deben especificar como mínimo tantas líneas de códigos de tiempo como fotogramas tiene la pista. Los códigos de tiempo deben estar ordenados. Por ejemplo para 25fps:

    # Formato de código de tiempo v2
    0
    40
    80

## 18.3. Formato de archivo de código de tiempo v3

En este formato cada línea contiene una duración en segundos seguida por un número opcional de fotogramas por segundo. Ambos campos pueden ser números decimales. Si el número de fotogramas por segundo no se especifica se utiliza el valor predeterminado. Para el audio se debería dejar al códec calcular, por si mismo, el código de tiempo del fotograma. Para eso, debería utilizar 0.0 como el número de fotogramas por segundo. También es posible crear discontinuidades en la secuencia usando la palabra clave 'gap' seguida por la duración de la discontinuidad. Un ejemplo para el archivo de audio:

    # Formato de código de tiempo v3
    assume 0.0
    25.325
    7.530,38.236
    gap, 10.050
    2.000,38.236

## 18.4. Formato de archivo de código de tiempo v4

Este formato es idéntico al formato v2. La única diferencia es que los códigos de tiempo no tiene que estar ordenados. Este formato casi nunca se debería utilizar.

# 19. Códigos de salida

mkvmerge(1) finaliza con uno de estos tres códigos de salida:

- 0 -- Este código de salida significa que la extracción se ha realizado correctamente.

- 1 -- En este caso mkvmerge(1) genera una salida con al menos una advertencia, pero la la extracción continuó. Una advertencia es prefijada con el texto 'Advertencia:'. Dependiendo de los fallos involucrados los archivos creados serán correctos o no. El usuario es instado a que revise tanto las advertencias como los archivos creados.

- 2 -- Este código de salida es usado después de que ocurra un error. mkvmerge(1) aborta el proceso justo después de mostrar el mensaje de error. El rango de los mensajes de error va desde los argumentos de la línea de comandos, por delante de los errores de lectura/escritura, hasta los archivos erróneos.

# 20. Variables de entorno

mkvmerge(1) usa las variables predefinidas que se determinan en la configuración local del sistema (p.e. LANG y la familia LC_*). Variables adicionales:

Option | Description
--- | ---
MKVMERGE_DEBUG, MKVTOOLNIX_DEBUG and its short form MTX_DEBUG | El contenido se trata como si se hubiese pasado a través de la opción --debug.
MKVMERGE_ENGAGE, MKVTOOLNIX_ENGAGE and its short form MTX_ENGAGE | El contenido se trata como si se hubiese pasado a través de la opción --engage.
MKVMERGE_OPTIONS, MKVTOOLNIX_OPTIONS and its short form MTX_OPTIONS | El contenido es dividido en espacios en blanco. Las cadenas de texto parciales resultantes son tratadas como si hubiesen sido pasadas como opciones a la línea de comandos. Si necesitas pasar caracteres especiales (p.e. espacios) entonces tienes que escaparlos (vea la sección caracteres especiales de escape en el texto).

# 21. Vea también

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

# 22. WWW

La última versión se puede encontrar siempre en la página de MKVToolNix.