Windows:使用 ffmpeg 將 FLAC 遞歸轉換為 MP3

Windows:使用 ffmpeg 將 FLAC 遞歸轉換為 MP3

我安裝了 ffmpeg 並使用批次檔成功將 MP4 h.264 轉換為 MKV x.265,但在將 FLAC 檔案轉換為 320 kbps MP3(不需要元資料)時遇到問題。雖然許多貼文解釋如何在 Linux 中執行此操作,他們的腳本在 Windows 的命令提示字元中運行時無法解決此問題。

我創建的用於轉換為 MP3 的命令列腳本包含以下行:

for %%A in (*.flac) do ffmpeg -i "%%~nA.flac" -c:v copy -b:a 320k "%%~nA.mp3"

由於不擅長 Powershell,我正在尋找命令列解決方案。我不在乎元資料是否存在。

我該如何修改它以轉換當前目錄及其下所有子目錄中的所有 FLAC 檔案(如上面針對 Linux 的第一個連結所示)?

答案1

以下.bat文件應該可以做到這一點:

for /R %%A in (*.flac) do ffmpeg -i "%%A" -c:v copy -b:a 320k "%%~dpnA.mp3"

您可以先使用以下腳本進行測試:

for /R %%A in (*.flac) do echo ffmpeg -i "%%A" -c:v copy -b:a 320k "%%~dpnA.mp3"

對上述替換的解釋(它們在上面的腳本中組合在一起):

  • %~dA - 僅將 %A 擴展為磁碟機號
  • %~pA - 僅將 %A 擴展為路徑
  • %~nA - 僅將 %A 擴展為檔案名

答案2

@echo off 

cd /d "%~dp0" & setlocal 
set "_flag1=-c:v copy -b:a 320k"
set "_flag2=-hide_banner -v error -stats"
set "_ffmpeg="C:\Program Files\FFmpeg\Bin\FFmpeg.exe" -i"

for /r %%i in (*.Flac)do %_ffmpeg% "%%~i" %_flag1% "%%~dpni.mp3" %_flag2%
%__AppDir__%timeout.exe /t 5 /nobreak |echo=Is Done! & endlocal & goto :eof

  • 不定義/使用變數的情況相同:
@echo off & setlocal & cd /d "%~dp0"

for /r %%i in (*.Flac)do "C:\Program Files\FFmpeg\Bin\FFmpeg.exe" -i ^
  "%%~i" -c:v copy -b:a 320k "%%~dpni.mp3" -hide_banner -v error -stats
  
%__AppDir__%timeout.exe /t 5 /nobreak |echo=Is Done! & endlocal & goto :eof

你真的需要使用嗎.Flac兩次?
您總是將所有轉換後的檔案保存在同一資料夾(工作目錄)中嗎?

for %%A in (.flac) do ffmpeg -i "%%~nA.flac" -c:v copy -b:a 320k "%%~nA.mp3"
for /R %% A in (
.flac)fromffmpeg -i "%%~pI%%~nA.flac" -b:a 320k "%%~nA.mp3"失敗並出現與前面提到的相同的錯誤...

1.刪除n.flac

for %%A in (*.flac) do ffmpeg -i "%%~nA.flac" -c:v copy -b:a 320k "%%~nA.mp3"
  • 觀察次數:1循環For變數"%%~A"為您提供輸入檔案的完整路徑,您不需要裁剪名稱和/或明確新增:
"%~Drive\\Path\\Name.Flac"
"%%~dpn.Flac"
"%%~N.Flac"

rem :: use
ffmpeg -i  "%%#~A" ...

2.使用For /R

For /R %%i in (*.flac)do ...

3.考慮定義/添加 adrive:\folder\來保存目標編碼文件,而不僅僅是名稱,如果不是將其儲存在您的 bat 所在的相同工作目錄中。

 ... (...)do.... ffmpeg ... "%%~dpni.mp3"
  • 觀察次數:2若要將您的檔案儲存.mp3在目前/工作目錄中,您可以使用:
 ... (...)do.... ffmpeg ... "%%~ni.mp3"
 ... (...)do.... ffmpeg ... ".\%%~ni.mp3"
 ... (...)do.... ffmpeg ... "%CD%\%%~ni.mp3"
  • 觀察次數:: 3所有元資料都保存下來!

一個建議使用For /F + where /R

@echo off

setlocal & cd /d "%~dp0"    

for /f delims^= %%i in ('
2^>nul %__AppDir__%where.exe /r . *.flac
')do "C:\Program Files\FFmpeg\Bin\FFmpeg.exe" -i "%%~i" -c:v ^
     copy -b:a 320k "%%~dpni.mp3" -hide_banner -v error -stats

%__AppDir__%timeout.exe 5 /nobreak |echo=Is Done! & endlocal & goto :eof
  • 觀察次數:: 4對於使用 的斷線^,請勿使用任何空格/字符插入符號後:

在此輸入影像描述


其他資源:

相關內容