Обзор:
Я пытаюсь переделать мою в основном MKV библиотеку в MP4. У меня есть скрипт, который прошел и извлек субтитры из видеофайлов.
У меня есть другой скрипт, который будет ремуксировать любые файлы .mkv в указанной папке. Мне нужно, чтобы скрипттолькопапки remux, в которых он обнаруживает файлы .srt.
Все файлы .srt заканчиваются на ***.eng.srt
Вот мой текущий скрипт ремикса:
#!/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
Спасибо! Любая помощь будет высоко оценена.
решение1
Я думаю, вы ищете это:
#!/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
Я удалил , IFS='\n'
так как он не делает ничего полезного, ваш for
цикл вполне безопасен даже с именами, содержащими пробелы, если вы заключаете переменные в кавычки.
Тесты [ -e foo ]
на существование foo
. И наоборот, [ ! -e foo ]
является истинным, если нет foo
. В этом случае foo
является glob ( *.srt
), поэтому тест будет ложным, если будут найдены какие-либо соответствующие файлы. В приведенном выше сценарии означает, &&
что если srt
файлы не будут найдены, будет выведено сообщение об ошибке и сценарий завершит работу.