LoginSignup
2
2

More than 5 years have passed since last update.

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

Posted at

前編

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

上記記事の続きになります。

調べる力が足りなすぎたので、とりあえず手を動かしました。

phash (前編より)

このタイムラプス動画のフレーム間ハッシュ距離がこんな感じになっていました。

clip = moviepy.editor.VideoFileClip("path to video file")
phashs = [imagehash.phash(PIL.Image.fromarray(frame)) for frame in clip.iter_frames()]
distances = [phashs[i+1] - phashs[i] for i in range(len(phashs)-1)]

アートボード_1.png

z score

とりあえず、z score とってみました。

z_scores = scipy.stats.zscore(distances)

z_scores.png

gaussian blur

z score にブラーをかけて、絶対値の平均のマイナスを閾値にしてみました。

blured = cv2.GaussianBlur(z_scores, (49, 49), 0)
threshold = numpy.average(numpy.sqrt(numpy.power(z_scores, 2)))

blured_z_scores.png

上図の閾値を下回っている1つの連なりを1つのイベントとして
動画再生を速度を変えたものが以下になります。

課題

思い描いていたものには近いづいていますが、
イベントとして検出した部分の前後も徐々にスピードが落ちたり、早くなったりさせてちょっと境目にマージンを持たせたらもう少しましになるかもとは思いました。

今回 moviepy というpythonのライブラリを使いましたが
その使い方がもう少しわかったらチャレンジしてみたいと思います。

使ったライブラリをのせておきます。

# requirements.txt
ImageHash==3.1
matplotlib==1.3.1
moviepy==0.2.2.11
numpy==1.7.1
Pillow==3.4.2
progressbar2==3.11.0
scipy==0.13.2
seaborn==0.7.1

コードはこちら。
https://github.com/sosuke-k/timelapse-optimizer

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2