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。

相關內容