Windows: Mengonversi FLAC ke MP3 secara rekursif dengan ffmpeg
Saya telah menginstal ffmpeg dan menggunakan file batch untuk mengonversi MP4 h.264 ke MKV x.265 dengan sukses, tetapi saya memiliki masalah dengan mengonversi file FLAC ke 320 kbps MP3 tanpa metadata yang diperlukan. Meskipun banyak posting menjelaskan bagaimana melakukan ini di Linux, skrip mereka tidak menyelesaikan masalah ini ketika dijalankan di command prompt Windows.
Skrip baris perintah yang saya buat untuk dikonversi ke MP3 memiliki baris ini:
for %%A in (*.flac) do ffmpeg -i "%%~nA.flac" -c:v copy -b:a 320k "%%~nA.mp3"
Tidak mahir di Powershell, saya mencari solusi baris perintah. Saya tidak peduli apakah metadata bertahan atau tidak.
Bagaimana saya bisa memodifikasinya untuk mengonversi semua file FLAC di direktori saat ini dan semua sub direktori di bawahnya (seperti yang ditunjukkan pada tautan pertama di atas untuk Linux)?
Jawaban
File berikut .bat
harus melakukannya:
for /R %%A in (*.flac) do ffmpeg -i "%%A" -c:v copy -b:a 320k "%%~dpnA.mp3"
Anda dapat mengujinya terlebih dahulu dengan skrip ini:
for /R %%A in (*.flac) do echo ffmpeg -i "%%A" -c:v copy -b:a 320k "%%~dpnA.mp3"
Penjelasan untuk substitusi di atas (digabungkan dalam skrip di atas):
%~dA
- memperluas% A menjadi huruf drive saja%~pA
- memperluas% A ke jalur saja%~nA
- memperluas% A ke nama file saja
@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
- Hal yang sama tanpa mendefinisikan / menggunakan variabel:
@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
Apakah Anda benar-benar perlu menggunakan .Flac dua kali?
Dan Anda akan selalu menyimpan semua file yang dikonversi dalam folder yang sama (direktori kerja)?
for %%A in (.flac) do ffmpeg -i "%%~nA.flac" -c:v copy -b:a 320k "%%~nA.mp3"
for /R %% A in (
.flac)
dariffmpeg -i "%%~pI%%~nA.flac" -b:a 320k "%%~nA.mp3"
gagal dengan kesalahan yang sama seperti yang dicatat sebelumnya ...
1. Hapus n
dan.flac
for %%A in (*.flac) do ffmpeg -i "%%~
n
A
.flac
" -c:v copy -b:a 320k "%%~nA.mp3"
- Obs .: 1 The
For
variabel loop"%%~A"
memberikan kepada Anda path lengkap ke file input, Anda tidak perlu nama tanaman dan / atau menambahkan secara eksplisit:
"%~
Drive\\
Path\\
Name
.Flac"
"%%~dpn.Flac"
"%%~N.Flac"
rem :: use
ffmpeg -i "%%#~A" ...
2. Gunakan For /R
:
For /R %%i in (*.flac)do ...
3. Pertimbangkan untuk mendefinisikan / menambahkan drive:\folder\
untuk menyimpan file yang dikodekan target, bukan hanya nama, jika tidak untuk menyimpannya di direktori kerja yang sama tempat kelelawar Anda berada.
... (...)do.... ffmpeg ... "%%~dpni.mp3"
- Obs .: 2 Untuk menyimpan
.mp3
di direktori saat ini / kerja, Anda dapat menggunakan:
... (...)do.... ffmpeg ... "%%~ni.mp3"
... (...)do.... ffmpeg ... ".\%%~ni.mp3"
... (...)do.... ffmpeg ... "%CD%\%%~ni.mp3"
- Obs. :: 3 Semua metadata bertahan !!
Satu menyarankan menggunakan 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
- Obs. :: 4 Untuk penggunaan garis putus-putus
^
, jangan gunakan spasi / karakter apa pun setelah tanda sisipan:

Sumber daya tambahan:
- Set /?
- For /?
- For /F
- For /R
- Where /?
- Timeout /?
- Pengalihan
|
,<
,>
,2>
, Dll
- Eksekusi Bersyarat
- || dan &&
- Local Environment | Function| Lihat juga:Goto :EOF
- Setlocal & Endlocal
- Pisahkan perintah panjang dalam beberapa baris melalui file batch Windows
- Bagaimana Penerjemah Perintah Windows [ cmd.exe] Parse Scripts