サクッと作れて中々仕上がりが良かったので共有します。
##タイムラプス動画がハヤってますね!
最近facebookなどを見ているとお料理のタイムラプス動画などがよく流れてきます。
なんかカッコいいですよね。
僕も作ってみたいです。
でも、GoProとかないので、既存の動画をなんとかできないかと思った次第です。
##タイムラプスの仕組み
タイムラプスの仕組みはクレイアニメと同じです。
コマ撮りの画像を繋げたパラパラ漫画ですね。
##ffmpegを使って実現するには
さて、ここからが本題!
タイムラプスはクレイアニメなので、
次の手順で普通の動画をタイムラプスに変換します。
- 既存の動画から一定間隔でキャプチャを切り出す。
- 切り出したキャプチャをまた繋げる。
以上です!簡単ですね。
##さっそくコマンド
###まずは動画の長さを調べます。
ずらずらっと出てきますが、僕が用意したテスト用の動画は10:35でした。
$ ffmpeg -i test.MOV
ffmpeg version 2.6.8 Copyright (c) 2000-2016 the FFmpeg developers
〜中略〜
Duration: 00:10:35.50, start: 0.000000, bitrate: 8675 kb/s
Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuvj420p(pc, smpte170m/bt709/bt709), 640x480, 7136 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 60k tbc (default)
Metadata:
creation_time : 2016-03-16 10:03:11
Stream #0:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, stereo, s16, 1536 kb/s (default)
Metadata:
creation_time : 2016-03-16 10:03:11
###次にこの動画から、1秒おきにキャプチャを切り出します。
for i in `seq 1 635`
do
ffmpeg -ss $i -i test.MOV -vframes 1 -f image2 ./out/test-`printf %04d $i`.jpg
done
ffmpegのオプションは下記のようになります。
| オプション | 概要 |
|---|---|---|
|i|入力ファイル指定|
|ss|何秒目から処理するか|
|vframes|何フレームを対象にするか|
|image2|画像として出力する|
1秒目から635秒目(=10分35秒)まで、1秒おきにキャプチャを切り出し、
さらにゼロ埋めの連番をつけて保存しています。
###最後に画像をくっつけて動画にします。
ffmpeg -f image2 -r 15 -i ./out/test-%04d.jpg -r 15 -an -vcodec libx264 -pix_fmt yuv420p ./video-out/test-timeLapse.mp4
ここで使っているffmpegのオプション
オプション | 値 | 概要 |
---|---|---|
f | image2 | 入力がjpeg画像であることを通知 |
r(1つ目) | 15 | 入力フレームレートの指定。静止画の更新を毎秒15フレームに指定。ここの数字を変更すればタイムラプス動画のフレームレートを変更できるそうです。 |
i | ./out/test-%04d.jpg | 入力ファイル。この書き方で連番で画像を読み込んでくれます |
r(2つ目) | 15 | 出力フレームレートの指定だそうですが、謎です |
an | オーディオ無し | |
vcodec | libx264 | エンコーダはH.264。 |
pix_fmt | yuv420p | 画像形式をYUV形式でYUV420に指定 |
##参考
今回参考にさせていただいたサイト様
ありがとうございました。
http://blog.fumiz.me/2008/10/19/ffmpeg%E3%81%A7%E5%8B%95%E7%94%BB%E3%81%8B%E3%82%89%E7%94%BB%E5%83%8F%E3%82%92%E5%88%87%E3%82%8A%E5%87%BA%E3%81%99/
http://qiita.com/riocampos/items/2f4fe927b5cf99aff767