Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

Radikoを録音したAACファイルを、iTunesライブラリへ追加する。-qaacによるAAC-LCへの変換

新型コロナ流行以前から、私にとって、ラジオは日常的なメディアだった。Radikoの登場で、それが一変した。言葉としての「ラジオ」は生きているものの、その実態は既にインターネット上の1サービスだ。加えてPCによる録音の自由度、スマートフォンなどのポータビリティを加味して、ラジオ番組はフレキシブルに楽しめるコンテンツとなった。

唯一欠けていたのが保存と管理の問題だった。私は音楽ファイルをiTunesで管理しており、録音したラジオ番組のうち、特に「これは取っておきたい」と思うものはiTunesライブラリに加えたいと思っていた。

AACファイルには、同種のファイルでもプロファイルが異なることによって、取扱いできる場合と出来ないものがある。例えばWindows Media PlayeriTunesAACファイルでも、RadikoAACファイルでも再生できるのだが、iTunesRadikoAACファイルを再生できない。再生できないということは、ライブラリに追加することもできないということだ。

今回の投稿では、この問題を解決する。具体的には、Radikoを録音することで生成されたAACファイルを、

  • iTunesライブラリへ取り込み可能な形態へ変換する。
  • 必要なタグ情報を記録する。
  • 以上の作業を複数のファイルへ一括実行する。

順を追って、手順を説明していく。AACファイルの変換にはqaacを、一括変換処理にはPowerShellを用いる。いつも通り、参照先などは投稿末尾にまとめている。

予備知識

ここではAACプロファイルについての詳細は説明しない。それは投稿末尾のリンクを参照してほしい。
この投稿を読み進めるに際し、押さえておきたいポイントが2つある。

  • AACには目的に応じて異なる3つのプロファイルがある。そのうちの2つが、
メイン 圧縮率が高い。 RadikoAACで採用
LC (Low Complexity) 圧縮率が低い。 iTunesAACで採用
  • 変換によって、ファイル・サイズが大きくなる可能性がある。

qaac

qaacは、iTunesなどに含まれるAppleエンコーダのフロントエンドとして機能する。iTunesで管理する前提でのAACファイルを出力するには、大変都合が良い。

ダウンロードしたqaacには次の2つのフォルダが含まれている。この投稿ではx64を利用する。

qaacはコマンドライン・ツールなので、x64フォルダを適当な場所へコピーし、名前を変更する。以下、このフォルダをqaacフォルダと呼ぶ。
この時、合わせてqaacフォルダ内で、次のコマンドを実行しておくと良い。それぞれコマンド・オプションの指定方法、対応サンプリング・レート、ビットレートの一覧をテキスト・ファイルへ出力している。必要に応じて、これらのファイルを参照しながら作業すると効率が良い。

.\qaac64.exe > help.txt
.\qaac64.exe --format > format.txt

実験:変換からチューニング

まずは実験として、1曲だけを変換する。目的のファイルをqaacフォルダへコピーする。ここでは「original.aac」とする。これを「copy.m4a」へ変換するには、次のコマンドを実行する。

.\qaac64.exe .\original.aac -o copy.m4a

「original.aac」は30分の番組が録音されている。その変換に36秒を要したことが分かる。
originalが約48Kbpsのビットレートであったのに対し、copyのビットレートは119Kbpsだ。その結果、元のファイル・サイズは10MBに対して、出力されたファイル・サイズは26MB、約2.6倍になっている。
f:id:espio999:20201205222952p:plain
f:id:espio999:20201205224429p:plain
そもそもRadikoビットレートは48Kbpsだ。そこで変換後のビットレートを上限48Kbpsの可変ビットレート(Constrained VBR)とし、サンプリング・レートを次のように変化させることで、ファイル・サイズの変化を確認する。

  • 自動設定
  • 32000Hz
  • 44100HZ
.\qaac64.exe .\original.aac -o copy-auto.m4a -v 48 -r auto
.\qaac64.exe .\original.aac -o copy32.m4a -v 48 -r 32000
.\qaac64.exe .\original.aac -o copy44.m4a -v 48 -r 44100

以上のコードを実行した結果、次のことが分かる。

  • 自動設定では、サンプリング・レート=24000Hzに定義された。
  • サンプリング・レートが高いほど、変換処理に時間がかかる。
  • サンプリング・レート=44100Hzでは、ビットレートが64Kbpsへ勝手に底上げされる。
  • Overall bitrateが最小の場合(今回はサンプリング・レート=32000)、ファイル・サイズが最小になる。

f:id:espio999:20201205223052p:plain
f:id:espio999:20201205223110p:plain
ファイル・サイズ以外に、音質の問題も重要だ。これは言葉では説明できないし、何より個人の好みや目的にも依存する。音質を確認しながら、ビットレート、サンプリング・レートを調整し、最適な出力が得られる値を追及することになる。
前述の「format.txt」の内容を確認すれば、対応しているプロファイル、ビットレート、サンプリング・レートの組み合わせが分かる。
ちなみに、参照したサイトの一つが、インターネット・ラジオの音質を比較している。記載されている情報に基づくならば、サンプリング・レートは16000Hzで十分かもしれない。

タグ情報

f:id:espio999:20201205223841p:plain
出力されたファイルをiTunesライブラリへ登録すると、タグ情報が何も記録されていないことに気付く。必要なタグ情報は、変換時にオプション指定して記録することができる。例えば、iTunesに表示される項目へ、次のような具合で登録するとしよう。

song 番組名
artist ディスクジョッキー、ナビゲーター名
album 放送局名
genre ジャンル

オプションとの対応、コマンドは次のようになる。iTunesで表示される「song」が、オプションでは「title」になっていることには注意が必要だ。

 .\qaac64.exe .\original.aac -o copy16.m4a -v 48 -r 16000 --title "番組名" --artist "DJ名" --album "放送局名" --genre "ジャンル名"

songは番組名ではなく、番組名+日付を曲名にしたい、albumは放送局ではなく、番組名にしたいなど、各ユーザーごとに好みの定義は異なるはずだ。各自の定義に応じて、オプションを読みかえて必要情報を登録する。前述の「help.txt」を参照すれば、必要なオプションと必要情報との組み合わせが理解できるだろう。
また、iTunesタグ情報のメタデータが参照先の一つに掲載されているので、必要ならば参照すると良い。

一括変換

理屈が分かれば、必要なオプション情報を設定したコマンドを、対象ファイルに対して適宜実行していくだけだ。この作業を繰り返し、目的のファイル群を一括変換する。
目的のファイルによって変換設定やオプション情報が多岐にわたる可能性もあるので、対象ファイル群と設定をまとめたファイルを作成し、それを1行ずつ読込ながらコマンド実行すれば、間違いも少なくできるだろう。次のようにアプローチすることにした。

  • 単一フォルダに格納されているファイル群を変換する。
  • 別の単一フォルダへ変換ファイル群を出力する。
  • Excelで変換対象ファイル、変換設定を記録したファイルを作成し、CSVファイルとしてqaacフォルダに保存する。
    • ファイル一覧には次の情報を記載する。
      • 変換前後のファイル名
      • 変換後のサンプリング・レート
      • 必要なタグ情報(ここではartist、album、genre)

変換前後のフォルダ、ビットレートは、CSVファイル中では定義しない。それらは全ファイル共通の定義としてスクリプト中に定義している。
タグ情報にtitleを指定していない。拡張子を除くファイル名が自動的に適用される。私にはこれで十分だ。
f:id:espio999:20201205224040p:plain
一括変換スクリプトcsvファイルを読み込み、1行ごとに記録された設定情報に基づいてqaacを実行する。一括変換スクリプトのコードは次のようになるだろう。

gist.github.com

一括変換スクリプトもqaacフォルダに保存する。一括変換が終了したら、iTunesライブラリへ、変換ファイルの出力先フォルダを指定する。目的のファイル群がiTunesへ一括登録される。
f:id:espio999:20201205224233p:plain
f:id:espio999:20201205224131p:plain
f:id:espio999:20201205224142p:plain