Пакетный скрипт Windows в скрипт Shell

Пакетный скрипт Windows в скрипт Shell

У меня есть пакетный скрипт 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.

Связанный контент