
У меня есть пакетный скрипт Windows, который я хочу запустить в Linux, но у меня возникли проблемы с его преобразованием в скрипт оболочки.
Интересно, кто-нибудь может помочь?
: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
Я пытался преобразовать его в скрипт оболочки, но у меня возникли проблемы. Я не очень хорош в этом.
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";
Я не уверен, как это зациклить, поэтому он постоянно проверяет.
решение1
Скорее всего (предполагается, что 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
На практике:
- Вы пропустили
done
утверждение, указывающее на цикл - Если ваш
{*.mkv,*/*.mkv,*/*/*.mkv,*/*/*/*.mkv}
шаблон не является неверным, ffmpeg выдаст сообщение об ошибке для каждого несоответствующего шаблона.globstar
Это также**
обеспечивает работу одного шаблона на всех уровнях каталогов. - Я добавил тест в конце, чтобы стереть .mkv только в том случае, если не было ошибок при перекодировании в mp4.