ffmpegでスペース付きのファイルも一括音楽変換[ffmpeg,変換]

PC
この記事は約2分で読めます。

昨日ffmpegで一括変換をしましたが、どうもファイル名にスペースを含むとファイル名が正しくなくて変換ができませんでした

 

ffmpegで動画から一括音楽変換[ffmpeg,変換]
ダウンロードした音楽動画は動画ファイルなのでそこそこの容量を持ちますスマホなどの限られた保存領域のために容量を小さくしたいので音楽ファイルに変換しましたただ、数個ならフリーソフトを使い一つ一つやればいいのですが数百個になると気が遠く...

少し編集して対応させました

@echo off
cd /d %~dp0
setlocal enabledelayedexpansion
rem ||行末のスペース削除
rem ———————–
set FFMPEG=ffmpeg.exe -y -i
set FFMPEGOUT=-acodec copy
rem ———————–
rem ||「.mp4」のファイルを取得(スペースありも可)
for /f "usebackq delims=" %%i in (`dir /B /S *.mp4`) do (
echo —————————————————-
echo %%i
echo.
rem ||変数に一旦格納
set dmpppp=%%i
rem ||ffmpegで抽出 上部変数初期化時点でのスペースをこちらに移動
%FFMPEG% "%%i" %FFMPEGOUT% "!dmpppp:~0,-3!m4a"
echo —————————————————-
)
echo.
rem pause>NUL
pause
exit /b 0
view raw
mp4tom4a.bat
hosted with ❤ by GitHub

forでdirコマンドの結果を変数に格納する時に、スペースで区切ってしまうため「delims=」で区切り文字を無効にしているため、スペースで区切られたファイル名を取得できます(使っていない文字でもいいかもしれません)

ですが、ffmpegでそのまま渡すと同じようにファイルとして見られないのでダブルクォーテーションで囲みました

出力ファイルも同様にダブルクォーテーションで囲っています

この通り、ファイル名にスペースが入っていても大丈夫になりました!


すべて抽出し直ししたかったので全.m4a削除バッチも作ってみました

まぁ

del *.m4a

でもできちゃうのと一部のファイルが削除できなかったのであまり意味ないように見えたりして…

@echo off
cd /d %~dp0
setlocal enabledelayedexpansion
for /f "usebackq delims=" %%i in (`dir /B /S *.m4a`) do (
echo —————————————————-
echo %%i
echo.
del %%i
echo —————————————————-
)
echo.
pause
exit /b 0
view raw
autoremove.bat
hosted with ❤ by GitHub

参考:

バッチファイル 文字列にスペースがある場合 – 教えてgoo

.bat(バッチファイル)のforコマンド解説。 – Qiita

コメント