Windows Batch Script para multiplexar videos MP4 y MKV con subtítulos SRT

Regresar a Microsoft Windows no ha sido sencillo, llevo un mes usando Windows 10, y aunque me ha dado muchas agradables sorpresas luego de más de una década sin tocarlo, hay muchas cosas que extraño de Linux, y una de ellas es el poder de algunos bash scripts personalizados con los que me ahorraba muchas tareas repetitivas y tediosas.

Uno de esos bash scripts que usaba, era para multiplexar archivos de video mkv y mp4 con subtítulos srt (en otras palabras, "fusionar" dos archivos en uno). Así que me di a la tarea de "transformar" mi bash script en Windows Batch Script (el viejito cmd.exe, no PowerShell), el cual no era del todo desconocido para mí, pues en mi época de MS-DOS hice muchos archivos por lotes (.BAT).

Aquí el resultado. ¿Pre-requisitos? Tener instalados MKVToolNix, file e iconv, y que los archivos de video (mkv/mp4) tengan el mismo nombre que los archivos de subtítulos (srt) respectivos.

REM Script para multiplexar videos MP4 y MKV con subtítulos SRT.
@ECHO OFF
CLS
ECHO Iniciando multiplexado
ECHO.
ECHO Verificando y convirtiendo subtitulos a UTF-8
FOR %%i IN (*.srt) DO (
 file "%%i" | FINDSTR /C:"UTF-8">nul && ( 
  Echo Subtitulo ya en UTF-8: %%i
 ) || ( 
  ECHO Convirtiendo a UTF-8: %%i.utf8
  iconv -f ISO-8859-1 -t UTF-8 "%%i" > "%%i.utf8"
  DEL "%%i"
  REN "%%i.utf8" "%%i"
 )
)
ECHO.
FOR %%i IN (*.mkv) DO (
 ECHO Multiplexando %%i
 "C:/Program Files/MKVToolNix\mkvmerge.exe" --ui-language es ^
 --output "%%i.final" ^
 --language 0:eng --track-name 0:Video ^
 --default-track 0:yes --compression 0:none ^
 --language 1:eng --track-name 1:Audio ^
 --default-track 1:yes --compression 1:none "%%i" ^
 --language 0:spa --track-name 0:Subtitulo ^
 --default-track 0:yes --compression 0:none "%%~ni.srt" ^
 --title "%%~ni" --track-order 0:0,0:1,1:0 ^
 --engage no_cue_duration --engage no_cue_relative_position ^
 --clusters-in-meta-seek
 DEL "%%~ni.srt"
 DEL "%%i"
 REN "%%i.final" "%%i"
)
ECHO.
FOR %%i IN (*.mp4) DO (
 ECHO Multiplexando %%i
 "C:/Program Files/MKVToolNix\mkvmerge.exe" --ui-language es ^
 --output "%%~ni.mkv" ^
 --language 0:eng --track-name 0:Video ^
 --default-track 0:yes --compression 0:none ^
 --language 1:eng --track-name 1:Audio ^
 --default-track 1:yes --compression 1:none "%%i" ^
 --language 0:spa --track-name 0:Subtitulo ^
 --default-track 0:yes --compression 0:none "%%~ni.srt" ^
 --title "%%~ni" --track-order 0:0,0:1,1:0 ^
 --engage no_cue_duration --engage no_cue_relative_position ^
 --clusters-in-meta-seek
 DEL "%%~ni.srt"
 DEL "%%i"
)
ECHO.
ECHO Mutiplexado finalizado!
ECHO.

Una breve explicación: Primero, el script revisa todos los subtítulos para convertirlos en UTF-8 si tienen una codificación latin-1 (ISO 8859-1); luego multiplexa los videos mkv con los subtítulos respectivos, para luego hacer lo propio con los videos mp4; es importante que sea en ese orden, primero los mkv y luego los mp4, pues si lo hacen al revés, tendrán resultados desagradables (les dejo de tarea darse cuenta del problema, es simple lógica).

Espero sea útil a alguien, pues realmente es algo muy específico que utilizo todos los días, como buen cinéfilo y seriéfilo que soy :-)

Comentarios

Entradas más populares de este blog

Reflexión sobre Romanos 8:28