Como pirata que soy recientemente deseaba ver la trilogía de Batman de Christopher Nolan así que la termine descargando de un sitio aleatorio en la vasta red. El archivo de video para mi sorpresa traía varios idiomas, subtítulos y un índice de capítulos. Sin embargo al añadirlo a mi biblioteca de Plex, no era reconocido, por lo que decidí simplificar un poco el archivo y dejar solo la pista de video, el audio en español y en inglés y los subtítulos en español y dejar de lado todo lo demás.
Como el archivo ya se encontraba en el servidor Plex, y solo tengo acceso a él vía SSH. Me tocó manipular por completo el archivo vía línea de comandos. Lo primero será listar los streams que contiene el contenedor mkv.
1 | $ ffprobe -v error -show_entries stream=index,codec_name,codec_type original.mkv |
Este comando producirá una salida similar a esto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | [STREAM] index=0 codec_name=h264 codec_type=video [/STREAM] [STREAM] index=1 codec_name=ac3 codec_type=audio [/STREAM] [STREAM] index=2 codec_name=ac3 codec_type=audio [/STREAM] [STREAM] index=3 codec_name=ac3 codec_type=audio [/STREAM] [STREAM] index=4 codec_name=subrip codec_type=subtitle [/STREAM] [STREAM] index=5 codec_name=subrip codec_type=subtitle [/STREAM] [STREAM] index=6 codec_name=subrip codec_type=subtitle [/STREAM] |
Ahora extraeré los streams que necesito para armar el nuevo video. En este punto, si deseamos podemos extraer todas las pistas y escucharlas con ffplay
para poder saber el contenido de cada una o el idioma.
1 | $ ffmpeg -i original.mkv -map 0:0 -c copy video.mkv -map 0:1 -c copy audio1.ac3 -map 0:2 -c copy audio2.ac3 |
El proceso de extracción de los streams del contenedor mkv original es lo que se conoce como demuxar. Al usar la opción -c copy
extrae el contenido en el mismo formato que se encuentra en el contenedor.
Lo siguiente será volver a unir los archivos extraídos en un solo contenedor mkv, este es el proceso de remux. Podemos añadir también en este punto una etiqueta al stream de audio para identificar el idioma, solo tenemos que añadir el código de 3 letras del idioma en formato ISO 639-2.
1 | $ ffmpeg -i video.mkv -i audio1.ac3 -i audio2.ac3 -map 0:0 -map 1:0 -map 2:0 -metadata:s:a:0 language=spa -metadata:s:a:1 language=eng -vcodec copy -acodec copy -acodec copy 'video_editado_final.mkv' |
Con esto ya tendremos nuestro archivo de video listo para consumo y reconocido por Plex, una vez lo nombremos con el sistema de Plex.
@linkmoises
Aún no hay comentarios...