網誌文章分布

最新消息:
AviSynth/VapourSynth Filter 支援 YUV444P16 格式啦~ 這樣就有很多花樣可以玩了,像是Waifu2X, RIFE等RGB濾鏡可以幾乎無損輸出! 超開心
最近的腳本有提供RIFE實時撥放支援,等過段時間再把RIFE的相關資訊寫到Blog中 如果有時間的話...咕咕咕
DmitriRender迎來時隔年五年多的更新了(僅限NVIDIA Ampere, Turing, Pascal, Maxwell, Kepler顯示卡),同時也支援10Bit輸出。不過新版好像緩衝有點太少,容易卡頓
SVP最新版本已支援在DS系撥放器中透過Avisynth Filter輸出10Bit畫面,而且跳轉時卡頓狀況有大幅改善。
由AMD工程師回覆,AMD已徹底終止Fluid Motion技術,如有BFRC需求的用戶請多加留意。 (https://community.amd.com/thread/250830)

近期更新文章:
測試筆記:SVP最新測試版參數(beta script)(2023-12-17 腳本更新)
進階教程系列(十二) - 視訊解碼濾鏡 MPC Video Decoder(2022-06-11)
進階教程系列(三) - 字幕渲染濾鏡 XySubFilter丶AssFilterMod(2022-06-11更新)

2017年6月2日 星期五

SmoothVideo Project 系列(二) - 參數簡介(2017-11-22更新)

在前篇 SmoothVideo Project 系列(一) - 安裝丶簡易設定 ,最後有提到進階版的參數需要修改 override.js 才能獲得更好的表現,也許有些人已經迫不急待地去找尋此檔案,但卻無從下手,本篇主要為說明相關參數,翻譯自 SVP官方 Plugins: SVPflow

SVP主要核心為SVPflow,
而SVPflow又分成兩部分,分別是svpflow1與svpflow2,
svpflow1主要是分析影片各區域的運動趨勢,
svpflow2則是藉由svpflow1所得的資訊來進行運動預測,達到補幀的效果。

svpflow1包含了SVSuper丶SVAnalyse丶SVConvert,
SVSuper將每幀畫面進行多次縮放,形成不同解析度的特殊畫面,為了保存其參數,會利用音訊採樣頻率紀錄,所以SVSuper無法傳遞音訊資料。
產生的特殊畫面如下:


SVAnalyse則是將SVSuper所產生的畫面再劃分成不同的區塊大小(SVP官方譯成:運動向量網格),從低解析度搜索到高解析度,以取得各區域的運動趨勢,不同參數所分析到的運動趨勢也會有所差異,這也是為什麼要調整參數的主因。
不同參數造成的運動區域差異如下:
從運動趨勢來看,
左圖在背景的運動趨勢比較連貫,而右圖較為不連貫,
但人物頭髮處(右下角),可以發現左圖運動趨勢變化有斷層,不平滑,
因此可以推測出左圖相較於右圖 背景處較為流暢,但頭髮處可能會有偽影產生。


SVConvert,可以將SVAnalyse所分析到的資訊轉換成MVTools2的MAnalyse格式,之前說過SVP核心是由MVTools所改良專為即時播放的插件,而SVConvert可以將SVP所獲得的資訊轉換成MVTools可使用的資訊。


svpflow2是個閉源插件,其內部包含SVSmoothFps,
SVSmoothFps可以改變原始影片的幀率,以達成轉換幀率丶慢動作效果等,
使用SVAnalyse所分析到的運動趨勢,在幀間內插中間幀,並透過遮罩來抑制偽影產生。


在了解各插件用途後,簡單說些各插件的參數(部分參數與補幀無明顯相關性的就不做翻譯,僅以原文替代)



SVSuper(source, params_string)
source:影片來源。
params_string:格式為JSON的參數字串,參數為可選的。
以下為SVSuper的params_string列表
{
  pel: 2,
運動預測的精確度,可以為1丶2丶4,
1 表示精度為1像素
2 表示精度為1/2像素
4 表示精度為1/4像素(不推薦使用)

  gpu: 0,
GPU模式:0 - 不啟用,1 - 啟用(用於畫面渲染)。
注意,當“gpu:1”(啟用GPU渲染)時,scale up 始終為0,亞像素畫面並不被渲染。

  full: true,

僅在pel = 1時有效,當full = false時,減小SVSuper所開啟的clip尺寸。
在處理高解析影片(如UHD(4K))時,可以減少記憶體的使用量。

  scale: {

縮放模式

               up: 2,

放大插值方法。
0 使用bilinear插值(雙線性)
1 使用4 tap Catmull-Rom插值(4 tap Catmull-Rom)
2 使用較銳利的Wiener插值(6 tap,近似於Lanczos)

               down: 4
縮小濾鏡。
0 簡單四像素平均,類似未過濾的unfiltered SimpleResize (老方法)
1 類似於ReduceBy2的triangle (shifted)濾鏡,較平滑 (減少鋸齒)
2 類似BilinearResize的triangle濾鏡,更平滑
3 quadratic濾波器,更平滑
4 類似於BicubicResize(b = 1,c = 0)的立方濾波器,更加平滑

              }

  rc: 0,
僅由SVP管理器使用。不需要在腳本中設置。

}


SVAnalyse(super, params_string, [src]: clip)

super:透過SVSuper所取得的多層畫面,也可使用MVTools2中的MSuper替換,不過需要定義gpu參數。
params_string:格式為JSON的參數字串,參數為可選的。
src:Source clip,必須在super.full= false時定義。
以下為SVAnalyse的params_string列表
{
  gpu: 0,

GPU模式:0 - 不啟用,1 - 啟用(用於畫面渲染)。
僅在SVSuper被MSuper取代時,此項將會取代super.gpu的設定。

  vectors: 3,
搜索的運動向量方向(時域)。
1 - forward only,從當前幀到下一幀搜索(沒什麼用),
2 - backward only,從前一幀到當前幀搜索(僅適用於“smoothfps.algo:1”),
3 - 搜索雙向。

  block: {
用於區塊匹配演算法內的運動向量網格大小。

                w: 16,

網格的水平大小。可為8丶16或32。
較大的區塊對噪點較不敏感且資源消耗較低,不過不太準確,較小的塊則容易產生更多的波浪狀偽影。

                h: 16,

網格的垂直大小。默認等於水平大小。
附加選項有:當block.w:8為4,當block.w:16為8,當block.w:32為16。

                overlap:
2
網格重疊值。
0 - 無
1 - 垂直與水平各1/8區塊大小,
2 - 垂直與水平各1/4區塊大小,
3 - 垂直與水平各1/2區塊大小。
重疊面積越大,網格越多,處理速度越慢。
當使用CPU渲染時,overlap應設為偶數。

                },
  main: {

定義主要的搜索設置。

                levels: 0,

正值是在搜索運動向量時,分層分析中使用的層級數量。
負值或零是在搜索運動向量時,分層分析中不使用的coarse levels(低解析層級)數量。

                search: {
                                type: 4,

在finest level(最高解析層級)中的搜索方法
2 - Hexagon search(六角形搜索),類似x264的HEX,
3 - Uneven Multi Hexagon(UMH)搜索,類似x264的UMH,
4 - 全面搜索,速度最慢,但效果最好(正方形搜索 邊長為 2*半徑+1)

                                distance: -2*pel,

在finest level(最高解析層級)中的搜索半徑
=0 - 不在finest level(最高解析層級)搜索,可以提高搜索速度。
>0 - 固定範圍(以像素為單位)。
<0 - “自適應”範圍,基於區塊內對比差異大小。在低對比度區塊(例如黑色/灰色)中的搜索範圍很小或零,但是對於具有許多細節的區塊而言,範圍就會較大。普遍來說有效平均範圍約為該值的1/3*。
*譯者註:日系手繪動畫使用自適應範圍時,平均低於1/3 

                                sort: true,

透過上一個層級的SAD值排序,定義區塊掃描的順序,以便從較佳的預測開始搜索。
此選項始終在coarse levels(低解析層級)上被啟用,但在finest level(最高解析層級)上可能非常耗時。

                                satd: false,

在finest level(最高解析層級)使用SATD取代SAD函數,非常地慢,不要用!

                                coarse: {

在coarse levels(低解析層級)所使用的參數

                                                width: 1050,

使用coarse參數處理的最大階層clip寬度。
在處理超高解析度影片時(如4K),可以降低處理器負擔。

                                                type: 4,

搜索方法
2 - Hexagon search(六角形搜索),類似x264的HEX,
3 - Uneven Multi Hexagon(UMH)搜索,類似x264的UMH,
4 - 全面搜索,速度最慢,但效果最好。

                                                distance: 0,

搜索半徑
=0 - 相當於設為“-10”。
>0 - 固定範圍(以像素為單位)。
<0 - “自適應”範圍,基於區塊內對比差異大小。

                                                satd: true,

在每個coarse levels(低解析層級)上使用SATD函數取代SAD,改善閃爍和漸變時的運動向量預測。

                                                trymany: false,

試著搜索更多預測可能。

                                                bad: {

針對較差的向量進行廣域地第二次搜索。(官方翻譯為寬範圍搜索)

                                                           sad: 1000,
用以定義“壞向量“的SAD臨界值。
此值為縮放到8x8區塊後對應的值。

                                                           range:
-24
“壞區塊“的廣域搜索範圍。
正值表示使用UMH搜索,負值則為全面搜索。 
                                                           }
                                                }
                                },
                penalty: {

主要影響運動一致性的懲罰係數。

                                  lambda: 10.0,

設定向量場的一致性,越高越一致,但太高的話可能會錯過一些最佳向量。此值與MVTools計算方式不同。

                                  plevel: 1.5,

penalty.lambda在不同層級間縮放的模式。
1.0 - 不縮放,
2.0 - 線性,
4.0 - 二次方。

                                  lsad: 8000,

lambda所使用的SAD限制,如果預測向量的SAD值大於限制,則局部降低lambda值。
可以防止較差的預測結果,但也會降低運動的連貫性。
此值為縮放到8x8區塊後對應的值。

                                  pnew: 50,

新向量的SAD的懲罰函數係數(縮放到0-256範圍後對應的值)。
只有在當前計算的懲罰函數(SAD+SAD*pnew/256)比之前的SAD值還要小時,新的運動向量才會被視為比先前的更好。
它可以避免SAD比先前最佳略微好一點點,但運動方向卻完全不同的新向量替換成新的最佳向量。

                                  pglobal: 50,

全局預測向量的SAD相對懲罰(縮放到0-256範圍後對應的值)(lambda不作用於全局向量)。

                                  pzero: 100,

零向量的SAD相對懲罰(縮放到0-256範圍後對應的值)。防止略佳的向量被零向量所取代(lambda不作用於零向量)。

                                  pnbour: 50,

鄰近八個向量的SAD相對懲罰(縮放到0-256範圍後對應的值)。

                                  prev: 0,

“反向向量”(從反搜索方向找到的向量)SAD的相對懲罰(縮放到0-256範圍後對應的值),僅作用於“analyse.vectors:3”。

                                  }
                 },
refine: [ {

將finest層級區塊細化均分成四塊的每個網格重新計算,被定義成額外的層級。(取代MRecalculate函數)
原先區塊的內插向量被用來預測新的向量,並且重新計算SAD值。

                  thsad: 200,

只有高於SAD臨界丶低品質的新向量會藉由搜索來重新估算。
好的向量不會被改變,但其SAD值會被更新(重新計算)。
此值為縮放到8x8區塊後對應的值。若為零,表示不細化分析。

                  search: {

搜索參數。

                                  type: 4,

預設值與main.search.type相同。

                                  distance: pel,

預設值與super.pel相同。

                                  satd:
false
預設值與main.search.satd相同。
                                  },
                  penalty: {
                                  pnew:
50,
預設值與main.penalty.pnew相同。
                                  }
               } ],
special: {

一些在SVP中不作用的參數。

                delta:
1
分析的影格間格。

                }
}

SVConvert(vectors, isb: bool)
vectors:由SVAnalyse函數所生成的運動向量。
isb:提取哪個方向的向量。isb=false 向前, isb=true 向後。

SVSmoothFps(source, super, vectors, params_string, [sar]: float, [mt]: integer)

source:影片來源。
super:透過SVSuper函數所準備的多層畫面。
vectors:透過SVAnalyse函數所生成的運動向量資料。
params_string:格式為JSON的參數字串。
src:可選的,可以在ffdshow中取代light.sar。
mt:可選的,使用Avisynth 2.6 MT ver. 2.6.0.3的解決方法,應與SetMTMode()中所定義的執行緒數量相同。

{
  rate: {

目標幀率。

             num: 2,

幀率改變比值的分子。

             den: 1,

幀率改變比值的分母。

             abs: false

若此項為 true ,則 num/den 被定義成絕對幀率,而不是原始幀率的比值。

             },
  algo: 13,

渲染演算法或稱為「SVP著色器」,可以設為以下這些數值:
1 - 沒有任何重影的銳利圖像,透過下一幀至當前幀的運動向量來移動像素。
     只需要向後的運動向量("analyse.vectors: 2"),所以這是最快方法。
2 - 與方法 1 類似,但移動像素源自於時間最近的幀,因此會同時使用向後和向前的向量。
     推薦用於2D動畫。(譯者註:此建議為SVP官方建議,而非本Blog建議)
11 - 藉由向後和向前的部分運動補償,添加以時域為權重的重影。
13 - 與方法 11 很像,但添加動態中值。生成最少的偽影,不過在移動物件旁會有明顯光暈。
21 - 方法 11 加上額外的覆蓋/去除遮罩來達到降低光暈並且提高畫面邊緣。
23 - 方法 11 加上前後相接影格的額外向量,可以更進一步地降低光暈,比方法 21 不流暢些。

  block: false,

使用以區塊為基礎取代以像素基礎的運動補償。當顯示卡渲染開啟時,此項被限制為關閉。

  cubic: 1,

只在顯示卡渲染開啟時作用,
0 - 對於運動向量與所有遮罩使用雙線性插值。
1 - 使用雙立方插值。

  gpuid: 0,

設定渲染時要使用哪一張顯示卡,只在顯示卡渲染開啟時作用:
0 - 預設值 (使用第一個有效的顯示卡)
11 - 在第一OpenCL平台上使用第一顯示卡。
12 - 在第一OpenCL平台上使用第二顯示卡。
21 - 在第二OpenCL平台上使用第一顯示卡。等等...

  linear: true,

只在顯示卡渲染開啟時作用。當設為「true」時,將在線性光下渲染。

  mask: {

遮罩屬性

               cover: 100,

覆蓋/去除遮罩的強度,更高的值代表更強的遮罩。建議值 50 ~ 100。

               area: 0,
壞區遮罩(以向量的SAD值區分),此值越高代表更強的遮蔽效果。建議值 100,但它會急遽降低流暢度。

               area_sharp: 1.0

定義SAD與壞區遮罩關聯的指數。

               },
  scene: {

「轉場」控制設定

               mode: 3,

幀插補模式
0 - 恆定幀間隔,此為最流暢地的模式。舉例來說,當24->60轉換時,輸出將為:
    「1mmmm1mmmm...」,其中「1」表示原始畫面,而「m」為內插畫面。
1 - "1m" 模式,以上述例子來說則為「1mm1m1mm1m...」。以較低的流暢度來換取較少偽影。
2 - "2m" 模式,為「1m11m11m11...」。用更低的流暢度來換取更少的偽影。
3 - 自適應模式,基於整體向量場品質來切換 模式0丶1丶2。

               blend: false,
如果為「true」在轉場時使用重影,「false」則使用重複幀過渡。

               limits: {
向量場品質/轉場檢測的極限值
例:全部區塊中「調節後SAD值」大於"limits.scene"區塊所占全部區塊的百分比超過"limits.blocks"時,將會被辨識成轉場模式。但「調節後SAD值」不考慮低於"limits.zero"的部分,且「調節後SAD值」為區塊SAD值除以"block average luma"值。

                             m1: 1600,
從恆定幀間隔變成"1m"模式的閾值。

                             m2: 2800,
從"1m"模式變成"2m"的閾值。

                             scene: 4000,
變成轉場模式的閾值。

                             zero: 200
向量的「調節後SAD值」低於此值將被排除在外。

                             blocks: 20 
設定當區塊超過多少百分比時,將會改變模式。

                             },
               luma: 1.5
附加校正參數"average luma"值。

               },
  light: {
"Ambilight"-like black fields lighting.

  aspect: 0.0,

Screen aspect ratio defines black fields height (or width) and output video frame size.

  sar: 1.0,

Source video pixel aspect ratio.

  zoom: 0.0,

"Glow" (or "zoom out") effect size, in percents of original frame size.

  lights: 16,

Lights count.

  length: 100,

Flare length in percents.

  cell: 1.0,

Width of every light.

  border: 12

Height of averaging frame border.

             }
}



2017-07-12 01:06

更新內容
2017-07-18 修正翻譯錯誤及修飾字句
2017-08-08 修正翻譯錯誤及修飾字句
2017-08-31 修正翻譯錯誤及修飾字句
2017-09-07 修正翻譯錯誤及修飾字句
2017-11-22 修正翻譯錯誤及修飾字句

沒有留言:

張貼留言

熱門文章