HPC/並列プログラミングポータルでは、HPC(High Performance Computing)プログラミングや並列プログラミングに関する情報を集積・発信しています。 |
[記事一覧を見る]
x264は、GPLで提供されているH.264エンコーダだ。WindowsやMac OS X、Linux/UNIXで動作し、またエンコーダエンジンとしてさまざまなアプリケーションで利用されている。
x264の公式サイトではソースコードの開発版スナップショットのみが配布されており、x264のWindows向けバイナリはhttp://x264.nl/にて配布されている。また、Gitによるソースコードの取得も可能だ。
x264の配布ソースコードには、「build\win32」ディレクトリ以下にVisual Studioのプロジェクトファイルが含まれている。こちらをVisual StudioのIDEで開き、コンパイル設定を行えば良い。
なお、筆者が試したバージョンのソースコードでは、「C99」と呼ばれる、1999年に策定されたCの新標準規格内で採用された機能が用いられている。そのため、C99に対応していないVisual C++ではそのままではコンパイルできなかった。インテル コンパイラーでは、「/Qstd=c99」オプションを使用することでC99サポートを有効にでき、問題なくコンパイルが可能である。
また、x264ではSSE2を利用するためのアセンブラで書かれたコードが含まれているのだが、このコードはGCC向けに記述されており、そのままではインテル コンパイラーで利用できない。そのため、Visual C++やインテル コンパイラーでコンパイルしたバイナリは、GCCでコンパイルしたバイナリよりもパフォーマンスが低下してしまう問題がある。
そのほか、コンパイルを行うために加えた修正点は以下のとおりだ。
Linux環境でのx264のコンパイルでは、configureスクリプトを使用してコンパイル設定を行っている。そのため、次のようにconfigureを実行するだけでコンパイルが可能だ。
$ CC=icc CFLAGS="<コンパイルオプション>" ./configure
パフォーマンス比較には解像度720×480、約7秒の動画ファイルを用い、このファイルをデフォルト設定でエンコードした場合のフレームレートを比較した。結果は下記の表10のとおりだ。また、コンパイルオプションについてはデフォルトのものを用いている。結果を見ると、インテル コンパイラーで作成したx264のほうが、若干ではあるがフレームレートが高くなっている。
コンパイラ | 平均フレームレート |
---|---|
インテル コンパイラー | 63.58fps |
GCC | 61.98fps |
現在よく使われている音声圧縮コーデックの1つに「AAC」がある。AACは地上デジタル放送や、アップルのiTunesのデフォルトコーデックとして採用されているコーデックで、低いビットレートでも比較的高音質なのが特徴だ。AAC形式での音声圧縮を行うAACエンコーダはいくつか存在するが、オープンソースで提供されているものとして「FAAC」がある。
FAACはコマンドラインツールおよびライブラリとして提供されているが、オープンソースで提供されているためほかの動画/音声エンコーダツールなどでも多く採用されている。
FAACのソースコードは、ダウンロードページから入手可能だ。本記事では、2009年2月11日に公開された「faac-1.28.zip」を使用した。このソースアーカイブを展開すると、「frontend」ディレクトリ以下にVisual Studio向けのプロジェクトファイル「faac.sln」が含まれているので、これをVisual Studioで開いてコンパイル設定を行えば良い。
約4分のWAVE形式音声ファイルをFAACのデフォルト設定でエンコードし、エンコードが完了するまでの時間を測定した。結果は次の表11のとおりだ。FAACについてもLAMEと同様、インテル コンパイラーを使用することでパフォーマンスの向上が確認できる。
コンパイラ/コンパイルオプション | エンコード時間 |
---|---|
Visual C++(/O2) | 10.7秒 |
インテル コンパイラー(/O3、/Qip) | 8.8秒 |
[ページ情報]
更新日時: 2009-11-18 20:39:13, 更新者: hiromichi-m
[権限]
表示:無制限, 編集:ログインユーザ, 削除/設定:メンバー