mkvextract -- extrae las pistas de los archivos Matroska(tm) a otros archivos

# 1. Sinopsis

mkvextract {modo} {nombre-archivo} opciones especificaciones-extracción

# 2. Descripción

Este programa extrae ciertas partes de un archivo Matroska(tm) a otros formatos de utilidad. El primer argumento, modo, le dice a mkvextract(1) qué debe extraer. Actualmente es posible extraer pistas, etiquetas, adjuntos, capítulos, CUE sheets, códigos de tiempo (timecodes) e índices (cues). El segundo argumento es el nombre del archivo origen. Éste debe ser un archivo Matroska(tm). El resto de argumentos son opciones y especificaciones de extracción; ambos son dependientes del modo seleccionado.

## 2.1. Opciones comunes

Las siguientes opciones están disponibles en todos los modos y sólo se describirán en esta sección.

Option | Description
--- | ---
-f, --parse-fully | Establece el modo de análisis a 'completo'. El modo predeterminado no analiza el archivo entero pues usa la búsqueda de elementos de metadatos para localizar los elementos necesarios de un archivo origen. En un 99% de todos los casos es suficiente. Pero para archivos que no contienen elementos de metadatos o que están dañados, el usuario debería usar este modo. Un análisis completo de un archivo puede requerir bastantes minutos mientras que un análisis rápido sólo lleva unos segundos.
--command-line-charset conjunto-caracteres | Establece el conjunto de caracteres a convertir las cadenas de texto dadas desde la línea de comandos. Por defecto, se ajusta al conjunto de caracteres dado por la configuración local del sistema.
--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 mkvextract(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 mkvextract --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.
-v, --verbose | Habilita el modo detallado y muestra todos los elementos Matroska(tm) importantes que pueden ser leídos.
-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.

@archivo-opciones | Lee argumentos adicionales de la línea de comandos desde el archivo archivo-opciones. Las líneas que tengan en el primer carácter una almohadilla ('#') serán tratados como comentarios y se ignorarán. Espacios en blanco al inicio y final de la línea serán descartados. Cada línea debe contener exactamente una opción.

Diversos caracteres pueden ser interpretados como de escape, p.e. si necesitas que una línea, que comience con una almohadilla '#', no sea interpretada como un comentario. Las normas se describen en la sección sobre caracteres de escape en texto.

La línea de comandos 'mkvextract tracks archivo.mkv --raw 1:destino.raw' se puede convertir a un archivo de opciones del modo que se indica a continuación:

    # Extrae una pista del archivo.mkv
    tracks
    archivo.mkv
    # Genera la pista del tipo raw
    --raw
    1:destino.raw

## 2.2. Modo de extracción de pista

Sintaxis: mkvextract tracks nombre-archivo [opciones] TID1:dest-nombre1 [TID2:dest-nombre2 ...]

Las siguientes opciones de línea de comandos están disponibles para cada pista en el modo de extracción de pistas ('tracks'). Tienen que aparecer delante de la especificación de pista a las que se deben aplicar (ver abajo).

Option | Description
--- | ---
-c conjunto-caracteres | Establece el conjunto de caracteres para convertir el texto de la siguiente pista de subtítulo. Sólo es válido si el ID de la siguiente pista corresponde a un subtítulo. Por defecto usa UTF-8.
--blockadd nivel | Conserva el BlockAdditions sólo hasta este nivel. Por defecto conserva todos los niveles. Esta opción sólo afecta a ciertos tipos de códecs como WAVPACK4.
--cuesheet | Provoca que mkvextract(1) extraiga un CUE sheet desde la información de capítulos y etiquetas para la siguiente pista, a un archivo cuyo nombre es el del archivo de salida junto con la extensión '.cue'.
--raw | Extrae los datos en bruto (raw) a un archivo sin contenedor. A diferencia de --fullraw esta opción no provoca que el contenido del elemento CodecPrivate se escriba en el archivo. Este modo funciona sólo con todos los CodecIDs, incluso con los que mkvextract(1) no sea compatible pero los archivos resultantes podrían ser inutilizables.
--fullraw | Extrae los datos en bruto (raw) a un archivo sin contenedor. El contenido del elemento CodecPrivate se escribirá en el primer archivo si la pista contiene ese elemento en el encabezado. Este modo funciona sólo con todos los CodecIDs, incluso con los que mkvextract(1) no sea compatible pero los archivos resultantes podrían ser inutilizables.
TID:nombre-salida | Provoca la extracción de la pista con el ID TID a un archivo con el nombre-salida si dicha pista existe en el archivo fuente. Esta opción puede ser usada múltiples veces. Los IDs de la pista son los mismos que muestra mkvmerge(1) con la opción --identify.

Cada nombre de salida sólo debe ser usado una vez. La única excepción son las pistas RealAudio y RealVideo. Si usas el mismo nombre para pistas diferentes entonces estas pistas serán almacenadas en el mismo archivo. Ejemplo:

    mkvextract tracks entrada.mkv 1:salida-dos-pistas.rm 2:salida-dos-pistas.rm

## 2.3. Modo de extracción de etiquetas

Sintaxis: mkvextract tags nombre-archivo [opciones]

Las etiquetas extraídas se escriben a la consola a menos que la salida sea redirigida (vea la sección a cerca de redirección de salida para más detalles).

## 2.4. Modo de extracción de adjuntos

Sintaxis: mkvextract attachments nombre-archivo [opciones] AID1:salida1 [AID2:salida2 ...]

Option | Description
--- | ---
AID:nombre-salida | Provoca la extracción del adjunto con el ID AID a un archivo con el nombre-salida si dicho adjunto existe en el archivo fuente. Si el nombre-salida se deja vacío entonces será usado el nombre del adjunto en el archivo Matroska(tm). Esta opción puede ser usada múltiples veces. Los IDs de los adjuntos son los mismos que muestra mkvmerge(1) con la opción --identify.

## 2.5. Modo de extracción de capitulos

Sintaxis: mkvextract chapters nombre-archivo [opciones]

Option | Description
--- | ---
-s, --simple | Exporta la información de capítulos en un formato simple usado en las herramientas de OGM (CAPITULO01=..., CAPITULO01NOMBRE=...). En este modo alguna información será descartada. Por defecto la salida de los capítulos están en formato XML.

Los capítulos extraídos se escriben en la consola a menos que la salida sea redirigida (vea la sección sobre redirección de salida para más detalles).

## 2.6. Modo de extracción de Cue sheet

Sintaxis: mkvextract cuesheet nombre-archivo [opciones]

El cue sheet extraído se escriben en la consola a menos que la salida sea redirigida (vea la sección sobre redirección de salida para más detalles).

## 2.7. Modo de extracción de códigos de tiempo

Sintaxis: mkvextract timecodes_v2 nombre-archivo [opciones] TID1:nombrearchivo-dest1 [TID2:nombrearchivo-dest2 ...]

Los códigos de tiempo se escriben en la consola a menos que la salida sea redirigida (vea la sección sobre redirección de salida para más detalles).

Option | Description
--- | ---
TID:nombre-salida | Provoca la extracción de los timecodes para la pista con el ID TID a un archivo con el nombre-salida si dicha pista existe en el archivo origen. Esta opción puede ser usada múltiples veces. Los IDs de la pista son los mismos que muestra mkvmerge(1) con la opción --identify.

Ejemplo:

    mkvextract timecodes_v2 entrada.mkv 1:tc-pista1.txt 2:tc-pista2.txt

## 2.8. Modo de extracción de Cues

Sintaxis: mkvextract cues nombre-archivo [opciones] TID1:nombrearchivo-dest1 [TID2:nombrearchivo-dest2 ...]

Option | Description
--- | ---
TID:nombrearchivo-dest | Provoca la extracción de los cues (índices) para la pista con el ID TID a un archivo con el nombre-salida si dicha pista existe en el archivo origen. Esta opción puede ser usada múltiples veces. Los IDs de la pista son los mismos que muestra mkvmerge(1) con la opción --identify y no los números contenidos en el elemento CueTrack.

El formato de salida es un simple formato de texto: una línea por cada elemento CuePoint con clave=valor. Si un elemento opcional no existe en un CuePoint (p.e. CueDuration) entonces un guión será devuelto como valor.

Ejemplo:

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

Las claves posibles son:

Option | Description
--- | ---
timecode | El código de tiempo del cue point con precisión de nanosegundos. El formato es HH:MM:SS.nnnnnnnnn. Este elemento siempre se establece.
duration | La duración del cue point con precisión de nanosegundos. El formato es HH:MM:SS.nnnnnnnnn.
cluster_position | La posición absoluta en bytes dentro del archivo Matroska(tm) en dónde comienza el clúster que contiene el elemento de referencia. Note: Dentro del archivo Matroska(tm) el CueClusterPosition se refiere a la compensación (offset) de los datos de inicio del segmento. El valor de salida es dado por el modo de extracción de cue de mkvextract(1), sin embargo ya contiene esa compensación y que es absoluta a partir del inicio del archivo.
relative_position | La posición relativa en bytes dentro del clúster en donde el elemento BlockGroup o SimpleBlock es el cue point que se refiere al inicio. Note: Dentro del archivo Matroska(tm) el CueRelativePosition se refiere a la compensación de los datos de inicio del clúster. El valor de salida es dado por el modo de extracción de cue de mkvextract(1), sin embargo es relativo al ID del clúster. La posición absoluta dentro del archivo puede ser calculada por añadir cluster_position y relative_position.

Ejemplo:

    mkvextract cues entrada.mkv 1:cues-pista1.txt 2:cues-pista2.txt

# 3. Redirección de salida

Varios modos de extracción provocan que mkvextract(1) escriba la información extraída a la consola. Por lo general, hay dos maneras de escribir esta información a un archivo: uno proporcionado por el shell y otro por mkvextract(1).

El mecanismo de redirección de orden interna del shell se utiliza añadiendo '> nombresalida.ext' a la línea de comandos. Ejemplo:

    mkvextract tags archivo.mkv > etiquetas.xml

La redirección de mkvextract(1) es invocada con la opción --redirect-output. Ejemplo:

    mkvextract tags archivo.mkv --redirect-output etiquetas.xml

Note:

En Windows es posible que necesite usar la opción --redirect-output porque cmd.exe a veces interpreta los caracteres especiales antes de que se escriban en el archivo de salida provocando una salida incorrecta.

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

Para una discusión en profundidad sobre como la suite de MkvToolNix manipula las conversiones de caracteres, la codificación entrada/salida y la codificación de la línea de comandos y consola, por favor consulte la sección llamada de igual manera en la pagina del manual para mkvmerge(1).

# 5. Formatos de salida

La decisión sobre el tipo de formato se basa en el tipo de pista y no en la extensión usada en el nombre del archivo de salida. Por ahora, los siguientes tipos de pista son compatibles:

Option | Description
--- | ---
V_MPEG4/ISO/AVC | Las pistas de video H.264 / AVC se escriben en secuencias elementales H.264 que pueden ser procesadas posteriormente, por ejemplo con MP4Box(tm) del paquete GPAC(tm).
V_MS/VFW/FOURCC | Las pistas de video con FPS fijadas con este CodecID se escriben en los archivos AVI.
V_REAL/* | Las pistas RealVideo(tm) se escriben en archivos RealMedia(tm).
V_THEORA | Las secuencias Theora(tm) se escribirán en un contenedor Ogg(tm).
V_VP8, V_VP9 | Las pistas VP8 / VP9 se escriben en archivos IVF.
A_MPEG/L2 | Las secuencias de audio MPEG-1 Layer II serán extraídas a archivos en bruto MP2.
A_MPEG/L3, A_AC3 | Estos serán extraídos a archivos en bruto MP3 y AC3.
A_PCM/INT/LIT | La información en bruto PCM se escribirá en un archivo WAV.
A_AAC/MPEG2/*, A_AAC/MPEG4/*, A_AAC | Todos los archivos AAC se escribirán en un archivo AAC con encabezados ADTS antes de cada paquete. Los encabezados ADTS no contendrán el obsoleto campo de énfasis.
A_VORBIS | El audio Vorbis se escribirá en un archivo OggVorbis(tm).
A_REAL/* | Las pistas RealAudio(tm) se escriben en archivos RealMedia(tm).
A_TTA1 | Las pistas TrueAudio(tm) se escriben en archivos TTA. Por favor, tenga en cuenta que debido a la precisión limitada de los códigos de tiempo de Matroska(tm), el encabezado del archivo extraído será diferente con respecto a dos campos: data_length (el número total de muestras en el archivo) y el CRC.
A_ALAC | Las pistas ALAC se escriben en archivos CAF.
A_FLAC | Las pistas FLAC se escriben en archivos en bruto FLAC.
A_WAVPACK4 | Las pistas WavPack(tm) se escriben en archivos WV.
A_OPUS | Las pistas Opus(tm) se escribe en archivos OggOpus(tm).
S_TEXT/UTF8 | Los subtítulos de texto simple se escribirán como archivos SRT.
S_TEXT/SSA, S_TEXT/ASS | Los subtítulos de texto SSA y ASS se escribirán como archivos SSA/ASS, respectivamente.
S_KATE | Las secuencias Kate(tm) se escribirán dentro de un contenedor Ogg(tm).
S_VOBSUB | Los subtítulos VobSub(tm) se escribirán como archivos SUB junto con sus respectivos archivos de índice IDX.
S_TEXT/USF | Los subtítulos de texto USF se escribirán como archivos USF.
S_HDMV/PGS | Los subtítulos PGS se escribirán como archivos SUP.
Tags | Las etiquetas se convierten a formato XML. Este formato es el mismo que mkvmerge(1) admite para leer etiquetas.
Attachments | Los adjuntos se escriben en el archivo de salida tal y como están. No se realiza ningún tipo de conversión.
Chapters | Los capítulos se convierten a formato XML. Este formato es el mismo que mkvmerge(1) admite para leer capítulos. Alternativamente, una versión reducida puede ser generada a un simple formato de estilo OGM.
Timecodes | Los códigos de tiempo se ordenan de principio a fin, y entonces se genera un archivo compatible con el formato timecode v2 preparado para ser proporcionado a mkvmerge(1). La extracción a otros formatos (v1, v3 y v4) no son compatibles.

# 6. Códigos de salida

mkvextract(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 mkvextract(1) genera una salida con al menos una advertencia, pero 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. mkvextract(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.

# 7. 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', '#' se reemplazada como '\h' y '\' (una barra invertida) se expresaría como '\\'.

# 8. Variables de entorno

mkvextract(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
--- | ---
MKVTOOLNIX_DEBUG y su forma abreviada MTX_DEBUG | El contenido se trata como si se hubiese pasado a través de la opción --debug.
MKVTOOLNIX_ENGAGE y su forma abreviada MTX_ENGAGE | El contenido se trata como si se hubiese pasado a través de la opción --engage.
MKVTOOLNIX_OPTIONS y su forma abreviada 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).

# 9. Vea también

mkvmerge(1), mkvinfo(1), mkvpropedit(1), mmg(1)

# 10. WWW

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