part5 mpdecimateでVFR!その後。フェードアウトが完全に消えなくて残像が残る!30fps動画を再生しShadowPlayで60fps録画してmpdecimate掛けたら?

日記

※個人的なメモです。元ソースや環境によってはモアベターな違う値があると思います。
※人によって許容範囲やファイルサイズなど優先順位が違うと思うのでそんなこともあったなと^^;

■ ある場面で残像は残るし、ある場面では間引かれ過ぎるという罠

しばらく使ってみて、不都合が出てきたので…
初期値はmax=0なので、同じに見えるシーンは全部間引かれます。(変化する8x8のブロックのカウントが閾値に達しないとき)

◎暗いシーンからのフェードアウト(黒へ)でカクカクになる。そして完全に黒くならない。
◎画面の一部しか更新されない場合、閾値に届かないので間引かれてしまう。
◎白や黒のフェードイン・フェードアウトでフェードしきらずにらず残像が残る(間引かれ過ぎ)(^◇^;

・星の瞬き
・暗いシーンで人物など瞼だけしょぼしょぼ動く時
・暗いシーンで手前のぼやけた黒い物体がゆらゆら動く時
・止め絵のフェードが最後までフェードしきらずブロックノイズが残る
・夜道で対岸くらいの距離の人物が手を振ってる時
・ゲームの読み込みや戦闘シーン切り替わりで、フェードアウトが多発する様な時
・引き画面のデジタル時計などのカウンターなど
・夜の地面で黒い虫が動くような(ノ><)ノ ヒィ
・カメラ固定で暗いシーンの小さいものが動くときに起きやすいですね

■ 残像消しテスト!亡霊を追い払おう!

テストしたShadowPlay(デスクトップ録画=モニタの性能)で60fps→8fpsくらいまで落ちると、最後が完全に黒くなっていなかった。
ただでも今の圧縮技術は暗部でビットレート下げるので、暗くブロックノイズが出やすい場面で視認できる影響が出やすい。
プログラム的にもパラメータ変更で閾値を変えれば何とかなるけれど、そうすると他の場面で間引きがかかりにくくなる。
そこで、人の目は残像によるごまかしがきくので経験上最低でも12fpsは欲しい。違和感がなく安全マージンを取るなら30fps当たりあろうか(^◇^;

・暗い背景を用意してフェードアウトさせる動画でテストして納得がいく数値を見つけよう!
・仮説:60→30fpsなら最大連続でドロップするのを1にすればいけそうではある。
(テストした実写静止画→フェードアウト(黒)のサンプル動画では、max=1よりmax=2の方が違和感が少なく理想に近かった)
※フェードアウトだけでなくフェードインでもカクカクになるときがあるのでMAX=1か2を指定したいところではある。
※max=2でいい感じではある

【テスト】
30fpsのちょいちょいフェードを入れながら作った実写・スタッフロールごちゃまぜの動画をShadowPlayで録画。
[NVEncC](ShadowPlay専用(^◇^;)

set NVENC64_PATH=D:\bin\NVEncC_5.22_x64\NVEncC64.exe

%NVENC64_PATH% -c hevc --profile main10 --output-depth 10 --bref-mode each --ref 16 --avhw --input-analyze 16 --avsync vfr --aq --aq-temporal --aq-strength 0 --vbrhq 0 --vbr-quality 28 --lookahead 32 --gop-len 300 --bframes 4 --vpp-mpdecimate max=1 --vpp-colorspace matrix=smpte170m:bt709 --colormatrix bt709 --colorprim bt709 --transfer bt709 --vpp-unsharp radius=3,weight=0.5,threshold=10 --audio-codec aac:aac_coder=twoloop --audio-bitrate 256 -i "%~1" -o "%~n1_mpdecimate.mp4" --log "%~n1_mpdecimate.log"

[別のテスト]

・max=1:60→35fps
・max=2:60→25fps(ファイルサイズはmax=1より1割ほど縮む)
max=1とmax=2を試したところで理想に近い、いい数値が出たのでテスト終了。元が30fpsなので(^_^)v
・実写30fpsを60fpsで録画してmpdecimate掛けたら?max=1が妥当かなと。動きの少ないシーンを間引いて少しでも減らしたい時はmax=2。
・max=0とmax=3は実写だと不都合が見受けられるので、実時間の目視チェックが必要かなと。保存用にして後で見ようとか思うとハマるやつかな(^◇^;

・アニメソースも24fpsをインタレ解除しただけの30fpsでつなげたのでドロップ率が高いはず…これは…奥が深い&闇が深いので…今回はパス^^;


※アニメソースはmpdecimate max=0だと、24分物で12~16fpsに( ^ω^)・・・こんなもの?ちょっと怖い。深追いは各自健康な時に。
そっ閉じ |ー゚)

■ まとめ「残像消し」 –vpp-mpdecimate max=1

・シーンチェンジの違和感を感じたら、まずはお試しで、おまじない。
・エンコードのパラメータとは、時間をかけて何度もテストして調整するもの。同じソースうなんて一つもないものね。

■ mpdecimate の maxの挙動について詳しいサイト
フレームを間引くdecimate、mpdecimate | ニコラボ
一定のフレーム間隔で重複フレームを間引くdecimateフィルタと、前フレームとあまり変化のないフレームを間引くmpdecimateフィルタの使い方。