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

本当に使う必要があるのか.Flac2 回ですか?
変換されたファイルはすべて常に同じフォルダー (作業ディレクトリ) に保存しますか?

for %%A in (.flac) do ffmpeg -i "%%~nA.flac" -c:v copy -b:a 320k "%%~nA.mp3"
for /R %% A in (
.flac)ffmpeg -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.drive:\folder\エンコードされたターゲットファイルを保存するには、名前だけでなく、を定義/追加することを検討してください。ないbat と同じ作業ディレクトリに保存します。

 ... (...)do.... ffmpeg ... "%%~dpni.mp3"
  • 観測: 2.mp3現在の/作業ディレクトリに保存するには、次を使用します。
 ... (...)do.... ffmpeg ... "%%~ni.mp3"
 ... (...)do.... ffmpeg ... ".\%%~ni.mp3"
 ... (...)do.... ffmpeg ... "%CD%\%%~ni.mp3"
  • 観測:: 3すべてのメタデータは存続します!!

1つは、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ブレークラインを使用する場合は^スペース/文字キャレットの後:

ここに画像の説明を入力してください


追加リソース:

関連情報