2010年3月28日

FFmpeg で HE-AAC コーデックを使う


tipok.org.ua - HE-AAC+ Codec as Shared Library

HE-AAC をサポートするライブラリ libaacplus と FFmpeg にそれを対応させるパッチを公開してくれている。これを使うと FFmepg においてライブラリである libaacplus を使用した HE-AAC(3GPP High Efficiency Advanced Audio Codec)の変換が出来るようになる。

※ 注意 - ライブラリと FFmpeg のどちらもソースからビルドをする必要がある。既に APT を用いて FFmpeg をインストールしている場合は要注意だが、 /usr/local ディレクトリ下にインストールされるので APT を使って /usr ディレクトリ下にインストールされた FFmpeg とは競合しない。

1: インストールに必要なパッケージの用意

autoconf
libaacplus のインストールは autogen.sh で行う。

subversion
パッチを当てる事が可能なリビジョンの FFmpeg のソースのチェックアウトに使用する。

patch
FFmpeg のソースにパッチを当てるのに使用する。

libx264-99 以上のバージョンの libx264
FFmpeg で libx264(H.264)を使う場合に libx264-99 以上のバージョンが必要。

2: インストール

1. libaacplus (2.0.2 new API)

ソースファイルをダウンロードして展開した後、次のコマンドでインストール。

$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

2. FFmpeg

How To では「Here is code for debian/ubuntu linux」と表記されている。ディストリビューションによっては問題が発生するかもしれない。

How To のコマンドの通りにパッチを当てても「Perhaps you used the wrong -p or --strip option?」と問われパッチが当たらない場合は、全ての項目を手動で当てる必要がある。

$ svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg -r 25711
$ cd ffmpeg
$ wget http://tipok.ath.cx/downloads/media/aac+/libaacplus-simple-sample/ffmpeg-patch/ffmpeg-aacp2.10112010.diff
$ touch libavcodec/libaacplus.c
$ patch -p7 < ffmpeg-aacp2.10112010.diff

パッチを当てようとすると次の動作を問われるので、 「working copy」の値を「File to Path」に入力する。これを7回繰り返すと完全にパッチが当たる。

can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|Index: configure
|===================================================================
|--- configure (revision 25711) 
|+++ configure (working copy) ← この太字の位置の値を
--------------------------
File to patch: configure ← ここに入力

パッチによって ./configure で libaacplus を使用するオプションの --enable-libaacplus がサポートされる。これを含めて FFmpeg を設定し、ビルド。この時に他にサポートしたいコーデックがあったら一緒に設定しておく(下の configure は一例としてメジャーな形式をサポートした単純なもの)。 選択出来るライブラリやオプションは ./configure --help コマンドで参照出来る。ソースからビルドをするのでそれぞれのデベロップメント・パッケージ(パッケージの語尾が dev のパッケージ)をインストールしておく必要がある。

$ ./configure --prefix=/usr/local --enable-shared --enable-gpl --enable-nonfree --enable-libx264 --enable-libxvid --enable-libvorbis --enable-libfaac --enable-libmp3lame --enable-libaacplus
$ make
$ sudo make install

このライブラリでは HE-AAC のデコードは出来ない。デコードには libfaad2 が対応。

・WinFF でプリセットを作成

WinFF

FFmpeg の GUI ラッパーである WinFF に HE-AAC に対応した FFmpeg のプリセットを作成しておくと便利だ。ただし、比較的新しいリビジョンの FFmpeg では若干オプションに指定するパラメータが変更されており(ビットレート指定で kb ではなく k のみ)、サポートされているバージョンの WinFF ではこれに対応しておらず、プリセットとして機能しない点に注意。


 メニューの「Edit」から「Preferences」を選択して使用する FFmpeg をインストールしたものに切り替える。上記のコマンドでビルドをすると「/usr/local/bin」ディレクトリ下にインストールされるのでそれを指定。


次に HE-AAC に対応するプリセットを作成。ここでは MP4 (H.264 AVC/HE-AAC) のプリセットを作成してみる。メニューの「Edit」から「Presets」を選択。詳細に使いこなすにはオプションを熟知する必要があるが、簡単に使用する分には元からあるプリセットを書き換えるだけでよい。ここでは「MP4 Fullscreen」のプリセットのオーディオのオプションを変更。コーデックを「-acodec libaacplus」、ビットレートの標準設定を「-ab 48k」とした。仕様上 72kbps 以上のビットレートには出来ず、指定してもエラーとなり変換出来ない。


正しく機能しているとそのプリセットで変換可能となる(音声のコーデックに libaacplus が使われているのが確認できる)。

2010年3月23日

EasyTAG を使用してオーディオファイルのタグを編集する

音声ファイルタグ編集ツール「EasyTAG」の使い方です。 EasyTAG を利用すると MP3, AAC, MP2, Ogg, FLAC 等のメジャーな形式のオーディオファイルの ID3 タグ(他各フォーマットに対応するタグ形式)編集が簡単に出来ます。

EasyTAG

1. EasyTAG の設定

EasyTAG のメニューから「設定」を選ぶと EasyTAG の設定が出来ます。

・ファイルの設定

ファイル名にある不正な文字を置き換える

このオプションを有効にすると、タグ情報に Windows ではファイル名として使用できない「?」等の文字が使用されており、その情報からスキャン機能でファイル名を更新した場合に、ファイル名へのその文字の適用を回避して他の文字に置き換えたファイル名で更新してくれます(タグ情報はファイルシステムに影響しないので置換される事はありません)。

親フォルダの更新時刻を更新する

これは「Amarok 1.4」等のフォルダの更新時刻から自動でコレクションの情報を更新する機能をもつオーディオプレイヤーで便利に使えるオプションです。


例えば Amarok 1.4 は Amarok 1.4 以外でタグを編集した場合、ファイル名に変更がないと自動更新をしてくれず、タグ情報のみを変更した場合に情報が反映されません。このオプションを有効にすると、タグ情報を変更した時にその親フォルダの更新時刻を更新し、 Amarok 1.4 の自動更新でその対象になるようにします。こうするとタグを編集しただけでも自動更新機能が働いてコレクションが更新され、すぐさま設定を反映してくれます。


See Also: iPod と連動する高機能メディアプレイヤー Amarok 1.4

・ID3 タグの設定

ID3 タグの書き込み

ID3v1 と ID3v2 のタグをつける事が出来ます。この場合 v2 タグと v1 タグは一つの MP3 ファイルに両方付与することが出来ます。 v2 タグは MP3 ファイルの先頭、 v1 タグは最後に付与され、両方のバージョンに対応出来るようになっています。 v2 タグではタグへの画像の付与、タグ情報に Unicode の使用が出来ます。一般的に使用されている「UTF-8」が汎用的です。

v2 タグは付与できる情報量が多い分 v1 よりサイズが大きい(特に画像を付けると大きくなる)点に注意が必要です。一つ一つのファイルのサイズは微々たるものでも、数が多くなってくるとそれなりに膨れ上がります。

ID3v2 タグの互換性

最新である ID3v2.4 でのタグ書き込みは下位互換に注意が必要です。タグを付ける場合にはアプリケーションによってはタグの互換性で読み込めない可能性もあることを考慮しておいた方がよいかもしれませんが、そのようなケースは稀で、現行で便利に利用できるものはほぼ間違いなくサポートされています。「古いバージョン ID3v2 タグを自動的に変換する」オプションを有効にしておくと、 ID3v2.2 より古いバージョンの ID3v2 タグを ID3v2.2 に自動変換してくれます。

ID3v2 タグの圧縮及び CRC-32 の付与

ID3v2 タグは圧縮によるサイズダウンと CRC-32 情報の付与が可能ですが、これらの情報は ID3v2 タグの存在自体を一度消して(ID3v2 タグを使用しないオプションにして情報を更新してから使用するオプションにして更新する)から付け直さないと反映されません。また、圧縮に関してはタグに画像を付与する場合以外は殆ど効果がありません。 EasyTAG においてタグに画像を付与する場合、 ID3v2 タグへの画像の付与は付与した時点で画像の為にタグのサイズが拡張され、これは画像を取り除いても元のサイズに戻りません。この場合も IDv2 タグの存在自体を消去して付け直す必要があります。


文字化けする日本語ファイルの読み込み

日本語のファイルが読み込み時に文字化けする場合は「ID3 タグ読み込み時の文字セット」オプションを有効にします。読み込み時の文字エンコードを Shift_JIS にしておけば殆どの日本語ファイルに対応できるはずです。また、 EasyTAG は文字エンコードを自動的に指定したものに変換してくれる機能を備えているので、文字化けに困っている場合は重宝します(下記「2. 基本的なタグ付与の方法」の「編集内容を保存」を参照)。


・CDDB の設定

EasyTAG は CDDB の情報を利用してタグを付ける機能がありますが、あまり便利に使えるものではありません。 EasyTAG においては手動検索での情報の検索と付与が便利に使えます。手動検索に使用する CDDB は「www.gnudb.org」が機能しています。 CDDB からの情報取得のやり方に関しては後述します。


2. 基本的なタグ付与の方法

ツリー構造からディレクトリを指定するとそのディレクトリ下に存在する対応するオーディオファイルがリストアップされます。タグ情報を付与したいファイルを選択すればそのファイルのファイル名とタグ情報を編集出来ます。

選択

タグを編集するにはまず編集したいファイルを選択する必要があります。ディレクトリ下の対応ファイル一覧(画面中央)を左シングルクリックで一つのファイルを選択、左ダブルクリックでそのファイルがあるディレクトリを一括指定、右クリックから「全ファイルの選択」でリストにあるすべてを選択が出来ます。特定のファイルのみを指定するには通常のファイル選択同様に Ctrl キーを押しながら左クリックで可能です。


入力・適用

ファイルのタグ情報は一つ一つ丁寧に入力する事も出来ますが、それだと非常に面倒です。オーディオファイルの情報には「アーティスト」や「アルバム」といった共通する項目が多く存在する為、それを柔軟かつ簡単に適用する「指定したファイルに指定した情報を適用する」為の機能が便利に使えます。タグ情報を編集する項目には情報を入力出来るボックスの横に四角いボタンがあります。このボタンをクリックすると選択している全てのファイルに入力している情報が付与されます。


例えば、アーティスト情報を全てのファイルに入力したい場合は、全てのファイルを選択してアーティストの項目に情報を入力し、横のボタンを押してやれば全てのファイルにそのアーティスト情報が適用されます。一つのファイルのタグ情報を元に複数のファイルにそれを適用したい場合は、元となる一つのファイルを選択した後に適用したいファイルを選択してボタンを押すと適用出来ます。

「トラック」情報は「トラックナンバー/トラック総数」で付与でき、トラックナンバーの「#」ボタンを押すとカレントディレクトリでのそのファイルの並び順がそのままトラックナンバーとして入力され、トラック総数の「#」を押すとカレントディレクトリに存在する音声ファイルの総数が入力される便利な機能も備えています。これも他の項目同様に横のボタンを押すとその情報を選択しているトラックに適用できます。

編集内容を保存

情報を編集したファイルはファイルブラウザにおいてデフォルトで赤色で表示され、編集されたファイルである事が視覚的に表示されます。編集が完了し、編集内容をファイルに反映させるにはメニューの「設定」の下にある「ファイルを保存」のボタンを押します。編集内容は「保存」するまでファイルの情報として反映されないので、「編集後に保存」する必要があります。特定のファイルを選択していないとリストのファイル全て、選択している場合は選択したファイルに保存が適用されます。


何も編集していないのにフォルダ内のファイルが赤く表示され、編集内容を適用するように訊かれる場合はそのファイルのタグの文字エンコードを自動で指定したものに変換してくれた場合です。この場合は適用すると文字エンコードが指定したものへと変更されます。

3. スキャナを使用するタグ編集

EasyTAG の真価は備わっている強力なタグ編集機能である「スキャナ」を使用する事で発揮されます。スキャナの基本的な機能は「ファイル名からのタグの付与」、「タグからのファイル名とフォルダの変更」、「タグフィールドの編集」の3つで、これらの組み合わせによって柔軟で便利なタグ編集が可能です。それぞれの機能と使用例を紹介したいと思います。


・タグを付与する

ファイル名からタグを付与します。ファイル名からマスクを使用してタグ要素を抽出します。例えば、この画像でのファイル名は、「アーティスト - アルバム - トラックナンバー - トラック名」となっています。


このファイル名からタグ要素を抽出するにはマスクを「%a - %b - %n - %t」と入力するとファイル名にある限りの全ての情報をタグに適用できます。タグの抽出は凡例とその組み合わせ(マスク・コード)で行い、その組み合わせによってファイル名から抽出される結果はコードの下に表示してくれます。ファイル名から抽出する情報はマスク・コードを編集する事で対応します。あらかじめ一通りのファイル名の組み合わせに対応するプリセット(マスク・エディタ)も用意されており、自分が定義したマスクコードもそこに保存出来るようになっています。


 適切なコードを入力したら、スキャナを実行します。この例の場合では全てが同じ形式のファイル名となっているので、同じコードで全てのファイルに適用出来ます。実行するとタグにコードに基づいたそれぞれの情報が適用されます。


・ファイル名とフォルダ名の変更

ファイル名とフォルダ名の変更は、タグ情報を元にして行われます。このタグ情報は編集中で保存されていない場合でも参照出来ます。先ほど付けたタグ情報を元にファイル名及びディレクトリ構造を変更してみます。「タグを付与する」やり方と同じでマスク・コードを使用して情報を抽出しますが、参照される情報はタグ情報からになります。

この例ではアーティストフォルダの直下にオーディオファイルが存在している状態を仮定とし、このスキャナ機能でファイル名の変更と同時にディレクトリの構造も整理します。入力されているタグ情報を元にコードに「%y - %b/%n - %t」と定義しました。この定義はアーティストフォルダ下に「リリース年 - アルバム名」のフォルダを作成し、その下のファイル名を「トラックナンバー - トラック」にします。ディレクトリ構造を定義する場合は Linux のディレクトリ構造を表す「/」を使用します。スキャナを実行した場合の結果も「タグを付与する」場合と同様にコードの下に表示してくれます。


スキャナを実行したら保存。変更するか尋ねられるので全て変更するように指定して保存します。ディレクトリ構造の変化を EasyTAG に認識させるには「ツリー」で変更したフォルダを右クリックし、「ツリーを更新」します。

なお、この「ツリー」表示は「保存」の右のボタンを押すとメディアプレイヤーのようにタグ情報に準拠した「アーティスト」及びその「アルバム」、「アルバム内のファイル数」を表示するモードに切り替える事が出来ます。ライブラリの状態をタグに基づいて把握出来る為、タグの編集時の入力ミスや情報の抜け落ち等の細かい修正や確認がやり易くなります。


・フィールドを編集する

「フィールドを編集する」スキャン機能は、選択したファイルのタグ情報を編集する機能です。指定したオプションを指定したタグフィールド(「フィールドの選択」においてボタンが押されている状態のタグ)に適用します。


このスキャン機能はタグの最適化に利用し、マスクを使用するスキャンの補助をします。

「ファイル名とフォルダ名の変更」の例で変更したファイル名は、整理されてはいますがスペースがあるのでコマンドラインで扱い辛いファイル名となっています。 Windows では気になりません(Linux Desktop でも今のご時世は然程気になりません)が、この機能の例としてコマンドラインでの入力に対応出来るようにスペースをアンダースコアに置換してみたいと思います。適用する範囲は「ファイル名」だけでよいので、ファイル名のみを指定してスキャンします。

スキャン後ファイル名のスペースがアンダーラインに置換されます。「保存」すればファイル名が変更されます。


フォルダ名もアンダースコアに置換する場合、スキャナ機能だけで実現するにはやや複雑や工程が必要になります。フォルダ名は「ツリー」から直接フォルダを右クリックして「フォルダ名の変更」で直接編集する事が可能です。


・CDDB からタグ情報の付与

MusicBrainz を利用する CDDB からの自動タグ情報付与機能が EasyTAG には備わってはいるのですが、この機能は Picard が本家です。

MusicBrainz Picard

EasyTag では「手動検索による CDDB からのタグ情報の付与」をします。手動検索では検索対象として単語を入力します。「アーティスト名」か「アルバム名」が効率的です。アーティスト名はアーティストによっては膨大な情報を検出し、その取得に非常に時間がかかる事がある為、そのような場合は検索対象やアルバム名との組み合わせで検索対象を絞り込みます。

マッチする検索結果は、複数の似たような検索結果がある場合は ID で一致させるのが理想的ですが、「トラック数(ボーナストラックの有無等の要素)」で絞り込む事が出来ます。トラック名やトラックナンバーが解らない場合は「トラックの再生時間」からある程度推測する事が可能です。適用する対象が検索結果のトラック順と一致しない場合は検索結果を「並び替えて」適用する事で対処可能です。