Cambio de propiedades en ficheros Matroska

Algunas películas en formato Matroska tienen las pistas mal configuradas. Por ejemplo, el idioma primario es el japonés en vez del castellano o los subtítulos por defecto son la traducción completa en vez de los forzados.

Tradicionalmente solucionaba este problema exportando todas las pistas y volviendo a montarlas de nuevo correctamente. Luego descubrí mkvpropedit.

Veamos un caso práctico.

[jcea@babylon5 p2p]$ mkvinfo PELÍCULA.mkv
+ EBML head
|+ EBML version: 1
|+ EBML read version: 1
|+ EBML maximum ID length: 4
|+ EBML maximum size length: 8
|+ Doc type: matroska
|+ Doc type version: 4
|+ Doc type read version: 2
+ Segment, size 586398302
|+ Seek head (subentries will be skipped)
|+ EbmlVoid (size: 4044)
|+ Segment information
| + Timecode scale: 1000000
| + Muxing application: libebml v1.3.0 + libmatroska v1.4.0
| + Writing application: mkvmerge v6.3.0 ('You can't stop me!') built on Jul  2 2013 17:27:10
| + Duration: 5184.161s (01:26:24.161)
| + Date: Sat Feb  7 22:28:22 2015 UTC
| + Segment UID: 0x2e 0x47 0xf8 0x37 0x51 0x00 0x45 0x09 0xc1 0x42 0xf0 0x0f 0x63 0x26 0xdd 0xb9
|+ Segment tracks
| + A track
|  + Track number: 1
|  + Track UID: 8967004524997012739
|  + Track type: video
|  + Lacing flag: 0
|  + MinCache: 1
|  + Codec ID: V_MPEG4/ISO/AVC
|  + Language: und
|  + Video track
|   + Pixel width: 672
|   + Pixel height: 288
|   + Display width: 672
|   + Display height: 288
|  + CodecPrivate, length 41
|  + Default duration: 40.000ms (25.000 fps for a video track)
| + A track
|  + Track number: 2
|  + Track UID: 13681458235439013700
|  + Track type: audio
|  + Codec ID: A_VORBIS
|  + CodecPrivate, length 3926
|  + Language: spa
|  + Audio track
|   + Sampling frequency: 48000
|   + Channels: 2
| + A track
|  + Track number: 3
|  + Track UID: 17102506785297869528
|  + Track type: audio
|  + Default flag: 0
|  + Codec ID: A_VORBIS
|  + CodecPrivate, length 3926
|  + Language: fre
|  + Audio track
|   + Sampling frequency: 48000
|   + Channels: 2
| + A track
|  + Track number: 4
|  + Track UID: 9452694237307609919
|  + Track type: subtitles
|  + Lacing flag: 0
|  + Codec ID: S_TEXT/UTF8
|  + Language: spa
|+ EbmlVoid (size: 1090)
|+ Cluster

Aquí vemos que la película tiene cuatro pistas. Una pista de vídeo, dos pistas de audio (una en castellano y otra en francés) y una pista de subtítulos en castellano. El problema es que los idiomas de las pistas de audio están al revés, la primera pista es la francesa. Como no se ha indicado pista por defecto usará la primera (la francesa etiquetada como castellano) o bien la que el sistema de reproducción considera la propiada (en un sistema de reproducción configurado para España lo suyo es arrancar con la pista en castellano si no hay ninguna marcada como "por defecto"). Como en este caso los idiomas está mal, esto tampoco nos ayudaría.

Exportando las pistas y volviendo a montar la película pondríamos la pista en castellano primero y con las etiquetas de idioma correctas. Con mkvpropedit cambiamos los idiomas de las pistas e indicaremos que la pista de audio por defecto es la segunda. En este caso no es necesario porque la primera pista no tiene la marca de "pista por defecto" pero siempre es buena idea asegurarse de eliminar esas marcas en las otras pistas cuando cambiamos nuestra pista por defecto.

La operación es instantanea y no requiere espacio adicional en el disco duro:

[jcea@babylon5 p2p]$ mkvpropedit PELÍCULA.mkv \
                        --edit track:a1 \
                           --set language=fre --set flag-default=0 \
                        --edit track:a2 \
                           --set language=spa --set flag-default=1
The file is analyzed.
The changes are written to the file.
Done.

Revisemos ahora cómo está el fichero:

[jcea@babylon5 p2p]$ mkvinfo PELÍCULA.mkv
+ EBML head
|+ EBML version: 1
|+ EBML read version: 1
|+ EBML maximum ID length: 4
|+ EBML maximum size length: 8
|+ Doc type: matroska
|+ Doc type version: 4
|+ Doc type read version: 2
+ Segment, size 586398302
|+ Seek head (subentries will be skipped)
|+ EbmlVoid (size: 4044)
|+ Segment information
| + Timecode scale: 1000000
| + Muxing application: libebml v1.3.0 + libmatroska v1.4.0
| + Writing application: mkvmerge v6.3.0 ('You can't stop me!') built on Jul  2 2013 17:27:10
| + Duration: 5184.161s (01:26:24.161)
| + Date: Sat Feb  7 22:28:22 2015 UTC
| + Segment UID: 0x2e 0x47 0xf8 0x37 0x51 0x00 0x45 0x09 0xc1 0x42 0xf0 0x0f 0x63 0x26 0xdd 0xb9
|+ Segment tracks
| + A track
|  + Track number: 1
|  + Track UID: 8967004524997012739
|  + Track type: video
|  + Lacing flag: 0
|  + MinCache: 1
|  + Codec ID: V_MPEG4/ISO/AVC
|  + Language: und
|  + Video track
|   + Pixel width: 672
|   + Pixel height: 288
|   + Display width: 672
|   + Display height: 288
|   + Interlaced: 0
|  + CodecPrivate, length 41
|  + Default duration: 40.000ms (25.000 fps for a video track)
|  + Enabled: 1
|  + Default flag: 1
|  + Forced flag: 0
|  + Timecode scale: 1
|  + Max BlockAddition ID: 0
|  + Codec decode all: 1
| + A track
|  + Track number: 2
|  + Track UID: 13681458235439013700
|  + Track type: audio
|  + Codec ID: A_VORBIS
|  + CodecPrivate, length 3926
|  + Language: fre
|  + Audio track
|   + Sampling frequency: 48000
|   + Channels: 2
|  + Default flag: 0
|  + Enabled: 1
|  + Forced flag: 0
|  + Lacing flag: 1
|  + MinCache: 0
|  + Timecode scale: 1
|  + Max BlockAddition ID: 0
|  + Codec decode all: 1
| + A track
|  + Track number: 3
|  + Track UID: 17102506785297869528
|  + Track type: audio
|  + Default flag: 1
|  + Codec ID: A_VORBIS
|  + CodecPrivate, length 3926
|  + Language: spa
|  + Audio track
|   + Sampling frequency: 48000
|   + Channels: 2
|  + Enabled: 1
|  + Forced flag: 0
|  + Lacing flag: 1
|  + MinCache: 0
|  + Timecode scale: 1
|  + Max BlockAddition ID: 0
|  + Codec decode all: 1
| + A track
|  + Track number: 4
|  + Track UID: 9452694237307609919
|  + Track type: subtitles
|  + Lacing flag: 0
|  + Codec ID: S_TEXT/UTF8
|  + Language: spa
|  + Enabled: 1
|  + Default flag: 1
|  + Forced flag: 0
|  + MinCache: 0
|  + Timecode scale: 1
|  + Max BlockAddition ID: 0
|  + Codec decode all: 1
|+ EbmlVoid (size: 975)
|+ Cluster

Tiene buena pinta. Ahora hay que reproducir la película y ver que todo está correcto.

mkvpropedit es bastante capaz. Puede gestionar documentos adjuntos (por ejemplo, tipos de letra o carátulas), capítulos y etiquetas. Echa un vistazo al manual.