Photo Gallery

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
AviSynth における条件分岐やフレーム解析
http://www.avisynth.info/?ConditionalFilter
スポンサーサイト
シーンチェンジ検出のバージョンアップです。

今回は、検出精度が低下する暗部シーンに対してのフォローアップです。
新しく 3 つのモードを設け、暗部シーンへのアプローチを柔軟に変化させることが可能になりました。
ついでに、検索閾値のデフォルト値を 20 に変更。

暗いシーンから暗いシーンへのシーンチェンジ輝度変化がとても小さく、明部と同じ閾値では正しいフレームを取得できないようなので、明るさが一定以下のフレームに対してのみ、閾値を下げる処理を組み込みました。


Import("AutoFrameDifference.avsi")

v =MPEG2Source("xxx.d2v")
a =bassAudioSource("xxx.aac")
AudioDub(v, a)

IT(fps=24)

AutoFrameDifference(mode=3, dark_boundary=48, dark_threshold=5, logfile="xxx.log")

return last


mode = 1 : 従来通り、すべてのフレームに対して同じ閾値 ( threshold ) で検索します。高速ですが、暗部での検出能力は低いです。デフォルトではこのモードを使用します。

mode = 2 : 暗部フレームに対して暗部専用の閾値 ( dark_threshold ) を使って検索します。暗部以外のフレームは検索対象から外れます。

mode = 3 : 明部フレームは threshold を使用し、暗部フレームは dark_threshold を使用して検索します。最も低速ですが高精度です。


暗部フレームの判定は dark_boundary オプションを使用します。
ddebug モードにすると、フレームの Luma が表示されますが、dark_boundary に対して Luma のほうが小さい場合、そのフレームを暗部として扱います。

24037.jpg

このちーちゃんのフレームを暗部として扱いたい場合は dark_boundary = 36 以上にします。




関連記事
ソフトウェア - シーンチェンジ検出 for Avisynth v0.3
ソフトウェア - シーンチェンジ検出 for Avisynth
雑記 - 2013Q2 シーンチェンジ検出のテスト結果

ダウンロード
シーンチェンジ検出_for_Avisynth_v0.4.zip


引用元:TVアニメ「はたらく魔王さま!
(C)和ヶ原聡司/アスキー・メディアワークス/HM Project .

Tag:Iフレーム 暗部 キーフレーム 自作 Avisynth シーンチェンジ検出 AutoFrameDifference はたらく魔王さま!

シーンチェンジ検出のバージョンアップです。
今回の v0.3 は、キーフレームリストの出力と、Debug モードを追加実装しました。
従来の機能は仕様変更ありません。


① キーフレームリスト出力
x264 でエンコードする際、I フレームの挿入の決断は --scenecut オプションで調整しますが
--qpfile オプションを利用し、フレーム番号を直接指定して I フレーム化する方法もあります。
その I フレーム指定をするテキストファイルを自動で書いてしまおうという発想です。


AutoFrameDifference.exe {省略} --qpfile キーフレーム.txt

x264.exe {省略} --qpfile キーフレーム.txt --scenecut 1



閾値デフォルトの 10 にして検索すると、余分なフレームも拾ってしまう確立が高いので
検出数が多すぎる場合は、閾値を下げるか、skip_min の値を増やして、最小間隔を調整してください。

テストをしていて気付きましたが、画面スクロールは誤検知し易いようなので、そういった動画は閾値を 20 以上くらいにすると、概ねシーンチェンジフレームだけを拾ってくれると思います。

また、終始落ち着いた動画で、場面転換が明らかに少ないものに関しては、閾値を弄らずに skip_min を増やしたほうが正確なフレームを拾うかもしれないです。


② デバッグモード
設定した閾値に対して、実際どのフレームを検出したのかをプレビューできるモードです。
AvsP のプレビュー機能を使用することを想定しています。


Import("AutoFrameDifference.avsi")

v =MPEG2Source("xxx.d2v")
a =bassAudioSource("xxx.aac")
AudioDub(v, a)

IT(fps=24)

AutoFrameDifference(logfile="xxx.log", threshold=10, debug=true)

return last


こうすることで、検出されたフレームの直前 ( シーンの最終フレーム ) の左上に、「 scene last frame 」と表示されます。
これが必要以上に表示される場合は、閾値 ( threshold ) を上げてください。
そうすることで、より変化の激しいシーンのみ検出されるようになります。

23965.jpg


I フレームの数は、エンコードログを参照すると分かりますので、独自に調整して精度を上げてみてください。


x264 [info]: frame I:466   Avg QP:20.73  size: 60845
x264 [info]: frame P:8101 Avg QP:23.35 size: 12562
x264 [info]: frame B:25672 Avg QP:27.28 size: 2165





関連記事
ソフトウェア - シーンチェンジ検出 for Avisynth v0.4
雑記 - 2013Q2 シーンチェンジ検出のテスト結果
ソフトウェア - シーンチェンジ検出 for Avisynth

ダウンロード
シーンチェンジ検出_for_Avisynth_v0.3.zip



引用元:TVアニメ「変態王子と笑わない猫。
©2013 さがら総・メディアファクトリー/「変猫。」製作委員会

Tag:Iフレーム キーフレーム 自作 Avisynth シーンチェンジ検出 AutoFrameDifference 変猫 変態王子と笑わない猫。

### はたらく魔王さま #01
FRAME COUNT: 700 / 34524
AVERAGE FRAME INTERVAL: 49 frames.
AVERAGE Y DIFFERENCE: 2.64


### RDG レッドデータガール #02
FRAME COUNT: 765 / 35963
AVERAGE FRAME INTERVAL: 46 frames.
AVERAGE Y DIFFERENCE: 2.397


### やはり俺の青春ラブコメはまちがっている。 #01
FRAME COUNT: 1045 / 35243
AVERAGE FRAME INTERVAL: 33 frames.
AVERAGE Y DIFFERENCE: 2.932


### フォトカノ #01
FRAME COUNT: 1332 / 35244
AVERAGE FRAME INTERVAL: 26 frames.
AVERAGE Y DIFFERENCE: 3.253


### 俺の妹がこんなに可愛いわけがない。 #01
FRAME COUNT: 1353 / 34523
AVERAGE FRAME INTERVAL: 25 frames.
AVERAGE Y DIFFERENCE: 2.979


### 翠星のガルガンティア #01
FRAME COUNT: 2526 / 34524
AVERAGE FRAME INTERVAL: 13 frames.
AVERAGE Y DIFFERENCE: 6.195



ログ採取はデフォルト設定で行いました。
事前に Auto24Fps() で逆テレシネ化した後のフレームでのテストです。

このログだけ見ても、ガルガンディアだけやたらと厳しいのが一目瞭然です。
実際にエンコードしましたが、やはりこれだけビットレート不足が明白でした。
A パートの輝度変動が激しすぎるのが原因のようなので、2 話以降は少しはマシになると予想できます。


関連記事
ソフトウェア - シーンチェンジ検出 for Avisynth v0.4
ソフトウェア - シーンチェンジ検出 for Avisynth v0.3
ソフトウェア - シーンチェンジ検出 for Avisynth
雑記 - 2013Q3 シーンチェンジ検出のテスト結果 (1)
雑記 - 2013Q3 シーンチェンジ検出のテスト結果 (2)
雑記 - 2013Q3 シーンチェンジ検出のテスト結果 (3)

Tag:自作 Avisynth シーンチェンジ検出 AutoFrameDifference 2013Q2 翠星のガルガンティア

Avisynthシーンチェンジフレームを自動検出するスクリプトを作成しました。
検出には、隣接フレームの輝度差を参考にしています。

x264 でエンコードを行う際、I フレーム挿入量やビットレート変動量などを決めるときの参考値を取ることが開発の目的ですが、Trim コマンドも発行するので、用途は様々だと思います。

下記のような AVS を作成し、適当なオプションでエンコードすると、ログファイルが作成されます。
そのログファイルを AutoFrameDifference.exe に渡して結果をフォーマットしてください。

### 解析用 AVS ファイルサンプル

Import("AutoFrameDifference.avsi")

v =MPEG2Source("xxx.d2v")
a =bassAudioSource("xxx.aac")
AudioDub(v, a)

IT(fps=24)

AutoFrameDifference(logfile="xxx.log")

return last



### AutoFrameDifference.exe 実行サンプル

set afd="C:\encode\bin\AutoFrameDifference.exe"
%afd% --logfile xxx.log --skip true --skip_min 1 --output xxx.afd.log



### 出力サンプル
log.jpg

AVERAGE Y DIFFERENCE の値は、AutoFrameDifference 関数のしきい値と同じ単位です。
その他、引数の詳細などは同梱の Readme.txt を参照してください。


2013/4/11 計算ミスがあったので修正しました。



関連記事
ソフトウェア - シーンチェンジ検出 for Avisynth v0.4
ソフトウェア - シーンチェンジ検出 for Avisynth v0.3
雑記 - 2013Q2 シーンチェンジ検出のテスト結果


ダウンロード
シーンチェンジ検出_for_Avisynth_v0.2.zip

Tag:自作 Avisynth シーンチェンジ検出 AutoFrameDifference



WHAT'S NEW?

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。