lunes, 11 de enero de 2016

Recorrer un directorio recursivamente y añadiendo los archivos srt correspondientes a su archivo mkv

Tengo una tele Smart TV que no reproduce bien los subtítulos externos de un mkv, si este mkv ya dispone de subtítulos. He creado un archivo bash en linux que recorre un directorio recursivamente y en dichos casos va añadiendo el archivo srt al mkv y lo pone como español y por defecto. Hago lo mismo con los mp4, todo esto es fácilmente modificable. Creía que era un problema de minidlna pero no es así, el problema es de la Samsung Smart TV, aunque creo que otras televisiones tienen problemas parecidos. Es una castaña que la tele sólo permita DLNA y no Samba o NFS.



# la definición de la función recorrer_directorio
recorrer_directorio()
{
 
 # para todos los archivos mkv ...
 for i in *.mkv
 do
  i="${i%.mkv}"
  # si hay un archivo igual al nombre con extension srt
  if [ -f "$i.srt" ]; then
  # convierto el subtitulo en formato srt y en el ISO-8859-1 a UTF-8
  iconv -c --from-code="ISO-8859-1" --to-code="UTF-8" "$i.srt" >"$i.utf8.srt" 
  # añado el subtítulo en español al fichero.copia.mkv
  mkvmerge -o "$i.copia.mkv" "$i.mkv" --default-track 0 --language "0:spa" --track-name "0:Castellano" -s 0 -D -A "$i.utf8.srt"
  fi 
  # si el mkvmerge ha ido bien borro todo lo que sobra y renombro el archivo creado con mkvmerge en el anterior nombre que tenía
  if [ -f "$i.copia.mkv" ]; then
   echo "$i.mkv"
   rm "$i.utf8.srt"
   rm "$i.srt"
   rm "$i.mkv"
   mv "$i.copia.mkv" "$i.mkv"
  fi
  # si aún está el archivo .utf8.srt es que no ha ido bien, suele ser porque el srt original ya está en formato utf8
  if [ -f "$i.utf8.srt" ]; then
   mkvmerge -o "$i.copia.mkv" "$i.mkv" --default-track 0 --language "0:spa" --track-name "0:Castellano" -s 0 -D -A "$i.srt"
   if [ -f "$i.copia.mkv" ]; then
    echo "$i.mkv"
    rm "$i.utf8.srt"
    rm "$i.srt"
    rm "$i.mkv"
    mv "$i.copia.mkv" "$i.mkv"
   fi
  fi
 done
 
 # igual que antes pero para los archivos mp4
 for i in *.mp4
 do
     i="${i%.mp4}"
            if [ -f "$i.srt" ]; then
      iconv -c --from-code="ISO-8859-1" --to-code="UTF-8" "$i.srt" >"$i.utf8.srt" 
      mkvmerge -o "$i.copia.mkv" "$i.mp4" --default-track 0 --language "0:spa" --track-name "0:Castellano" -s 0 -D -A "$i.utf8.srt"
     fi 
            if [ -f "$i.copia.mkv" ]; then
             echo "$i.mkv"
       rm "$i.utf8.srt"
             rm "$i.srt"
             rm "$i.mp4"
             mv "$i.copia.mkv" "$i.mkv"
     fi
            if [ -f "$i.utf8.srt" ]; then
       mkvmerge -o "$i.copia.mkv" "$i.mp4" --default-track 0 --language "0:spa" --track-name "0:Castellano" -s 0 -D -A "$i.srt"
                if [ -f "$i.copia.mkv" ]; then
                 echo "$i.mkv"
        rm "$i.utf8.srt"
       rm "$i.srt"
       rm "$i.mkv"
       mv "$i.copia.mkv" "$i.mkv"
  fi
     fi
 done

 # si hay algún directorio voy ejecutando recursivamente todo esto
 for dir in ./*/
 do
     dir=${dir%*/}
            if [ -d "${dir##*/}" ]; then
       cd "${dir##*/}" 
       recorrer_directorio ./
       cd ..
     fi
 done
}

# recogemos el directorio a recorrer
# Directorio desde el que queramos recorrer recursivamente y metiendo los subtítulos en el archivo mkv
DIR=/media/usuario/Peliculas
# entramos a él 
cd $DIR
# y llamamos a la función recorrer_directorio pasándole como parámetro el directorio
recorrer_directorio $DIR

No hay comentarios:

Publicar un comentario