FFplay文档解读-39-视频过滤器十四
29.130 prewitt
應用prewitt運算符輸入視頻流。
過濾器接受以下選項:
planes設置要處理的平面,將復制未處理的平面。 默認值為0xf,將處理所有平面。
scale設定值將與過濾結果相乘。
delta設置將添加到篩選結果的值。
29.131 program_opencl
使用OpenCL程序過濾視頻。
sourceOpenCL程序源文件。
kernel程序中的內核名稱。
inputs過濾器的輸入數量。 默認為1。
size, s輸出幀的大小。 默認值與第一個輸入相同。
程序源文件必須包含具有給定名稱的內核函數,該函數將針對輸出的每個平面運行一次。 平面上的每次運行都會作為單獨的2D全局NDRange排隊,每個像素都會生成一個工作項。 因此,每個工作項的全局ID偏移量是目標圖像中像素的坐標。
?學習地址:音視頻新手快速入門必備系列-FFmpeg+SDL播放器開發實現-學習視頻教程-騰訊課堂
【文章福利】免費領取更多音視頻學習資料包、大廠面試題、技術視頻和學習路線圖,資料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以點擊1079654574加群領取哦~
??
內核函數需要采用以下參數:
- 目標圖像,__ write_only image2d_t。
??這個圖像將成為輸出; 內核應該寫出所有內容。
- 幀索引,unsigned int。
??這是一個從零開始的計數器,每幀增加一個。
- 源圖像,__ read_only image2d_t。
??這些是每個輸入的最新圖像。 內核可以從它們讀取以生成輸出,但是它們無法寫入。
示例程序如下:
-
將輸入復制到輸出(輸出必須與輸入的大小相同)。
__kernel void copy(__write_only image2d_t destination,unsigned int index,__read_only image2d_t source){const sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE;int2 location = (int2)(get_global_id(0), get_global_id(1));float4 value = read_imagef(source, sampler, location);write_imagef(destination, location, value);} -
應用簡單的轉換,使用索引計數器增加一個量的輸入。 采樣器對像素值進行線性插值,輸出的尺寸不必與輸入相同。
__kernel void rotate_image(__write_only image2d_t dst,unsigned int index,__read_only image2d_t src){const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |CLK_FILTER_LINEAR);float angle = (float)index / 100.0f;float2 dst_dim = convert_float2(get_image_dim(dst));float2 src_dim = convert_float2(get_image_dim(src));float2 dst_cen = dst_dim / 2.0f;float2 src_cen = src_dim / 2.0f;int2 dst_loc = (int2)(get_global_id(0), get_global_id(1));float2 dst_pos = convert_float2(dst_loc) - dst_cen;float2 src_pos = {cos(angle) * dst_pos.x - sin(angle) * dst_pos.y,sin(angle) * dst_pos.x + cos(angle) * dst_pos.y};src_pos = src_pos * src_dim / dst_dim;float2 src_loc = src_pos + src_cen;if (src_loc.x < 0.0f || src_loc.y < 0.0f ||src_loc.x > src_dim.x || src_loc.y > src_dim.y)write_imagef(dst, dst_loc, 0.5f);elsewrite_imagef(dst, dst_loc, read_imagef(src, sampler, src_loc));} -
將兩個輸入混合在一起,每個輸入的使用量隨索引計數器而變化。
__kernel void blend_images(__write_only image2d_t dst,unsigned int index,__read_only image2d_t src1,__read_only image2d_t src2){const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |CLK_FILTER_LINEAR);float blend = (cos((float)index / 50.0f) + 1.0f) / 2.0f;int2 dst_loc = (int2)(get_global_id(0), get_global_id(1));int2 src1_loc = dst_loc * get_image_dim(src1) / get_image_dim(dst);int2 src2_loc = dst_loc * get_image_dim(src2) / get_image_dim(dst);float4 val1 = read_imagef(src1, sampler, src1_loc);float4 val2 = read_imagef(src2, sampler, src2_loc);write_imagef(dst, dst_loc, val1 * blend + val2 * (1.0f - blend));}
29.132 pseudocolor
用偽彩色改變視頻中的幀顏色。
此過濾器接受以下選項:
c0設置像素第一組件表達式。
c1設置像素第二組件表達式。
c2設置像素第三組件表達式。
c3設置像素第四個組件表達式,對應于alpha組件。
i設置組件以用作改變顏色的基礎。
它們中的每一個都指定用于計算相應像素分量值的查找表的表達式。
表達式可以包含以下常量和函數:
w h輸入的寬度和高度。
val像素組件的輸入值。
ymin,umin,vmin,amin允許的最小組件值。
ymax,umax,vmax,amax允許的最大組件值。
所有表達式默認為val。
29.132.1 示例
-
將太高的亮度值更改為漸變:
pseudocolor="'if(between(val,ymax,amax),lerp(ymin,ymax,(val-ymax)/(amax-ymax)),-1):if(between(val,ymax,amax),lerp(umax,umin,(val-ymax)/(amax-ymax)),-1):if(between(val,ymax,amax),lerp(vmin,vmax,(val-ymax)/(amax-ymax)),-1):-1'"
29.133 psnr
獲取兩個輸入視頻之間的平均,最大和最小PSNR(峰值信噪比)。
此過濾器輸入兩個輸入視頻,第一個輸入被視為"main"源,并且不變地傳遞到輸出。 第二輸入用作用于計算PSNR的"reference"視頻。
兩個視頻輸入必須具有相同的分辨率和像素格式才能使此濾鏡正常工作。 此外,它假設兩個輸入具有相同的幀數,逐個進行比較。
通過測井系統打印獲得的平均PSNR。
濾波器存儲每幀的累積MSE(均方誤差),并且在處理結束時,它在所有幀上均等地平均,并且應用以下公式來獲得PSNR:
PSNR = 10*log10(MAX^2/MSE)其中MAX是圖像每個分量的最大值的平均值。
接下來的參數的描述如下。
stats_file,f如果指定,則過濾器將使用指定的文件來保存每個幀的PSNR。當filename等于-時,數據被發送到標準輸出。
stats_version指定要使用的stats文件格式的版本。每種格式的詳細信息如下。默認值為1。
stats_add_max確定是否將最大值輸出到統計日志。默認值為0。需要stats_version> = 2。如果設置且stats_version <2,則過濾器將返回錯誤。
此過濾器還支持framesync選項。
如果選擇了stats_file,則打印的文件包含表單鍵的鍵/值對序列:每個比較的幀對的值。
如果指定了stats_version大于1,則標題行位于每幀對統計數據列表之前,其中鍵值對遵循幀格式,并帶有以下參數:
psnr_log_version日志文件格式的版本。將匹配stats_version。
fields日志中包含的每幀對參數的逗號分隔列表。
每個所示的每幀對參數的描述如下:
n輸入幀的序號,從1開始
mse_avg均方誤差在所有圖像分量上平均的比較幀的逐像素平均差異。
mse_y,mse_u,mse_v,mse_r,mse_g,mse_b,mse_a均值平方誤差由后綴指定的組件的比較幀的逐像素平均差異。
psnr_y,psnr_u,psnr_v,psnr_r,psnr_g,psnr_b,psnr_a由后綴指定的組件的比較幀的峰值信噪比。
max_avg,max_y,max_u,max_v每個通道的最大允許值,以及所有通道的平均值。
例如:
movie = ref_movie.mpg,setpts = PTS-STARTPTS [main]; [main] [ref] psnr =“stats_file = stats.log”[out]在此示例中,正在處理的輸入文件與參考文件ref_movie.mpg進行比較。每個幀的PSNR存儲在stats.log中。
29.134 pullup
下拉式反轉(反轉電視電影)過濾器,能夠處理混合的硬電視電影,24000/1001 fps漸進和30000/1001 fps漸進內容。
上拉濾波器旨在利用未來的背景來做出決策。 此過濾器在沒有鎖定到要跟隨的模式的意義上是無狀態的,但它反過來期待以下字段以識別匹配并重建漸進幀。
要生成具有均勻幀率的內容,請在上拉后插入fps濾波器,如果輸入幀速率為29.97fps,則使用fps = 24000/1001,對于30fps使用fps = 24,使用(稀有)電視電影25fps輸入。
過濾器接受以下選項:
jl jr jt jb這些選項分別在圖像的左側,右側,頂部和底部設置要忽略的"junk"量。 左和右以8像素為單位,而頂部和底部以2行為單位。 默認值是每邊8像素。
sb設置嚴格的休息時間。 將此選項設置為1將減少濾波器生成偶然不匹配幀的機會,但也可能導致在高運動序列期間丟棄過多幀。 相反,將其設置為-1將使過濾器匹配字段更容易。 這可以幫助處理視頻,其中字段之間存在輕微模糊,但是也可能導致輸出中存在交錯幀。 默認值為0。
mp設置要使用的度量標準平面。 它接受以下值:
| l | 使用luma plane |
| u | 使用chroma blue plane |
| v | 使用chroma red plane |
可以將此選項設置為使用色度平面而不是默認亮度平面來進行濾波器的計算。 這可以提高非常干凈的源材料的準確度,但更有可能降低精度,尤其是在存在色度噪聲(彩虹效應)或任何灰度視頻的情況下。 將'mp'設置為色度平面的主要目的是減少CPU負載并使上拉在慢速機器上實時可用。
為獲得最佳結果(輸出文件中沒有重復的幀),必須更改輸出幀速率。 例如,要反轉電視電影NTSC輸入:
ffmpeg -i input -vf pullup -r 24000/1001 ...29.135 qp
更改視頻量化參數(QP)。
過濾器接受以下選項:
qp設置量化參數的表達式。
表達式通過eval API進行評估,并且可以包含以下常量:
known如果index不是129則為1,否則為0。
qp順序索引從-129到128。
29.135.1 示例
-
一些方程如下:
qp=2+2sin(PIqp)
29.136 random
將幀內部緩存中的視頻幀刷新為隨機順序。 沒有幀被丟棄。 靈感來自frei0r神經過濾器。
frames設置內部緩存幀數的大小,范圍為2到512。默認值為30。
seed為隨機數生成器設置種子,必須是0到UINT32_MAX之間的整數。 如果未指定,或者顯式設置為小于0,則過濾器將嘗試在盡力而為的基礎上使用良好的隨機種子。
29.137 readeia608
從視頻幀的頂行讀取隱藏式字幕(EIA-608)信息。
此過濾器為lavfi.readeia608.X.cc和lavfi.readeia608.X.line添加幀元數據,其中X是具有EIA-608數據的標識行的編號(從0開始)。每個元數據值的描述如下:
lavfi.readeia608.X.cc這兩個字節存儲為EIA-608數據(以十六進制打印)。
lavfi.readeia608.X.line識別和讀取EIA-608數據的行號。
此過濾器接受以下選項:
scan_min設置該行以開始掃描EIA-608數據。默認值為0。
scan_max將行設置為結束掃描EIA-608數據。默認值為29。
mac設置同步碼檢測的最小可接受幅度變化。默認值為0.2。允許范圍為[0.001 - 1]。
spw設置為同步代碼檢測保留的寬度比率。默認值為0.27。允許范圍為[0.01 - 0.7]。
mhd設置同步代碼檢測的最大峰高差。默認值為0.1。允許范圍是[0.0 - 0.5]。
mpd設置同步代碼檢測的最大峰值周期差。默認值為0.1。允許范圍是[0.0 - 0.5]。
msd設置前兩個最大起始碼位差異。默認值為0.02。允許范圍是[0.0 - 0.5]。
bhd設置與第3個起始碼位相比的位高度的最小比率。默認值為0.75。允許范圍為[0.01 - 1]。
th_w設置白色閾值。默認值為0.35。允許范圍是[0.1 - 1]。
th_b設置黑色閾值。默認值為0.15。允許范圍是[0.0 - 0.5]。
chp啟用檢查奇偶校驗位。如果出現奇偶校驗錯誤,則過濾器將為該字符輸出0x00。默認值為false。
29.137.1 示例
-
輸出具有顯示時間的csv和識別的EIA-608字幕數據的前兩行。
ffprobe -f lavfi -i movie=captioned_video.mov,readeia608 -show_entries frame=pkt_pts_time:frame_tags=lavfi.readeia608.0.cc,lavfi.readeia608.1.cc -of csv
29.138 readvitc
從視頻幀的頂行讀取垂直間隔時間碼(VITC)信息。
如果檢測到有效時間碼,則過濾器將幀元數據密鑰lavfi.readvitc.tc_str與時間碼值相加。 根據是否已找到時間碼數據,將進一步的元數據鍵lavfi.readvitc.found設置為0/1。
此過濾器接受以下選項:
scan_max設置要掃描VITC數據的最大行數。 如果該值設置為-1,則掃描完整的視頻幀。 默認值為45。
thr_b設置黑色的亮度閾值。 接受[0.0,1.0]范圍內的浮點數,默認值為0.2。 該值必須等于或小于thr_w。
thr_w設置白色的亮度閾值。 接受[0.0,1.0]范圍內的浮點數,默認值為0.6。 該值必須等于或大于thr_b。
29.138.1 示例
-
檢測VITC數據并將其繪制到視頻幀上; 如果沒有檢測到有效的VITC,請繪制--:--:--:--作為占位符:
ffmpeg -i input.avi -filter:v 'readvitc,drawtext=fontfile=FreeMono.ttf:text=%{metadata\\:lavfi.readvitc.tc_str\\:--\\\\\\:--\\\\\\:--\\\\\\:--}:x=(w-tw)/2:y=400-ascent'
29.139 remap
使用2nd:Xmap和3rd:Ymap輸入視頻流重新映射像素。
將從源(x,y)位置拾取位置(X,Y)處的目標像素,其中x = Xmap(X,Y)并且y = Ymap(X,Y)。 如果映射值超出范圍,則像素的零值將用于目標像素。
Xmap和Ymap輸入視頻流必須具有相同的尺寸。 輸出視頻流將具有Xmap / Ymap視頻流尺寸。 Xmap和Ymap輸入視頻流是16bit深度,單通道。
總結
以上是生活随笔為你收集整理的FFplay文档解读-39-视频过滤器十四的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Legacy Build System
- 下一篇: android 权限模型,android