†DOSとバッチとスクリプト†
作成開始日 2026.04.06
最終更新日
ファイル名:20260406_名曲スケッチ「G線上のアリア」 「アリオーソ」.m4a
タイトル :20260406 名曲スケッチ「G線上のアリア」 「アリオーソ」
そこで、ffmepgを使ってタイトルから日付情報を削除して、以下のようにしたい;
ファイル名:20260406_名曲スケッチ「G線上のアリア」 「アリオーソ」@.m4a
タイトル :名曲スケッチ「G線上のアリア」 「アリオーソ」
処理自体は単純で、タグ情報を抜き出して、文字列を加工して設定し直すだけ。ただし、ffmpegでは既存ファイルの書き換えはできない?ようなので、タイトル情報を書き換えたファイルを新たに作成し、識別のためにファイル名の末尾に「@」を付けた。
バッチとしてのキモはFOR文の使い方。%%aはタグ名(titleとかartistとか)、%%bは「:」、%%cは日付文字列、%%dにそれ以降のタイトル文字列が入る。FOR文はこうした項目単位の文字列処理には非常に便利。なお、Unicodeの変換にはNKF漢字フィルターを使用している。
私が長年愛用していた「radikool」ではタグ設定が自由にできたのだが、2026年春のradikoの仕様変更で、番組情報(=タグ)が一切取得できなくなってしまった。開発終了が惜しまれる。実に実に惜しまれる。自動的にタグに楽曲情報を入れる手段がなくなってしまった…
@echo off REM *** TITLEタグから先頭の日付情報を削除する (らじれこ用) REM ***[形式]title : 日付 タイトル(空白を含む) set fname=%1 set oname=%fname:.=@.% rem echo %fname% rem echo %oname% ffmpeg -i %fname% -f ffmetadata -hide_banner 2>&1 | nkf -s -u > tmp.txt FOR /f "usebackq tokens=1-3,*" %%a in (tmp.txt) do ( IF "%%a"=="title" ffmpeg -i %fname% -metadata title="%%d" -c copy %oname% ) del tmp.txt EXIT /B