モチベーション
夏にアメリカをレンタカーで少し回ったのですが
サクションカップマウントを買って一定間隔で画像を撮りました。
(確か5秒間隔だったと思います)
シカゴからピッツバーグに向かう途中の前半部分のライムラプスが以下になります。
0:34
付近で高速のゲートのバーが上がらずバックしているのですが
こういうイベントが発生しているところはゆっくり再生して
他の延々と道路が続いているところはよしなに速く再生する
的なこと自動でして欲しいと思いました。
かといって 1:08
くらいのサービスエリア的なところは少し長すぎるなと感じます。
2秒くらいですが長いので、長くても1秒くらいにしたいことにします。
ffmpeg
ffmpegで連番画像から動画生成 / 動画から連番画像を生成 ~コマ落ちを防ぐには~ - Qiita
上記サイトを参考に動画を作成してみました。
ffmpeg -framerate 30 -start_number 416 -i ./data/images/001/DSC%05d.JPG -vframes 6000 -vcodec libx264 -pix_fmt yuv420p -r 60 out.mp4
タイムラプスにしたい画像が DSC00416.JPG
から DSC03415.JPG
だとします。
1秒間に 30
画像使って出力動画のフレームレートが 60
で
1つの画像を2回使うので、 全部で 6000
フレームという意味だと思います。
-vrames
オプションは指定しなくてもいいと思いますが、小さくテストしたい時に 180
とか指定してました。
$ ffmpeg --help | grep -E "(-framerate)|(-start_number)|(-vframes)|(-vcodec)|(-pix_fmt)|(-r )"
-pix_fmts show available pixel formats
-vframes number set the number of video frames to output
-r rate set frame rate (Hz value, fraction or abbreviation)
-vcodec codec force video codec ('copy' to copy stream)
$ ffmpeg -pix_fmts | grep -E "(FLAGS NAME)|(yuv420p )"
FLAGS NAME NB_COMPONENTS BITS_PER_PIXEL
IO... yuv420p 3 12
詳細は ffmpeg --help full
。
phash
以前、類似画像検索をした際に
上で紹介されていた phash
を ruby から使うライブラリを使ったのですが
今回は python から opencv
を使って連携させたいと思ったので python から phash
が使えるものを探してみました。
ありました。
各フレーム間のハッシュ値の距離をプロットして
タイムラプス動画を合わせてみました。
真ん中が phash
です。
https://youtu.be/oIoNYs4yLio
後編へ
ウィンドウサイズ決めて、ローカルな分散とか見て色々やってみたいと思っていますが
正直、同じようなことやっている人はいると思うので
時間をかける前に情報収集ですね。