mkvpropedit -- Modifica las propiedades existentes en archivos Matroska(tm) sin multiplexar

# 1. Sinopsis

mkvpropedit opciones {archivo-origen} {acciones}

# 2. Descripción

Este programa analiza un archivo Matroska(tm) y modifica alguna de sus propiedades. Entonces escribe estas modificaciones en el archivo existente. Entre las propiedades que pueden ser modificadas están los elementos de la información del segmento (p.e. el título) y los encabezados de pista (p.e. el código del idioma, el flag de 'pista predefinida' o el nombre).

Opciones:

Option | Description
--- | ---
-l, --list-property-names | Enumera todos los conocidos y editables nombres, su tipo (texto, entero, booleano, etc...) y una pequeña descripción. El programa después sale. Por lo tanto, el parámetro nombre-archivo no tiene que ser suministrado.
-p, --parse-mode modo | Establece el modo de análisis. El parámetro 'modo' puede ser 'fast' (que es el predeterminado) o 'full'. El modo 'fast' no analiza el archivo entero pero usa los elementos de meta búsqueda para localizar los elementos necesarios del archivo original. En el 99% de los casos es suficiente. Sin embargo, para archivos que no contienen elementos de meta búsqueda o que están dañados, el usuario debería de usar el modo de análisis 'full'. Un análisis completo de un archivo puede llevar bastantes minutos mientras que un análisis rápido sólo lleva unos segundos.

Acciones que tienen que ver con las propiedades de información de la pista y segmento:

Option | Description
--- | ---
-e, --edit selector | Establece la sección del archivo Matroska(tm) (información del segmento o ciertos encabezados de pista) sobre la que se centrarán todas las acciones: add, set y delete. Esta opción puede ser múltiples veces de manera que puede ser modificado más de un elemento a la vez. Por defecto, mkvpropedit(1) editará la sección de información del segmento. Mire la sección sobre selectores de edición para una completa descripción de la sintaxis.
-a, --add name=valor | Añade una propiedad name con el contenido de valor. Esta propiedad será añadida incluso si dicha propiedad ya existe. Tenga en cuenta que la mayoría de propiedades son únicas y sólo existe una instancia de ellas.
-s, --set name=valor | Establece todas las instancias de la propiedad name con el contenido valor. Si no existe dicha propiedad entonces será añadida.
-d, --delete nombre | Borra todas las instancias de la propiedad name. Tenga en cuenta que algunas propiedades son necesarias y no pueden ser eliminadas.

Acciones que tienen que ver con las etiquetas y capítulos:

Option | Description
--- | ---
-t, --tags selector:nombre | Reemplaza o añade las etiquetas del archivo llamado nombre o las elimina si nombre está vacío. mkvpropedit(1) lee el mismo formato de etiquetas XML que mkvmerge(1) también puede leer. El selector debe ser una de estas palabras: all, global o track. Para all, mkvpropedit(1) reemplazará o eliminará todas las etiquetas del archivo. Con global sólo las etiquetas globales serán reemplazadas o eliminadas. Por ejemplo: mkvpropedit "nombre-archivo.mkv" --tags global:etiquetas.xml mkvpropedit "nombre-archivo.mkv" --tags global: Con track, mkvpropedit(1) reemplazará las etiquetas de la pista especificada. Además, las etiquetas leídas desde nombre serán asignadas a la misma pista. La pista se especifica de la misma manera que con los selectores de edición (mire abajo). Por ejemplo: mkvpropedit "nombre-archivo.mkv" --tags track:a1:nuevas-etiquetas-audio.xml.
-c, --chapters nombre | Reemplaza o añade los capítulos del archivo llamado nombre o las elimina si nombre está vacío. mkvpropedit(1) lee el mismo formato de capítulos simple y XML que mkvmerge(1) también puede leer.

Acciones para manipular adjuntos:

Option | Description
--- | ---
--add-attachment nombre-archivo | Añade un nuevo adjunto a nombre-archivo. Si la opción --attachment-name es usada antes de esta opción entonces su valor es usado como el nuevo nombre del adjunto. Por el contrario, se deriva del nombre-archivo. Si la opción --attachment-mime-type es usada antes de esta opción entonces su valor es usado como el nuevo tipo MIME del adjunto. Por el contrario, es auto-detectado a partir del contenido del nombre-archivo. Si la opción --attachment-description es usada antes de esta opción entonces su valor es usado como la nueva descripción del adjunto. Por el contrario, ninguna descripción será establecida.
--replace-attachment selector:nombrearchivo | Reemplaza uno o más adjuntos que coincidan con el selector del archivo nombre-archivo. Si más de un adjunto existente coincide con el selector entonces todo su contenido será reemplazado por el contenido del nombre-archivo. El selector puede tener una de estas cuatro formas: ID, UID, Name y MIME type. Están explicadas más abajo en la sección selectores de adjuntos. Si la opción --attachment-name es usada antes de esta opción entonces su valor es usado como el nombre del adjunto reemplazado. Por el contrario, el nombre no cambia. Si la opción --attachment-mime-type es usada antes de esta opción entonces su valor es usado como el tipo MIME del adjunto reemplazado. Por el contrario, el tipo MIME no cambia. Si la opción --attachment-description es usada antes de esta opción entonces su valor es usado como la descripción del adjunto reemplazado. Por el contrario, ninguna descripción cambia.
--delete-attachment selector | Elimina uno o más adjuntos que coincida con el selector. El selector puede tener una de estas cuatro formas: ID, UID, Name y MIME type. Están explicadas más abajo en la sección selectores de adjuntos.

Opciones para acciones sobre adjuntos:

Option | Description
--- | ---
--attachment-name nombre | Establece el nombre a usar en la operación --add-attachment o --replace-attachment.
--attachment-mime-type mime-type | Establece el tipo MIME a usar en la operación --add-attachment o --replace-attachment.
--attachment-description descripción | Establece la descripción a usar en la operación --add-attachment o --replace-attachment.

Otras opciones:

Option | Description
--- | ---
--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 mkvpropedit --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 están descritas en la sección sobre caracteres de escape en texto. La línea de comandos 'mkvpropedit archivo.mkv --edit track:a2 --set name=Comentarios' puede ser convertida en un archivo de opciones del modo que se indica a continuación:
    # Modifica nombre.mkv
    nombre.mkv
    # Edita la segunda pista de audio
    --edit
    track:a2
    # y establece el título como 'Comentarios'
    --set
    name=Comments

# 3. Selectores de edición

La opción --edit establece la sección del archivo Matroska(tm) (información del segmento o ciertos encabezados de pista) sobre la que se centrarán todas las acciones: add, set y delete. Esto es válido hasta que se encuentra el siguiente parámetro --edit. El argumento para esta opción se llama el selector de edición.

Por defecto, mkvpropedit(1) editará la sección de información del segmento.

## 3.1. Información del segmento

La información del segmento puede ser seleccionada con una de estas tres palabras: 'info', 'segment_info' o 'segmentinfo'. Contiene propiedades como el título o el UID del segmento .

## 3.2. Encabezados de pista

Los encabezados de la pista pueden ser seleccionados con un selector ligeramente más complejo. Todas las variantes comienzan con 'track:'. Las propiedades del encabezado de pista incluye elementos como el código de idioma, el flag de 'pista predefinida' o el nombre de la pista.

Option | Description
--- | ---
track:n | Si el parámetro n es un número entonces la pista con número n será seleccionada. El orden de pista es el mismo que se genera con la opción --identify de mkvmerge(1). La numeración empieza en 1.
track:t n | Si el parámetro empieza con el carácter t seguido por n entonces la pista con número n de un tipo específico de pista será seleccionada. El parámetro del tipo de pista t debe ser uno de estos cuatro caracteres: 'a' para una pista de audio, 'b' para un pista de botón, 's' para una pista de subtítulo y 'v' para una pista de video. El orden de pista es el mismo que se genera con la opción --identify de mkvmerge(1). La numeración empieza en 1.
track:=uid | Si el parámetro empieza con un '=' seguido por un número de uid entonces será seleccionada la pista cuyo UID coincida con este uid. Los UIDs de pista puede ser obtenido con mkvinfo(1).
track:@número | Si el parámetro empieza con un '@' seguido por un número entonces será seleccionada la pista cuyo número de elemento coincida con este número. El número de pista puede ser obtenido con mkvinfo(1).

## 3.3. Notas

Debido a la naturaleza de los selectores de edición de pista es posible que actualmente algunos selectores coincidan con los mismos encabezados de pista. En muchos casos, todas las acciones para estos selectores de edición serán combinados y ejecutados en el orden en el que fueron dadas en la línea de comandos.

# 4. Selectores de adjuntos

Un selector de adjuntos se utiliza con las dos acciones --replace-attachment y --delete-attachment. Puede tener una de las cuatros formas siguientes:

1. Selección mediante el ID de adjunto. De esta forma el selector es un simple número, el ID del adjunto tal y como se genera con el comando de identificación de mkvmerge(1).

2. Selección mediante el UID de adjunto (Único ID). De esta forma el selector es el signo igual = acompañado por un número, el UID del adjunto tal y como se genera con el comando de identificación detallado (verbose) de mkvmerge(1).

3. Selección mediante el name (nombre) de adjunto. De esta forma el selector es la palabra literal name: seguida por el nombre del adjunto. Si el selector es usado con --replace-attachment entonces los dos puntos que pudiera contener el nombre deberán ser escapados con \c.

4. Selección mediante el MIME type (tipo MIME). De esta forma el selector es la palabra mime-type: seguida por el tipo MIME del adjunto. Si el selector es usado con --replace-attachment entonces los dos puntos que pudiera contener el tipo MIME deberán ser escapados con \c.

# 5. Ejemplos

El siguiente ejemplo edita un archivo llamado 'película.mkv'. Establece el título del segmento y modifica el código de idioma de una pista de audio y subtítulo. Tenga en cuenta que este ejemplo puede ser acortado al omitir la primera opción --edit ya que editar el elemento de información del segmento está incluido por defecto para todas las opciones encontradas antes de la primera opción --edit.

    mkvpropedit película.mkv --edit info --set "title=La película" --edit track:a1 --set language=spa --edit track:a2 --set language=eng

El segundo ejemplo elimina 'flag de pista predefinida' de la primera pista de subtítulo y la establece para la segunda. Tenga en cuenta que mkvpropedit(1), a diferencia de mkvmerge(1), no establece automáticamente a '0' el valor de 'flag de pista predefinida' cuando otra pista se ha establecido a '1'.

    mkvpropedit película.mkv --edit track:s1 --set flag-default=0 --edit track:s2 --set flag-default=1

Reemplaza las etiquetas para la segunda pista de subtítulos de un archivo:

    mkvpropedit película.mkv --tags track:s2:nuevas-etiquetas-subtítulo.xml

Elimina todas las etiquetas que hay en el archivo:

    mkvpropedit película.mkv --tags all:

Reemplaza los capítulos en un archivo:

    mkvpropedit película.mkv --chapters nuevos-capítulos.xml

Elimina todos los capítulos del archivo:

    mkvpropedit película.mkv --chapters ""

Añade un archivo de tipo fuente (Arial.ttf) como un adjunto:

    mkvpropedit película.mkv --add-attachment Arial.ttf

Añade un archivo de tipo fuente (89719823.ttf) como un adjunto y proporciona información de como es la fuente Arial:

    mkvpropedit película.mkv --attachment-name Arial.ttf --attachment-description "La fuente Arial como TrueType"
    --attachment-mime-type application/x-truetype-font --add-attachment 89719823.ttf

Reemplaza el archivo adjunto (Comit.ttf) del archivo por otro (Arial.ttf):

    mkvpropedit película.mkv --attachment-name Arial.ttf --attachment-description "La fuente Arial como TrueType"
    --replace-attachment name:Comic.ttf:Arial.ttf

Elimina el segundo archivo adjunto:

    mkvpropedit película.mkv --delete-attachment 2

Elimina todos las fuentes adjuntas por tipo MIME:

    mkvpropedit película.mkv --delete-attachment mime-type:application/x-truetype-font

# 6. Códigos de salida

Mkvpropedit(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 mkvpropedit(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. mkvpropedit(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. 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).

# 8. 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 '\\'.

# 9. Variables de entorno

mkvpropedit(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
--- | ---
MKVPROPEDIT_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.
MKVPROPEDIT_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.
MKVPROPEDIT_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).

# 10. Vea también

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

# 11. WWW

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