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