Posted at

タイムラプス動画の自動速度調整の試み(前編)

More than 1 year has passed since last update.


モチベーション

夏にアメリカをレンタカーで少し回ったのですが

サクションカップマウントを買って一定間隔で画像を撮りました。

(確か5秒間隔だったと思います)

シカゴからピッツバーグに向かう途中の前半部分のライムラプスが以下になります。

0:34 付近で高速のゲートのバーが上がらずバックしているのですが

こういうイベントが発生しているところはゆっくり再生して

他の延々と道路が続いているところはよしなに速く再生する

的なこと自動でして欲しいと思いました。

かといって 1:08 くらいのサービスエリア的なところは少し長すぎるなと感じます。

2秒くらいですが長いので、長くても1秒くらいにしたいことにします。

https://youtu.be/BOHDtW9_tlQ


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

以前、類似画像検索をした際に

類似画像検索について簡単にまとめてみた - Qiita

上で紹介されていた phash を ruby から使うライブラリを使ったのですが

今回は python から opencv を使って連携させたいと思ったので python から phash が使えるものを探してみました。

https://github.com/JohannesBuchner/imagehash

ありました。

各フレーム間のハッシュ値の距離をプロットして

タイムラプス動画を合わせてみました。

真ん中が phash です。

https://youtu.be/oIoNYs4yLio

橋とかで空が隠れてブレてます汗

Screen Shot 2016-12-11 at 17.45.18.png

ここらへんを抽出したいですね。。。

Screen Shot 2016-12-11 at 17.47.01.png

ここを短縮したいですね!(これはいけそうな気がします)

Screen Shot 2016-12-11 at 17.50.20.png


後編へ

ウィンドウサイズ決めて、ローカルな分散とか見て色々やってみたいと思っていますが

正直、同じようなことやっている人はいると思うので

時間をかける前に情報収集ですね。


参考