プログラミング-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 -lswscaleOBJS = 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を指定することによる効果もまだ分かっていません。。)