Visão geral:
Estou tentando remuxar minha biblioteca principalmente MKV para MP4. Eu tenho um script que extraiu legendas dos arquivos de vídeo.
Eu tenho outro script que irá remuxar qualquer arquivo .mkv em uma determinada pasta. O que eu preciso é que o scriptapenaspastas remux onde detecta que existem arquivos .srt.
Todos os arquivos .srt terminam com ***.eng.srt
Aqui está meu script remux atual:
#!/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
Obrigado! Qualquer ajuda será muito apreciada.
Responder1
Acho que você está procurando por isso:
#!/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
Eu removi o IFS='\n'
já que não está fazendo nada de útil lá, seu for
loop é bastante seguro mesmo com nomes contendo espaços em branco, desde que você cite suas variáveis.
Os [ -e foo ]
testes para a existência de foo
. Por outro lado, [ ! -e foo ]
é verdade se não houver foo
. Neste caso, foo
é um glob ( *.srt
), portanto o teste será falso se algum arquivo correspondente for encontrado. No script acima, &&
significa que se nenhum srt
arquivo for encontrado, a mensagem de erro será impressa e o script será encerrado.