我有一个 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。