じかんのむだ

読んで時間の無駄にならないようなブログを目指して。(Amazonのアソシエイトとして、バリバリ夕張Pは適格販売により収入を得ています。また、楽天アフィリエイトをやっています)

ffmpegのWindows版バイナリをUbuntuで作る遊び

本当に「遊び」です。公式でナイトリービルドまでありますからね。どうもばりっぴです。

ということでffmpegLinuxディストリビューションであるところのUbuntuWindowsで動く実行ファイルにクロスビルドしてみました。

クロスビルドってなんだって話ですが、プログラムソースを用いてとあるOSから他のOSの実行形式(Windowsならexeファイルなど)を作る行為を指します。今回であればLinuxからWindows版のファイルを作るのでクロスビルドなわけです。クロスビルドはCPUのアーキテクチャも超えられて、IntelのCPUでラズベリーパイで動く実行形式を作ったりもできます。ラズベリーパイが非力だったころはよくIntelやらAMDのCPUを使ったパソコン上でクロスビルドをやっていたらしいです。今はだいぶラズベリーパイもCPUが強くなったので通常のビルドであればラズベリーパイ上で行います。

ffmpegもなんだって方もいらっしゃるかもしれません。ffmpegは、フリーソフト(最近は自由ソフトと呼ばれることも多くなりました)のメディアデコーダー、エンコーダーです。昔、CDをリッピングして「午後のこ~だ」とか「LAME」でmp3にしてた人もいるかと思うのですが、それがmp3エンコーダーで、ffmpegにもLAMEが取り込まれています。また、mp4動画を作る際に必要なエンコーダもffmpegに取り込まれています。世の中に存在する、メディアデコーダーとかメディアエンコーダーはこのffmpegの中に取り込まれていると言っても過言ではありません(公式で配布している全部入りのffmpegだと)。ということで依存関係がかなり複雑なので普通にコンパイルするだけでもかなりめんどうです。

 

そんなわけで、今回はffmpeg-windows-build-helpersというものを用いてクロスビルドを行いました。

github.com

こちらです。こういう便利スクリプトなどは、私が知る頃には古くて動かないことが多いのですが、多分に漏れずこれもうまく動きませんでした。えー…。

具体的に書くと、vamp-sdkとかいうのとかがリンク切れを起こし、libblurayがビルドできなくなっていました。全部入りのffmpegを作らなければこれらを踏むことはない、とはおもうのですが、全部入りのを作りたかったので踏みまくってトライアンドエラーでやってみました。やって、シェルスクリプトを少し書き換えたのが、

github.com

になります。nonfree、use-gplのフラグがたっている64bit版ffmpegを作るだけならこれで完走すると思います。だめならプルリクを出して欲しいです。と、forkしてみましたが、ほかにもforkしている人はいるので、全部がビルドできるforkもあるかもしれません。

見識を広めるためだけにやってみましたが、なかなか面白かったです。ばりっぴでした。