プログラミング-ffmpeg導入・解決編

やっと, http://codezine.jp/article/detail/2444?p=1
のサンプルが使えるようになりました。

[環境]
Mingw・MSYSを利用しました。
さらに, gcc4.2を導入しました。(サンプルの実行エラーの回避に必要)
(導入方法は8/21の日記を参照)
(その他, 試行錯誤して色々導入したが,
 おそらく必要ないと思います:導入したものを忘れました。。)


[ffmpegのインストール]

  • svnは最新バージョン, 以下の出力で示します。

--enable-memalign-hackと--enable-shaed(サンプルのmakefileに合わせた)のみあれば
他のオプションは不必要かもしれません。

FFmpeg version SVN-r19750, Copyright (c) 2000-2009 Fabrice Bellard, et al.
configuration: --enable-memalign-hack --extra-cflags=-fno-common --enable-sha
ed --enable-gpl
libavutil 50. 3. 0 / 50. 3. 0
libavcodec 52.34. 0 / 52.34. 0
libavformat 52.38. 0 / 52.38. 0
libavdevice 52. 2. 0 / 52. 2. 0
libswscale 0. 7. 1 / 0. 7. 1
built on Sep 1 2009 19:39:38, gcc: 4.2.1-sjlj (mingw32-2)
At least one output file must be specified

  • makeのバージョンは3.81

[サンプルのmake]
makefileの内容は以下の通りです。

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

OBJS = make_thumb.o

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

これで, make_thumb.exeが生成されます。

[サンプルコードの修正]
make_thumb.exeを実行すると以下のエラーがでる。

$ ./make_thumb.exe sample.mov sample.jpg
swScaler: Exactly one scaler algorithm must be chosen

ffmpeg.cとmake_thumb.cを比べたところ, make_thumb.cの127行目辺りの
sws_getContext()の第7引数がおかしいみたいでした。
ffmpeg.cだとsws_flagsやsws_optsが関連?)

そこで, sws_getContext()の第7引数を以下のように変更し, 再度makeした
ところ無事に実行できました。

struct SwsContext *swsCtx = sws_getContext(
codecCtx->width, codecCtx->height, codecCtx->pix_fmt,
PIC_WIDTH , PIC_HEIGHT , PIC_FORMAT,
SWS_BICUBIC/*0から変更*/,
NULL, NULL, NULL);

今回用いたSWS_BICBICの他にも指定できる定数があるので, 調査する必要がありそうです。
(SWS_BICBICを指定することによる効果もまだ分かっていません。。)