x264ライブラリーのバージョン
ネットブックやウォークマンで見る動画をmp4(AVC)にエンコードするパラメーターをちょっと追い込んでみようと思ったが、出だしから結構難物の模様。
vlcやffmpegなど私の使っているツールは軒並みライブラリーとして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はデコーダーとしてしか使わないので関係ないといえば関係ないのだが、このへんの情報はきちんとおさえておくにこしたことはない。