FFmpeg APIで、さまざまな動画を操る - 前編:CodeZine を Windows(Mingw/MSYS) で試してみた


対象の環境に Windows が含まれていないので、Mingw/MSYS な環境でできるのか、試してみました。

ソースコードを取得する

$ svn co -r 13235 svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

ffmpeg ビルド & インストールをする

$ ./configure --cc=gcc-sjlj --enable-shared --enable-swscale --enable-gpl --enable-memalign-hack
$ mingw32-make
$ mingw32-make install

サンプルをビルドする

Makefileffmpeg をインストールしたパスを追加する。
デフォルトは "/usr/local" にインストールされるので、インクルードファイルとライブラリに対してパスを通す。

CC = gcc
CFLAGS  = -O4 -Wall -I/usr/local/include
LDFLAGS =
LDLIBS  = -L/usr/local/bin -lavutil -lavformat -lavcodec -lswscale

OBJS = make_thumb.o

make_thumb: $(OBJS)
	$(CC) -o $@ $(LDFLAGS) $(OBJS) $(LDLIBS)

サンプルを実行する

$ ./make_thumb sample.mov sample.jpg


これでサンプルが Windows でも実行できることを確認できた。

TIPS

今回エラーが発生した箇所とその対応を残しておく。

ffmpeg の make が失敗する

make が古いようなので、Mingw にインストールされている mingw32-make を使う。
なければ Mingw サイトからダウンロードして、インストールする。

make: *** No rule to make target `libavdevice/avdevice.dll', needed by `all'.  Stop.

サンプルをビルドしたときに "libswscale/swscale.h" が見つからない

"./configure" 実行時のオプションに "--enable-swscale --enable-gpl" が不足していた。

gcc -O4 -Wall -I/usr/local/include   -c -o make_thumb.o make_thumb.c
make_thumb.c:4:32: libswscale/swscale.h: No such file or directory
make_thumb.c: In function `load_frame':
make_thumb.c:124: warning: implicit declaration of function `sws_getContext'
make_thumb.c:128: warning: initialization makes pointer from integer without a cast
make_thumb.c:131: warning: implicit declaration of function `sws_scale'
make_thumb.c:136: warning: implicit declaration of function `sws_freeContext'
make: *** [make_thumb.o] Error 1

サンプルを実行したときにライブラリのエラーメッセージが出力される

Mingw 用の gcc 4.2 があるのでサイトからダウンロードして、インストールし、ffmpeg を作りなおす。

$ ./make_thumb sample.mov sample.jpg
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.