読者です 読者をやめる 読者になる 読者になる

生物物理計算化学者の雛

主に科学に関する諸々を書き留めています。

ffmpegによる連番画像ファイルから動画への変換

MD計算結果等の動画を作成する際には、まず連番画像ファイルをbmpやpng等の形式で作成し、それを動画に変換します。
この変換はffmpegによりコマンドライン上で行うことができますので、その手順を解説します。
(昔はAdobe Premiereに大量の画像ファイルを取り込んで動画に変換していたのですが、ffmpegでの変換を知ってからは作業効率が一気にあがりました)

ffmpegのインストール(CentOS 6.2のマシンにインストール)

http://ffmpeg.org/download.html からffmpegスタティックビルド版ををダウンロード、解凍し、/usr/bin にリンクを張ることでffmpegを実行できるようにします。
(ダウンロード元のアドレスは頻繁に変わります。今回はFFmpeg Linux Builds の「FFmpeg Static Builds by Burek」リンク先から64bit最新版を選びました)

su
mkdir /usr/ffmpeg
cd /usr/ffmpeg
wget http://ffmpeg.gusari.org/static/64bit/ffmpeg.static.64bit.2012-12-24.tar.gz
tar zxvf ffmpeg.static.64bit.2012-12-24.tar.gz
ln -s `pwd`/ffmpeg /usr/bin/ffmpeg

ffmpegによる連番画像ファイルから動画への変換

以下のようにbmpsディレクトリ下に連番画像ファイルが保存されているとします。(bmp形式以外にも、png形式の連番画像ファイルでも動作することを確認しました)

ls bmps
# BMP1.bmp    BMP12.bmp   BMP140.bmp  BMP161.bmp  BMP182.bmp  BMP22.bmp  BMP43.bmp  BMP64.bmp  BMP85.bmp
# BMP10.bmp   BMP120.bmp  BMP141.bmp  BMP162.bmp  BMP183.bmp  BMP23.bmp  BMP44.bmp  BMP65.bmp  BMP86.bmp
# BMP100.bmp  BMP121.bmp  BMP142.bmp  BMP163.bmp  BMP184.bmp  BMP24.bmp  BMP45.bmp  BMP66.bmp  BMP87.bmp
# BMP101.bmp  BMP122.bmp  BMP143.bmp  BMP164.bmp  BMP185.bmp  BMP25.bmp  BMP46.bmp  BMP67.bmp  BMP88.bmp
# BMP102.bmp  BMP123.bmp  BMP144.bmp  BMP165.bmp  BMP186.bmp  BMP26.bmp  BMP47.bmp  BMP68.bmp  BMP89.bmp
# BMP103.bmp  BMP124.bmp  BMP145.bmp  BMP166.bmp  BMP187.bmp  BMP27.bmp  BMP48.bmp  BMP69.bmp  BMP9.bmp
# BMP104.bmp  BMP125.bmp  BMP146.bmp  BMP167.bmp  BMP188.bmp  BMP28.bmp  BMP49.bmp  BMP7.bmp   BMP90.bmp
# BMP105.bmp  BMP126.bmp  BMP147.bmp  BMP168.bmp  BMP189.bmp  BMP29.bmp  BMP5.bmp   BMP70.bmp  BMP91.bmp
# BMP106.bmp  BMP127.bmp  BMP148.bmp  BMP169.bmp  BMP19.bmp   BMP3.bmp   BMP50.bmp  BMP71.bmp  BMP92.bmp
# BMP107.bmp  BMP128.bmp  BMP149.bmp  BMP17.bmp   BMP190.bmp  BMP30.bmp  BMP51.bmp  BMP72.bmp  BMP93.bmp
# BMP108.bmp  BMP129.bmp  BMP15.bmp   BMP170.bmp  BMP191.bmp  BMP31.bmp  BMP52.bmp  BMP73.bmp  BMP94.bmp
# BMP109.bmp  BMP13.bmp   BMP150.bmp  BMP171.bmp  BMP192.bmp  BMP32.bmp  BMP53.bmp  BMP74.bmp  BMP95.bmp
# BMP11.bmp   BMP130.bmp  BMP151.bmp  BMP172.bmp  BMP193.bmp  BMP33.bmp  BMP54.bmp  BMP75.bmp  BMP96.bmp
# BMP110.bmp  BMP131.bmp  BMP152.bmp  BMP173.bmp  BMP194.bmp  BMP34.bmp  BMP55.bmp  BMP76.bmp  BMP97.bmp
# BMP111.bmp  BMP132.bmp  BMP153.bmp  BMP174.bmp  BMP195.bmp  BMP35.bmp  BMP56.bmp  BMP77.bmp  BMP98.bmp
# BMP112.bmp  BMP133.bmp  BMP154.bmp  BMP175.bmp  BMP196.bmp  BMP36.bmp  BMP57.bmp  BMP78.bmp  BMP99.bmp
# BMP113.bmp  BMP134.bmp  BMP155.bmp  BMP176.bmp  BMP197.bmp  BMP37.bmp  BMP58.bmp  BMP79.bmp
# BMP114.bmp  BMP135.bmp  BMP156.bmp  BMP177.bmp  BMP198.bmp  BMP38.bmp  BMP59.bmp  BMP8.bmp
# BMP115.bmp  BMP136.bmp  BMP157.bmp  BMP178.bmp  BMP199.bmp  BMP39.bmp  BMP6.bmp   BMP80.bmp
# BMP116.bmp  BMP137.bmp  BMP158.bmp  BMP179.bmp  BMP2.bmp    BMP4.bmp   BMP60.bmp  BMP81.bmp
# BMP117.bmp  BMP138.bmp  BMP159.bmp  BMP18.bmp   BMP20.bmp   BMP40.bmp  BMP61.bmp  BMP82.bmp
# BMP118.bmp  BMP139.bmp  BMP16.bmp   BMP180.bmp  BMP200.bmp  BMP41.bmp  BMP62.bmp  BMP83.bmp
# BMP119.bmp  BMP14.bmp   BMP160.bmp  BMP181.bmp  BMP21.bmp   BMP42.bmp  BMP63.bmp  BMP84.bmp

これら連番画像ファイルから動画への変換を ffmpeg によって以下のコマンドで実行できます。

ffmpeg -r 30 -i bmps/BMP%d.bmp -qscale 0 out.avi
# ffmpeg version N-48152-g98b7a50 Copyright (c) 2000-2012 the FFmpeg developers
#   built on Dec 24 2012 05:22:43 with gcc 4.6 (Debian 4.6.3-1)
#   configuration: --prefix=/root/ffmpeg-static/64bit --extra-cflags='-I/root/ffmpeg-static/64bit/include -static' --extra-ldflags='-L/root/ffmpeg-static/64bit/lib -static' --extra-libs='-lxml2 -lexpat -lfreetype' --enable-static --disable-shared --disable-ffserver --disable-doc --enable-bzlib --enable-zlib --enable-postproc --enable-runtime-cpudetect --enable-libx264 --enable-gpl --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-gray --enable-libass --enable-libfreetype --enable-libopenjpeg --enable-libspeex --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-version3 --enable-libvpx
#   libavutil      52. 12.100 / 52. 12.100
#   libavcodec     54. 81.100 / 54. 81.100
#   libavformat    54. 50.102 / 54. 50.102
#   libavdevice    54.  3.102 / 54.  3.102
#   libavfilter     3. 30.101 /  3. 30.101
#   libswscale      2.  1.103 /  2.  1.103
#   libswresample   0. 17.102 /  0. 17.102
#   libpostproc    52.  2.100 / 52.  2.100
# Input #0, image2, from 'bmps/BMP%d.bmp':
#   Duration: 00:00:08.00, start: 0.000000, bitrate: N/A
#     Stream #0:0: Video: bmp, bgr24, 600x600, 25 fps, 25 tbr, 25 tbn, 25 tbc
# Please use -q:a or -q:v, -qscale is ambiguous
# Output #0, avi, to 'out.avi':
#   Metadata:
#     ISFT            : Lavf54.50.102
#     Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 600x600, q=2-31, 200 kb/s, 30 tbn, 30 tbc
# Stream mapping:
#   Stream #0:0 -> #0:0 (bmp -> mpeg4)
# Press [q] to stop, [?] for help
# frame=  200 fps=0.0 q=0.0 Lsize=    2602kB time=00:00:06.66 bitrate=3197.5kbits/s    
# video:2592kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.398684%

ここで「-r 30」はフレームレート30fpsを指定しています。「-i bmps/BMP%d.bmp」により連番画像ファイルを順番に(BMP1.bmp, BMP2.bmp, ..., BMP200.bmp)入力することができます。「-qscale 0」は入力クオリティを保つ(縦横ピクセル数も保たれる)オプションであり、このオプションにより入力画像から劣化無く動画に変換されます(以前のバージョンでは同様の処理を -sameq オプションで指定できましたが、最近のバージョンでは -sameq は削除されたようです)。

各種オプションの使い方は ffmpeg -h all で確認できます。

また以下のように出力動画のビットレートやサイズを変換することもできます。

# 出力動画ビットレートを1000kbit/sに、出力動画サイズを300x300に変換
ffmpeg -r 30 -i bmps/BMP%d.bmp -b 1000k -s 300x300  out.avi