Windows 批处理脚本转 Shell 脚本

Windows 批处理脚本转 Shell 脚本

我有一个 Windows 批处理脚本,想在 Linux 上运行,但无法将其转换为 Shell 脚本

我想知道是否有人可以帮忙。

: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

我一直想把它转换成 shell 脚本,但遇到了麻烦。我不太擅长这个。

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一起**使得单个模式在各个目录级别上起作用。
  • 我在最后添加了一个测试,仅当转码为 mp4 时没有出现错误时才删除 .mkv。

相关内容