プレゼンの用意をしていると,連続画像から動画をつくりたいということがある.windowsではadobe premireなどの各種ソフトウェアによって簡単に実現できるが,linuxや各種unix上でとなると残念ながら選択肢が多いとはいえないし,そのようなノウハウを紹介している文章も現時点では少ない.
そこで現時点で使ったことのある,ムービー作成用のツールの使い方をメモしておくことにする.
簡単に言うと,
連続画像(連番画像)をムービーにまとめる
となる.
mencoderはWindows版/ Linux版ともに存在する.mpeg_encodeはUnix版のみ(のはず).
mplayer[2]にはmencoder[3]というエンコーダが含まれている.これを使うと,mpeg1だけでなくmpeg2, mpeg4(divx), wmvといった各種フォーマットでエンコードできる.特に理由がない場合は,Windows XPで追加コーデックを入れることなく再生できるmsmpeg4v2かwmvでエンコードすればいいのではないだろうか.*.jpgからmsmpeg4v2のムービーを作るには
$ mencoder "mf://*.jpg" -mf fps=25 -ovc lavc -lavcopts \
vcodec=msmpeg4v2 -o test.avi
とする(fpsは適宜変更すること).
またtest.mpgを作るなら
$ mencoder "mf://*.jpg" -mf fps=25 -ovc lavc -lavcopts \
vcodec=mpeg1video -o test.mpg -of mpeg
とし,mpeg4 (divx)なら
$ mencoder "mf://*.jpg" -mf fps=25 -ovc lavc -lavcopts \
vcodec=mpeg4 -o test.avi
とする.2-passエンコードをするには
$ rm -f divx2pass.log
$ mencoder "mf://*.jpg" -mf fps=25 -ovc lavc -lavcopts \
vcodec=mpeg4:vpass=1 -o test.avi
$ mencoder "mf://*.jpg" -mf fps=25 -ovc lavc -lavcopts \
vcodec=mpeg4:vpass=2 -o test.avi
とする.これらを行うにはlibavcodecが必要であり,
$ mencoder -ovc help
としたときに
Available codecs: ... lavc - using libavcodec codecs - best quality!
という行がないようなら,再コンパイルが必要であろう.なおjpeg以外にもpngなどにも対応しているが,コンパイル時のconfigureに依存する.
バージョンにもよるが,場合によってはPowerpointに張り付けたときに再生されない(画面が黒いまま)になる場合がある.Windows Media Playerオブジェクトを挿入し,それ経由で再生すると解決する場合もあるが,以下のようにmspmeg4v2かwmvでエンコードしておくと確実であろう.
$ mencoder "mf://*.jpg" -mf fps=25 -ovc lavc -lavcopts \
vcodec=msmpeg4v2 -o test.avi
$ mencoder "mf://*.jpg" -mf fps=25 -ovc lavc -lavcopts \
vcodec=wmv2 -o test.wmv
ただしwmv2でエンコードした場合,Windows Media Playerで再生しようとすると「拡張子があっていない」(本来はaviファイルなので)という警告が出るが,拡張子をwmvにしておかないとPowerpointではおそらくうまく再生されない.
Berkeley MPEG Tools[1](debianパッケージ名はucbmpeg)にはmpeg_encodeという名前のMpeg1エンコーダが含まれている.manページにあるように,このソフトはエンコード毎に設定ファイルを用意する必要がある.この設定ファイルには,
入力ファイル名.これはワイルドカードを組み合わせたファイルの列挙で指定するため,
必ずしも連番のファイル名で用意する必要はない
といえる.
などが含まれる.
なおフレームレートや画像間の時間といったものを指定するには,同じファイルを連続して指定すればよい(デフォルトでは30fps,つまり各画像は1/30秒持続する).
例えば./input/frame_0000.ppm〜./input/frame_0100.ppmから./test.mpgを作るとすると,
# Simple parameter file OUTPUT ./test.mpg INPUT_DIR ./input/ INPUT_CONVERT * INPUT frame_*.ppm [0000-0100] END_INPUT GOP_SIZE 15 SLICES_PER_FRAME 1 BASE_FILE_FORMAT PPM PATTERN IBBPBBPBBPBBPBBPBBPBBP # quality parameters IQSCALE 8 PQSCALE 10 BQSCALE 25 # motion vector search parameters PIXEL HALF RANGE 10 4 # LOGARITHMIC, TWOLEVEL, SUBSAMPLE, EXHAUSTIVE PSEARCH_ALG LOGARITHMIC # CROSS2, SIMPLE BSEARCH_ALG CROSS2 # DECODED or ORIGINAL REFERENCE_FRAME ORIGINAL
といった設定ファイルtest.paraを用意し,
$ mpeg_encode test.para
とすればよい.
現時点では,mencoderの方が
などの多くの点でBerkeley MPEG Toolsのものを上回っているようだ.できあがる動画の品質に関してはどちらも問題ないように感じる.
mpeg_encodeだけをコンパイルするのなら,
$ make -C $SRCDIR/mpeg_encode/jpeg $ make -C $SRCDIR/mpeg_encode DEBUGFLAG="-DSIG_ONE_PARAM"
でok.
メモ程度に残しておく.
まずは本体.mplayer本体とffmpegをダウンロードし,コンパイルする.
$ wget \
http://ftp5.mplayerhq.hu/mplayer/cvs/MPlayer-current.tar.bz2
$ wget \
http://ftp5.mplayerhq.hu/mplayer/cvs/FFMpeg-current.tar.bz2
$ tar jxvf MPlayer-current.tar.bz2
$ tar jxvf FFMpeg-current.tar.bz2
$ rm -rf MPlayer-20050801/libavcodec
$ mv FFMpeg-20050801/libav* MPlayer-20050801
$ mv MPlayer-20050801 mplayer-1.0cvs
$ cd mplayer-1.0cvs
$ ./configure
$ make
$ make install
最後の./configure以下はdebパッケージを作るなりなんなりすればよい.ちなみにdebパッケージにフォントとスキンを含めてしまうには,
$ wget http://ftp5.mplayerhq.hu/MPlayer/Skin/Blue-1.4.tar.bz2
$ wget \
http://ftp5.mplayerhq.hu/MPlayer/releases/fonts/font-arial-iso-8859-1.tar.bz2 \
$ tar jxvf font-arial-iso-8859-1.tar.bz2
$ mv font-arial-iso-8859-1/font-arial-14-iso-8859-1 \
mplayer-1.0cvs/font
$ tar jxvf Blue-1.4.tar.bz2
$ mkdir mplayer-1.0cvs/Skin
$ mv Blue mplayer-1.0cvs/Skin/default
とした上で,main/debian/rulesのbinary-archの$(MAKE)直後に
mkdir -p $(prefix)/usr/share/mplayer
for i in font Skin; do cp -r $$i $(prefix)/usr/share/mplayer/; done
を追加すればよい.
基本的にダウンロードして/usr/lib/codecs (もしくは/usr/local)に放り込んでおくだけだが,
DESTDIR = /usr
LIBDIR = $(DESTDIR)/usr/lib/codecs
DIRS = $(LIBDIR)
all:
@echo "nothing to be done for build"
clean:
rm -rf codecs
install:
mkdir -p codecs
tar jxvf ../w32codec.tar.bz2
for i in $(DIRS); do install -d $${i}; done
(cd w32codec-0.90/ ; \
for i in *; do install -m 644 $${i} $(LIBDIR)/$${i} ; done)
のようなMakefileを用意すればdeb-makeでパッケージ化できるだろう.なおmplayerをコンパイルする前にインストールしておかないと,mplayerのwin32サポートが無効となる(あるいは--with-codecsdirで明示的に指示する必要がある).また,エンコードにlibavcodecしか使わないのであれば,インストールする必要はない.
| [1] | K.L. Gong and L.A. Rowe. Berkeley MPEG Tools. http://bmrc.berkeley.edu/research/mpeg/index.html |
| [2] | mplayer project. mplayer - movie player for linux. http://www.mplayerhq.hu/ |
| [3] | mplayer project. Encoding - MEncoder - The Movie Encoder for Linux. http://www.mplayerhq.hu/DOCS/encoding.html |