昨日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 |
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 |
参考:
コメント