ゲーム以外の雑記(井上明人)

最近は、ほとんどキーボードの話をしています。

音声ファイル(mp3, m4aなど)をコマンドラインで統合/変換する方法。

 

A.同じフォルダのmp3ファイルを一つにまとめる(コマンドプロンプト想定)

 

すごいラクコマンドプロンプトで、統合したいmp3ファイルのある任意のディレクトリに移動して、

 

> copy /b *.mp3 all.mp3

 

とコマンドを打つだけ。

 

B.同じフォルダのm4aファイルを一つにまとめる(powershell想定)

 

正直めんどさかったけど、できた。いくつか段階を踏む必要がある。これは、作業量によっては、アプリとかのほうがはやいかも知れない。

 

手順としては下記のとおり

B1.ffmpegのインストール(所要時間5分)

- オープンソースソフトウェアのffmpegをインストールする必要がある。環境変数の設定とかが、いささかだるいが、まあ、これができたら、話が先にすすむ。

【FFmpeg】Windows 11へのインストール・環境変数の設定 - 本とか旅とか悟りとか。

 

B2.該当フォルダに日本語ファイル名があればすべて英数字に変更する。

(日本語ファイル名がなければ、この過程はスキップ可能)

 

具体的には、powershellで、cdして、カレントディレクトリに移動したうえで、下記をコピペ。(copilotさんに下記のコードは作っていただきました)

Get-ChildItem -File | ForEach-Object {
    $newName = $_.Name -replace '[\p{IsHiragana}\p{IsKatakana}\p{IsCJKUnifiedIdeographs}]'
    if ($newName -ne $_.Name) {
        Rename-Item -Path $_.FullName -NewName $newName
    }
}

もし、日本語部分を全部削除した場合に、ファイルがダメになってしまう場合は、別途対応が必要。

単に、シリアル番号にしてつけ直すだけとかでよければ、LLMが適当なコードを提案してくれるとは思う。(ローマ字とかに読みを変換とかでもいいかも)

 

B3.該当フォルダのファイル名一覧をつくる(ボムなしutf8のテキストファイルで)

 

さっきと同じ、ディレクトリにいる状態を前提として、下記のコマンドを打つ。

 

Get-ChildItem .\*.m4a | Foreach-Object {Add-Content -Encoding UTF8 mylist.txt ("file '" + $_.Name + "'")}

 

ただ、これで作られたUTF8のファイルはボム付きになってしまうので、テキストエディタかなんかで、ボムなしutf8に変換してください。(powershellでBOMなしutf8つくろうと思うと、なんだか大変なので…)

 

B4. ここでようやくffmpegで統合できる。

 

mylist.txtからファイル一覧を読み込んで、統合する。コマンドは下記のとおり。

 

ffmpeg -f concat -safe 0 -i mylist.txt -c copy all.m4a

 

C: mp3をm4aに変換する方法

m4aにしないと、ファイルを扱えない場合は、下記のコマンドで、統合したmp3ファイル(ここではall.mp3の例)を、m4aファイルに変換できる。

 

 ffmpeg -i all.mp3 -c:a aac -b:a 128k all.m4a