Windows環境でffmpegのAPIをC言語から叩きたい。ということで、ffmpegをソースからビルドすることにした。
以下のサイトを参考にしながら、手始めに外部のライブラリを取り込まずに最小構成でのビルドで。
FFmpeg APIで、さまざまな動画を操る – 前編:CodeZine
FFmpeg APIで、さまざまな動画を操る – 前編:CodeZine を Windows(Mingw/MSYS) で試してみた – A More Beautiful day
MinGWのインストール
Automated MinGW Installerを使うと楽かも。
Automated MinGW Installer
ただし、私が使ったときはインストールオプションで”MinGW make”を選択するとダウンロードに失敗した。インストーラが感知しているバージョンと、実際にサーバにあるバージョンが異なるようだ。
インストーラ起動後、インストーラを起動させたまま、同じフォルダに作られるmingw.iniの内容を書き換えると上手くインストールできる。
[current]
make=mingw32-make-3.81-20080326-2.tar.gz|727
↓
make=mingw32-make-3.81-20080326-3.tar.gz|727
w32apiのインストール
標準でインストールされたw32apiはバージョンが古く、このままではffmepgのconfigureで弾かれる(3.13以上が必要)ので、w32apiの最新版を入れる。MinGWをインストールしたディレクトリに上書き解凍すればOK。
w32api-3.13-mingw32-dev.tar.gz
gcc4.2.1のインストール
gcc3.4.5でもビルドは通るし、exeも生成されるのだけど、いざ実行させてみると
Compiler did not align stack variables. Libavcodec has been miscompiled
and may be very slow or crash. This is not a bug in libavcodec,
but in the compiler. You may try recompiling using gcc >= 4.2.
Do not report crashes to FFmpeg developers.
とメッセージが出る。これでも特に動作はするのだけど、この警告メッセージが気になるのでgcc4.2.1を入れる。
これを入れると、gcc4.2.1は”gcc-sjlj”という名前で入るので、
- gccコマンド = 3.4.5
- gcc-sjljコマンド = 4.2.1
と使い分けができる。
ffmpegのソースを取得
今回は2009-03-27のnightlyを使った。リビジョンはr18200。これを適当なディレクトリに解凍する。
configureの前準備
configureを行う前に、スクリプトの中で使われているprコマンドを入れる必要がある。
参考にしたサイトはこちら↓。coreutilsを入れる。
猫科研究所(felid labo) – 今更MinGW(6)
configure
ffmpegのソースディレクトリに移動して、configure。まずは、
./configure --help
として、どのオプションが指定可能かを先に見ておいたほうがよい。
ネットで検索して出てくる記事(1〜2年前くらい)でのconfigureのオプションは、最近のffmpegのバージョンでは使えなくなっていることが多いので。
gcc4.2.1を使うようにするのと、最低限必要らしい”–enable-memalign-hack”、ライブラリを生成するための”–enable-shared”を付けてconfigure。
./configure --cc=gcc-sjlj --enable-memalign-hack --enable-shared
ビルド
おそらくconfigureはエラー無く終了するはずなので、make。
make完了後には、ffmpeg.exeと、libavformat、libavcodec、libswscale、libavutil、libavdeviceのそれぞれのフォルダに、.defと.dllファイルが生成されるはず。
ビルドして生成されたffmpegのバージョンは以下の通り
FFmpeg version SVN-r18200-snapshot, Copyright (c) 2000-2009 Fabrice Bellard, et al. configuration: --enable-shared --enable-memalign-hack --cc=gcc-sjlj libavutil 50. 2. 0 / 50. 2. 0 libavcodec 52.22. 3 / 52.22. 3 libavformat 52.32. 0 / 52.32. 0 libavdevice 52. 1. 0 / 52. 1. 0 libswscale 0. 7. 1 / 0. 7. 1 built on Mar 28 2009 02:39:23, gcc: 4.2.1-sjlj (mingw32-2)
補足
ただしここまでの手順だと、.def,.dllはできても.libが生成されない。
.defと.dllだと、プログラムから使うときにGetProcAddress()しなければならず、少し面倒。なので.libにしてリンクしてしまったほうが楽。
.libも作られるようにするには、VisualStudio2008などをインストールしたときに入る、libコマンドへのパスが通っている必要がある。
なのでVIsualStudio向けの環境変数設定を行うために、vcvarsall.batを実行しそのコマンドラインからmsysを起動してffmpegのビルドを行えばOK。
ffmpegのmake中に
Microsoft (R) Library Manager Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved. ライブラリ libavdevice/avdevice-52.lib とオブジェクト libavdevice/avdevice-52.exp を作成中
と表示されていたらOK。
関連する記事:
- Subversionの次版はGitのように分散リポジトリに対応? Subversion 1.7 to enable Git-like features Subversionの次のメジャーバージョンである1.7について少し触れてある。 ちゃんと文章を読めたわけではないけど、分散リポジトリやオフラインコミットのようなGitを意識した機能が追加されるようだ。 既に使用者が多いSVNに分散の概念が入ってくると、開発スタイルも変化するかもね。新しくMercurialやGi......
- GentooでPHP5を使う PHPとAmazon Web Serice(AWS/ECS)を使ってちょっと遊んでいる流れで、この自宅サーバにPHP5をインストールしようとしたのだけど、いろいろ手こずったのでメモ。 ★PHP4はあらかじめアンインストールする ここのサイトに書いてある手順で基本的には大丈夫。 ★GentooでPHP5はマスクされてる ACCEPT_KEYWORDS="~x86"が必要。 apache2もマスク状態......
- OSXにpdnsdを入れる エントリするほど難しくは無いんだけど。 ソースをダウンロードしてきて、configure,make,make installで良い。 あとはOSXの起動時にデーモンとして自動起動させるだけなんだけど、/etc/init.d/ なんてものは無い。OSXの場合はlaunchdというものらしいんだけど、その設定をGUIで行うツールがLingon。MAC REVIEWというサイトで見つけた。 これで設定フ......
- gonzui@cygwin ソースコード検索エンジンのgonzuiをcygwin上にインストール。 途中、bdbとかのからみでハマったりしてようやくインストール完了。 ちなみにgonzuiのmakeで gcc -shared -s -Wl,--enable-auto-import,--export-all -o c.so c.o...
- 新しい: 情報処理試験(エンベデッド)の勉強
- 古い: ブルートレインの名残
コメント:0
トラックバック:1
- この記事のトラックバック URL
- http://www.swingingblue.net/mt/archives/002420.html/trackback
- トラックバックの送信元リスト
- ffmpegをMinGWでビルド(Windowsで使えるdll,libも作る) - きままな日記帳 より
- trackback - i43z.com より 2009/05/16
ffmpeg/mplayer/mencoder for Windows 動画や音声のエンコードで有名なOSS(オープンソースソフトウェア)、ffmpeg、mplayer、mencoderをWIndows環境でビルドする方法、使… …
