x264ライブラリーのバージョン

ネットブックウォークマンで見る動画をmp4(AVC)にエンコードするパラメーターをちょっと追い込んでみようと思ったが、出だしから結構難物の模様。

vlcffmpegなど私の使っているツールは軒並みライブラリーとしてx264を使っている。x264はずいぶん頻繁に更新されているのでバージョンがわからないことにはかっちりした話ができない。

ところが、ライブラリーそのものにはバージョン情報は含まれていない。ライブラリーを構築したときに作成されるx264というドライバーコマンドに埋め込まれている。FreeBSD-7.2で構築した最新版(2009年9月21日付け)ではこんな感じで確認できる。

% ./x264 --version
x264 0.75.1259M dd026f2
built on Sep 21 2009, gcc: 4.2.1 20070719  [FreeBSD]

先頭の「0.」はあまり意味がない。「75」はAPIのバージョンで、これが違うと互換性がなくなる。「1259」がバージョン番号。ローカルで変更すると「+12」みたいにローカルのバージョン番号がつく。「M」はソースコードを変更中の場合につくようだが、まああまり気にしなくてよい。最後の7桁の16進数は元ファイルのおおまかな識別子。

というわけで、コマンドx264が入ってさえいればバージョンを確認できるはず。ところがFreeBSD用のpackage(コンパイル済みパック)に入っているやつ(2008年12月18日付け)だと、変。

% x264 --version
x264 0.65.x
built on Jul 20 2009, gcc: 4.2.1 20070719  [FreeBSD]

「xって何だよ」と思って調べてみた。構築時にはgit(x264のバージョン管理システム)から情報を取り出すのだが、gitがなくて(これはpackageを作ったマシンの環境の問題)うまくいかないときはxでごまかしているようだ。

しょうがないのでports(packageを作るためのキット)からコンパイルしなおしてみた。するともっと変。

% ./x264 --version
x264 0.65.0+1057 5f8a149
built on Sep 21 2009, gcc: 4.2.1 20070719  [FreeBSD]

もとの配布物に入っているgitの情報がおかしいらしく、エラーが出ているのを強行に構築してしまうのでこんなことになる。たぶん「x264 0.65.1057M」あたりになるのが正解。

Windows用のvlcにはそもそもx264(コマンドのほう)が入ってない。何とかならないものかとソースコードを眺めていたら、エンコードしたときの出力にバージョン情報を埋め込んでいることがわかった。というわけでvlcで適当な動画をmp4にエンコードして、その出力から文字列を探してみると、あった。

x264 - core 68 r1185M 2956905

元のライブラリー(libx264_plugin.dll)からきているのだが、情報がばらけているので出力を見るのが確実。

vlcデコーダーとしてしか使わないので関係ないといえば関係ないのだが、このへんの情報はきちんとおさえておくにこしたことはない。