またしてもくだらない mixi のコミュニティを作ってしまった(ぁ
http://mixi.jp/view_community.pl?id=3871237
よかったら入ってあげてください(ぁ
さて、カメラで撮った動画を GIF アニメーションに変換する方法を紹介しようではないか。
例として MOL001.3GP (IEEE1394経由で取り込んだ DV 形式でも、デジカメで撮った AVI 形式でも)を GIF アニメーションに変換してみましょう。
手順
まずは ffmpeg でフレーム数と解像度を落としながら動画から必要な部分を切り出します。
$ ffmpeg -i MOL001.3GP -an -f gif -ss 20 -t 2.5 -pix_fmt rgb24 -s 176x144 -r 8:1 out.gif
ss 秒から t 秒間切り出して、解像度を s にして、フレームレートを r にして out.gif に書き出します。
この場合は、20秒の位置から2.5秒間を切り出して、画面サイズを 176x144 に変更し、フレームレートを 8:1 (8fps) にします。
ですから、できあがるGIFアニメーションは 20 フレームあることになります。(0.125 は1フレームの長さ・単位は秒毎フレーム。)
逆に変換する時間は何秒でもいいからそこから 8fps で 20 フレーム切り出したいという場合には、
$ ffmpeg -i MOL001.3GP -an -f gif -ss 20 -vframes 20 -pix_fmt rgb24 -s 176x144 -r 8:1 out.gif
のように vframes オプションで指定します。
できた out.gif はまだ無限ループしない*1ので、gimp で無限ループするように設定する必要があります。
out.gif を gimp で開き、別名(例: out-1.gif)で、GIF 形式を選択して保存します。
「複数のレイヤーがある」というメッセージが出てくるので、「アニメーションとして保存」を選択し、アニメーションGIFの設定のダイアログを出します。
「無限ループ」にチェックを付けて、正しいフレームレート(この場合は 125 ミリ秒)を設定したあと「全フレームのフレーム間の時間に値を使用」にチェックを付けて保存してくれれば、GIF アニメーションのできあがり。
mixi の規定では 20フレーム以内、500kB 以内なので、これで 500KB 以下なら晴れて mixi のコミュニティのトップに張り付けることができます。
なお、gimp は画像を適当に正規化するので、ffmpeg の変換結果よりかなりサイズが小さくなりますので、500KB 程度を目指したい人は、大きめに作りましょう。
-rw-rw-r-- 1 lugia lugia 186641 2008-11-29 11:26 out-1.gif -rw-rw-r-- 1 lugia lugia 582242 2008-11-29 11:25 out.gif
なお、携帯でも正しく表示させたい場合は、100KB 以下に抑える必要があります。
フレーム時間表
フレームレート | 20フレームの時間 | 1フレームの時間 |
---|---|---|
1 fps | 20 秒 | 1000 ミリ秒 |
2 fps | 10 秒 | 500 ミリ秒 |
3 fps | 約 6.7 秒 | 333 ミリ秒 |
4 fps | 5 秒 | 250 ミリ秒 |
5 fps | 4 秒 | 200 ミリ秒 |
6 fps | 約 3.3 秒 | 167 ミリ秒 |
7 fps | 約 2.86 秒 | 143 ミリ秒 |
8 fps | 2.5 秒 | 125 ミリ秒 |
9 fps | 約 2.2 秒 | 111 ミリ秒 |
10 fps | 2 秒 | 100 ミリ秒 |
15 fps | 約 1.3 秒 | 67 ミリ秒 |
16 fps | 1.25 秒 | 63 ミリ秒 |
20 fps | 1 秒 | 50 ミリ秒 |
25 fps | 0.8 秒 | 40 ミリ秒 |
29.97 fps | 約 0.67 秒 | 33 ミリ秒 |
30 fps | 約 0.67 秒 | 33 ミリ秒 |
40 fps | 0.5 秒 | 25 ミリ秒 |
50 fps | 0.4 秒 | 20 ミリ秒 |
100 fps | 0.2 秒 | 10 ミリ秒 |
これ以上増やすと描画できなくなる。
*1:firefox や Internet Explorer で確認すること。描画エンジンによっては無条件でループするものがある