映画やアニメの60fpsインターレース動画を、24fpsプログレッシブ動画にしてみよう。

ちぇすにゃんがんばっ ♥


2002 1/7

前回に引き続き、今回は、フレームの選択に焦点を合わせて見ていこう。

ていうか単に検出方法に行き詰まったので、その先の部分に進んでみただけなんだが。

まずは、サンプル画像。
サンプル

今回はA9のOPから。

 

前回同様、前のフレームとの差分の絶対値の最大値を使う。式にすると、peak = max( abs( F1 - F0 ) ) こんな感じ。
で、これで得られたピーク値のヒストグラムを取ってみたのがこれ。
縦がフレーム数、横がピーク値のヒストグラムである。
右に行くほど値が大きい。つまり、左にある大きな山は、ピーク値が非常に小さいものの集合であり、やけに多いことが分かる。
むろん、これは当然のことで、Tmpgencから60fpsで出してきたbmpなので、その差分を取っていけば、少なくとも5フレームに1つは0に近いピーク値を持つ差分が出てくる。これが左の山である。

そこでとりあえず、左の山を含んだ一群と、それ以外のフレームで分けてみたのがこれ。
縦がピーク値マイナス閾値、横がフレームナンバーである。動きが激しいところ、止まっているところ等がよく分かる。
閾値は上のヒストグラムからてきとーに決めてあるが、つまりこの図で正の状態のものはインターレースである可能性が高いというわけだ。

これだけではあれなので、前回も出て来た、前のフレームとの差分の絶対値の合計値も使ってみる。
式にすると、sum = sum( abs( F1 - F0 ) ) こんな感じ。で、それのヒストグラムがこれ。
ピーク値を使ったものと様相が異なるが、動きのないフレームが左端に顕著に現れるのは同じこと。
というわけでこれも、閾値を決めて図示してみよう。

こんな感じ。
微妙に似て非なる結果・・・というのは前回やったが、これはこれで間違ったことは出て来ていない。

というわけで、上記二つを足し合わせてみたのがこんなの。
なんの重み付けもしてないのでなんだが、ある程度使えそうなデータではある。

それにしても見にくいので、5フレーム5周期ごとにまとめたグラフを作ってみた。
これまたわけがわからんが、左上から下向きにフレームその1その2その3・・・と並んでいる。要するに5つ毎に並べて表示しただけの物体である。で、これが何かというと、5フレームに1つあるはずの、動かないフレームがよーくわかるのだ。
この図の色が付いているところは、上のグラフでいうところの、値が大きいところである。逆に黒い部分は動きがほとんど無いことを示している。


で、見れば分かるが、
さいしょのズームは4周期目。
ここは静止画。
ここでシーンが変わって、
途中から動き出す。2,3,4周期が動いていないので、2か4周期目が静止フレームである可能性が高い。
さらにシーンチェンジ。周期も変わって、3,4,5が動かず。よって3か5周期目が可能性大。
シーンチェンジ。最初の3人とも同一周期で4周期目だが、ゆりのシーンチェンジの時にフレームが乱れてる。
ここでシーンチェンジ。2,3,4周期が動かず。
シーンチェンジ。途中で字幕が出て、その後ゆりがリミテッドな動きをする。総合的に3周期目とわかる。


で、だから何かって、まだ人間が見てわかりやすいつーだけの話で、実体が進んでいないのだが、このピーク値&合計値でどうにかなりそうなものだな〜という話。むろん、ソースがきれいなDVD系に限られるのだが・・・・・

それから、合計値は、シーンチェンジ及び動きの激しいところで、かなり高い確率で大きな値を出している。細かい口パクとかは埋もれてしまって分からないのは前回やったとおりだが、これはシーンチェンジ検出に使えるのではないだろうか。そして、少なくとも合計値が高いフレームは、静止していないという保証にもなりうるので、このままサンプリングしていきたい値の1つである。