†DOSとバッチとスクリプト†

音楽ファイルのタグを編集する

作成開始日 2026.04.06
最終更新日

radiko録音アプリの「らじれこ」では、TITLEタグの形式がファイル名形式に準拠してしまう。ファイル名の頭に日付文字列を付ければ、タイトルにも日付が付いてしまう。変更ができない。これが困る。ファイル名には日付を付けたいが、タイトルには付けたくないのである。たとえば、「らじれこ」で録音したファイルは以下のようになっている;

 ファイル名: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


【DOSとバッチとスクリプト目次】 【ホーム】