Show page source of インテル_コンパイラー_1000本ノックプロジェクト_p5 #49426

[[PageNavi(NavigationList)]]


=== H.264エンコーダ「x264」 ===
 [http://www.videolan.org/developers/x264.html x264]は、GPLで提供されているH.264エンコーダだ。WindowsやMac OS X、Linux/UNIXで動作し、またエンコーダエンジンとしてさまざまなアプリケーションで利用されている。

 x264の公式サイトではソースコードの開発版スナップショットのみが配布されており、x264のWindows向けバイナリは[http://x264.nl/ http://x264.nl/]にて配布されている。また、Gitによるソースコードの取得も可能だ。

==== Windows環境でのコンパイル ====
 x264の配布ソースコードには、「build\win32」ディレクトリ以下にVisual Studioのプロジェクトファイルが含まれている。こちらをVisual StudioのIDEで開き、コンパイル設定を行えば良い。

 なお、筆者が試したバージョンのソースコードでは、「C99」と呼ばれる、1999年に策定されたCの新標準規格内で採用された機能が用いられている。そのため、C99に対応していないVisual C++ではそのままではコンパイルできなかった。インテル コンパイラーでは、「/Qstd=c99」オプションを使用することでC99サポートを有効にでき、問題なくコンパイルが可能である。

 また、x264ではSSE2を利用するためのアセンブラで書かれたコードが含まれているのだが、このコードはGCC向けに記述されており、そのままではインテル コンパイラーで利用できない。そのため、Visual C++やインテル コンパイラーでコンパイルしたバイナリは、GCCでコンパイルしたバイナリよりもパフォーマンスが低下してしまう問題がある。

 そのほか、コンパイルを行うために加えた修正点は以下のとおりだ。

 * muxsers.cの296行目「fprintf(stderr, "Bad header magic (%"PRIx32"= %s)\n",」を「fprintf(stderr, "Bad header magic (\"PRIx32\"= %s)\n",」のように修正
 * encoder\looahead.cがプロジェクトファイルとして登録されていなかったので、このファイルを「libx264」プロジェクトに追加

==== Linux環境でのコンパイル ====
 Linux環境でのx264のコンパイルでは、configureスクリプトを使用してコンパイル設定を行っている。そのため、次のようにconfigureを実行するだけでコンパイルが可能だ。

{{{
$ CC=icc CFLAGS="<コンパイルオプション>" ./configure
}}}

==== パフォーマンス比較(Linux版) ====
 パフォーマンス比較には解像度720×480、約7秒の動画ファイルを用い、このファイルをデフォルト設定でエンコードした場合のフレームレートを比較した。結果は下記の'''表10'''のとおりだ。また、コンパイルオプションについてはデフォルトのものを用いている。結果を見ると、インテル コンパイラーで作成したx264のほうが、若干ではあるがフレームレートが高くなっている。

{{{ html
<h6>表10 x264のパフォーマンス比較</h6>
<table class="wikitable" border="1">

<tr><th>コンパイラ</th><th>平均フレームレート</th></tr>
<tr><td>インテル コンパイラー</td><td>63.58fps</td></tr>
<tr><td>GCC</td><td>61.98fps</td></tr>

</table>
}}}
=== AACエンコーダ「FAAC」 ===
 現在よく使われている音声圧縮コーデックの1つに「AAC」がある。AACは地上デジタル放送や、アップルのiTunesのデフォルトコーデックとして採用されているコーデックで、低いビットレートでも比較的高音質なのが特徴だ。AAC形式での音声圧縮を行うAACエンコーダはいくつか存在するが、オープンソースで提供されているものとして「[http://www.audiocoding.com/ FAAC]」がある。

 FAACはコマンドラインツールおよびライブラリとして提供されているが、オープンソースで提供されているためほかの動画/音声エンコーダツールなどでも多く採用されている。

==== FAACのコンパイル(Windows環境) ====
 FAACのソースコードは、[http://sourceforge.jp/projects/sfnet_faac/releases/ ダウンロードページ]から入手可能だ。本記事では、2009年2月11日に公開された「faac-1.28.zip」を使用した。このソースアーカイブを展開すると、「frontend」ディレクトリ以下にVisual Studio向けのプロジェクトファイル「faac.sln」が含まれているので、これをVisual Studioで開いてコンパイル設定を行えば良い。

==== パフォーマンス比較 ====
 約4分のWAVE形式音声ファイルをFAACのデフォルト設定でエンコードし、エンコードが完了するまでの時間を測定した。結果は次の'''表11'''のとおりだ。FAACについてもLAMEと同様、インテル コンパイラーを使用することでパフォーマンスの向上が確認できる。

{{{ html
<h6>表11 FAACのパフォーマンス比較</h6>
<table class="wikitable" border="1">

<tr><th>コンパイラ/コンパイルオプション</th><th>エンコード時間</th></tr>
<tr><td>Visual C++(/O2)</td><td>10.7秒</td></tr>
<tr><td>インテル コンパイラー(/O3、/Qip)</td><td>8.8秒</td></tr>

</table>
}}}


[[PageNavi(NavigationList)]]