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可使用的資訊。
SVSmoothFps可以改變原始影片的幀率,以達成轉換幀率丶慢動作效果等,
使用SVAnalyse所分析到的運動趨勢,在幀間內插中間幀,並透過遮罩來抑制偽影產生。
在了解各插件用途後,簡單說些各插件的參數(部分參數與補幀無明顯相關性的就不做翻譯,僅以原文替代)
SVSuper(source, params_string)
source:影片來源。以下為SVSuper的params_string列表
params_string:格式為JSON的參數字串,參數為可選的。
{
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參數。以下為SVAnalyse的params_string列表
params_string:格式為JSON的參數字串,參數為可選的。
src:Source clip,必須在super.full= false時定義。
{
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
},
algo: 13,
block: false,
cubic: 1,
gpuid: 0,
linear: true,
mask: {
cover: 100,
area: 0,
area_sharp: 1.0
},
scene: {
mode: 3,
blend: false,
limits: {
m1: 1600,
m2: 2800,
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"值。
從恆定幀間隔變成"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 修正翻譯錯誤及修飾字句
沒有留言:
張貼留言