目錄
- 前言
-
- 理論推導
-
- 1.線性變化
- 2.正弦函數變化
- 代碼更改
- 實際效果
前言
最近有小夥伴問我怎麼設定随時間改變放大因子,實作在一個視訊中放大倍數不斷變化的效果。現在我們來看一下。
理論推導
首先我們知道在視訊進行中,時間的概念是由幀數間接展現出來的。如下圖,我們打開一個視訊檔案,右鍵屬性可以檢視到視訊的幀頻Fr(frame rate)和總時長time。

那麼總的幀數len=Fr*time就可以求得。或是時間精度的問題,這裡的len在程式裡讀到301幀,并且放大部分是從第2幀到第291幀。舍棄了後10幀,第一幀未放大。故len=291.
本視訊推薦的放大因子alpha=10,我們讓alpha的波動範圍在(0,max)内。我們現在來設定alpha與時間變化關系。
令 a l p h a = f ( i ) alpha=f(i) alpha=f(i) 而 i = t × l e n t i m e i=t\times \dfrac{len}{time} i=t×timelen
其中 i 是程式處理到的幀數, t 是該幀數對應的時間。
則 a l p h a = f ( l e n t i m e t ) alpha=f(\dfrac{len}{time}t) alpha=f(timelent)
我們考慮以下幾種變化
1.線性變化
a l p h a = k × i + b alpha=k\times i+b alpha=k×i+b
将(2,0),(291,max)代入上式得到 k = m a x / 289 k=max/289 k=max/289 b = − 2 × m a x / 289 b=-2\times max/289 b=−2×max/289
不妨令max=50,就有 a l p h a = 50 / 289 × i − 100 / 289 alpha=50/289\times i-100/289 alpha=50/289×i−100/289代入 i = t × l e n t i m e i=t\times \dfrac{len}{time} i=t×timelen得到 a l p h a = 50 / 289 × t × l e n t i m e − 100 / 289 alpha=50/289\times t\times \dfrac{len}{time}-100/289 alpha=50/289×t×timelen−100/289就有 alpha 随時間 t 的變化關系。
2.正弦函數變化
這裡我們不妨将MAX設為100.取T=100,w=2pi/100.得到
a l p h a = 50 × s i n ( 2 p i / 100 × i ) + 50 alpha=50\times sin(2pi/100\times i)+50 alpha=50×sin(2pi/100×i)+50
代入 i = t × l e n t i m e i=t\times \dfrac{len}{time} i=t×timelen也能得到與時間t的關系
當然你也可以設定分段階躍函數或是二次函數等其他形式的變化。這裡不再枚舉。
代碼更改
在函數
amplify_spatial_lpyr_temporal_iir(inFile, resultsDir, 10, 16, 0.4, 0.05, 0.1);
中的
for i=startIndex+1:endIndex
語句前後加上
max=200;
w=0.0628;
for i=startIndex+1:endIndex
%線性變化
alpha=max/289.*i-2*max/289;
%正弦變化
%alpha=max/2.*sin(w.*i)+max/2;
其中的max和w自己設定。
實際效果
想要檢視具體效果可點選這裡下載下傳觀看。
提取碼:dq3p