Descripción general:
Estoy intentando remuxar mi biblioteca principalmente MKV a MP4. Tengo un guión que revisó y extrajo subtítulos de los archivos de video.
Tengo otro script que remuxificará cualquier archivo .mkv en una carpeta determinada. Lo que necesito es que el guiónsolocarpetas remux donde detecta que hay archivos .srt.
Todos los archivos .srt terminan con ***.eng.srt
Aquí está mi script remux actual:
#!/bin/bash
IFS=$'\n'
clear
for filename in *.mkv
do
echo "$filename"
newfilename="${filename%.mkv}.mp4"
echo "${newfilename}"
ffmpeg -fix_sub_duration -i $filename -c:v copy -c:a copy -c:s mov_text $newfilename
done
¡Gracias! cualquier ayuda será apreciada.
Respuesta1
Creo que estás buscando esto:
#!/bin/bash
clear
for filename in *.mkv
do
## Exit if there are no srt files
[ ! -e *.srt ] && echo "No .srt files found, exiting" && exit
echo "$filename"
newfilename="${filename%.mkv}.mp4"
echo "${newfilename}"
ffmpeg -fix_sub_duration -i "$filename" -c:v copy -c:a copy -c:s mov_text "$newfilename"
done
Eliminé el IFS='\n'
porque no hace nada útil allí, su for
bucle es bastante seguro incluso con nombres que contienen espacios en blanco siempre que cite sus variables.
Las [ -e foo ]
pruebas de la existencia de foo
. Por el contrario, [ ! -e foo ]
es cierto si no hay foo
. En este caso, foo
es un globo ( *.srt
), por lo que la prueba será falsa si se encuentra algún archivo coincidente. En el script anterior, &&
significa que si no srt
se encuentran archivos, se imprimirá el mensaje de error y el script se cerrará.