
Tenho um script em lote do Windows que desejo executar no Linux, mas estou tendo problemas para convertê-lo em um script de shell
Eu me pergunto se alguém pode ajudar.
:start
for /r %%F in (*.mkv) do (
C:\Python27\Scripts\ffmpeg\bin\ffmpeg.exe -y -i "%%F" -c:v libx264 -preset ultrafast -minrate 4.5M -maxrate 4.5M -bufsize 9M -c:a ac3 "%%~dpnF.mp4"
if not errorlevel 1 if exist "%%~dpnF.mp4" del /q "%%F"
)
TIMEOUT /T 60
goto start
Estou tentando convertê-lo para um script de shell, mas estou tendo problemas. Eu não sou muito bom nisso.
for f in {*.mkv,*/*.mkv,*/*/*.mkv,*/*/*/*.mkv}; do
ffmpeg -i "$f" -c:v libx264 -preset ultrafast -minrate 4.5M -maxrate 4.5M -bufsize 9M -c:a ac3 "${f%mkv}mp4";
rm "$f";
Não tenho certeza de como fazer o loop, por isso é verificado constantemente.
Responder1
Mais como (assumindo bash):
shopt -s globstar
for f in **/*.mkv
do
ffmpeg -i "$f" -c:v libx264 -preset ultrafast -minrate 4.5M -maxrate 4.5M -bufsize 9M -c:a ac3 "${f%mkv}mp4";
[[ $? -eq 0 ]] && rm "$f";
done
Na prática:
- Estava faltando uma
done
instrução indicando o loop - Seu
{*.mkv,*/*.mkv,*/*/*.mkv,*/*/*/*.mkv}
padrão, embora não esteja incorreto, fará com que o ffmpeg emita uma mensagem de erro para cada padrão que não corresponda.globstar
junto com**
faz com que um único padrão funcione em níveis de diretório. - Adicionei um teste no final para apagar o .mkv somente se não houvesse erro na transcodificação para mp4.