SVP (SVP4),才15鎂,手癢就買下去了,調一調參數大概歸類一下演算法
因為這樣又把許多以前的動畫翻出來看了一遍 XD…
簡單模式
基本上沒有 cadence detection ,靠影片的 metadata 決定,因為我直接用 60Hz film32 的影片偵測不出需要 FRC
有基本的 rim detection,黑邊偵測
切換 film & animate mode主要應該是影響 ME block 的大小,因為動畫的 uniform 區塊多,實驗看 animate mode 的 halo 明顯較大表示,ME 用比較大的 window size
自訂模式
可調參數不多,據說 SVP3 比較好玩 XD
在 MPC-HC 中格放可以看到 MC 的影像!!! 這簡直太令人開心了!!
官網的參數說明給了很多訊息,但很多俄文看無..
- Frame interpolation: phase的差補位置,基本上越高補越多 frame,畫面也越順,補比較少則會用 pulldown 出圖。
- SVP Shader: 大致上分三大類,原理猜同 H.264,一種是IP影像的 mesh deformation 補圖( fastest, animate ),IP影像的 block 內插 ( block ),另外就是 B 影像bi-directional 的方法 ( simple to complicated )。
- mesh deformation 的優點是不會有破洞的問題,控制 mesh 採樣點的疏密可以輕鬆調整效能,但是 mesh deformation 容易造成奇怪的扭曲,逐格撥放快速移動影像可以容易看出。
- block 內插容易會產生疊影或破洞,但東西不扭曲了 XD
- bi-directional 則是看起來效果較好,但容易有空對空的物體消失問題,竿子或小東西之類的會閃爍。
- Artifacts masking: 與原始 pulldown 影像作不同程度的 blending,抵銷 artifacts 同時當然會影像流暢度,所以預設是關
- Motion vectors precision: MV 的取樣精度,最多到半個 pixel
- Motion vectors grid: block 大小,影響東西太多,不一定是越小越好,預設是 16px
- Decrease grid step: 有點難猜,似乎是在大 block size 時用小 block 改善
- Search radius: MV 的搜尋範圍,fast mode會用普通 SAD 做 block compare 比較快,其他則是用 SADT (比較偏頻譜轉換,適用在光影變化大的場景,官網: Use SATD function instead of SAD on every coarse level, improves motion vector estimation at luma flicker and fades. )
- Wide Search: 假設在 search radius 中找不到夠像的 block (這裡沒有給 threshold 調整),則與 pulldown 或線性內插影像 blending
- Width of top coarse level: 這參數表示 MV 的搜尋是 multi-resolution 跑的,可以設定最 coarse 影像的大小,程式建議是在高解析度 ( 4K ) 下打開。根據文檔敘述,coarse 解析度的 ME 是 pixel based,而後在 finer 解析度拆分成 4 個 sub-block 再用 sub-pixel 跑 ME;為了避免 sub-block 破碎可能在 MV 差異不大時合併所以有一個 field 參數。
來自官網的 penalty 使用參數: 很大一部份來自 MVTools
lambda: 10.0, Set the coherence of the field of vectors. The higher, the more coherent. However, if set too high, some best motion vectors can be missed. This value is different from MVTools, see remark for explanations. plevel: 1.5, penalty.lambda scaling mode between levels. 1.0 means no scaling, 2.0 - linear, 4.0 - quadratic dependence from hierarchical level number. This value is different from MVTools, see remark for explanations. lsad: 8000, SAD limit for lambda using. Local lambda is smoothly decreased if SAD value of vector predictor is greater than the limit. It prevents bad predictors using but decreases the motion coherence. Value is scaled to block size 8x8. pnew: 50, Relative penalty (scaled to 256) to SAD cost for new candidate vector. New candidate vector must be better will be accepted as new vector only if its SAD with penalty (SAD + SAD*pnew/256) is lower then predictor cost (old SAD). It prevent replacing of quite good predictors by new vector with a little better SAD but different length and direction. pglobal: 50, Relative penalty (scaled to 256) to SAD cost for global predictor vector (lambda is not used for global vector). pzero: 100, Relative penalty (scaled to 256) to SAD cost for zero vector. It prevent replacing of quite good predictor by zero vector with a little better SAD (lambda is not used for zero vector). pnbour: 50, Relative penalty (scaled to 256) to SAD cost for up to 8 neighbours vectors. prev: 0, Relative penalty (scaled to 256) to SAD cost for "reverse" vector (already found vector from reverse search direction), works only with "analyse.vectors: 3".
有趣的是官網還自己提供了調整參數的說明,基本上 animate mode 就是幾組設定要改。
- MC改成 mesh deformation
- 加大 block size
- 減少 search radius,當然結果會偏向 judder,但總比歪曲好
- 減低 MV 精度到 2px,應該是怕 candidate 精度太高互相競爭,造成 MV 不一致性較高
AMD Fluid Motion 似乎也是另外一種選擇,但沒有 AMD 卡所以沒研究

