FFplay文档解读-46-视频源,视频接收器
30. 視頻源
以下是當前可用視頻源的說明。
30.1 buffer
緩沖視頻幀,并使其可用于過濾器鏈。
該源主要用于編程用途,特別是通過'libavfilter/vsrc_buffer.h'中定義的接口。
它接受以下參數:
video_size指定緩沖視頻幀的大小(寬度和高度)。有關此選項的語法,請參考(ffmpeg-utils)視頻大小語法。
width輸入視頻寬度。
height輸入視頻高度。
pix_fmt表示緩沖視頻幀的像素格式的字符串。它可以是對應于像素格式的數字或像素格式名稱。
time_base指定緩沖幀的時間戳假定的時基。
frame_rate指定視頻流的預期幀速率。
pixel_aspect,sar輸入視頻的樣本(像素)寬高比。
sws_param指定用于縮放過濾器的可選參數,當在輸入大小或格式中檢測到輸入更改時,該過濾器將自動插入。
hw_frames_ctx使用硬件像素格式時,這應該是對描述輸入幀的AVHWFramesContext的引用。
例如:
buffer=width=320:height=240:pix_fmt=yuv410p:time_base=1/24:sar=1將指示源接受大小為320x240且格式為yuv410p的視頻幀,假設時間戳為時基和方形像素(1:1樣本寬高比)的1/24。由于名稱為yuv410p的像素格式對應于數字6(檢查'libavutil / pixfmt.h'中的枚舉AVPixelFormat定義),此示例對應于:
buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1或者,可以將選項指定為扁平字符串,但不推薦使用此語法:
width:height:pix_fmt:time_base.num:time_base.den:pixel_aspect.num:pixel_aspect.den[:sws_param]學習地址:音視頻新手快速入門必備系列-FFmpeg+SDL播放器開發實現-學習視頻教程-騰訊課堂
【文章福利】免費領取更多音視頻學習資料包、大廠面試題、技術視頻和學習路線圖,資料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以點擊1079654574加群領取哦~ ???
30.2 cellauto
創建由基本元胞自動機生成的模式。
元胞自動機的初始狀態可以通過‘filename’和‘pattern’選項來定義。如果未指定此類選項,則會隨機創建初始狀態。
在每個新幀中,視頻中的新行用下一代元胞自動機的結果填充。填充整個幀時的行為由scroll選項定義。
此來源接受以下選項:
filename,f從指定文件中讀取初始元胞自動機狀態,即起始行。在該文件中,每個非空白字符被視為活動單元格,換行符將終止該行,并且將忽略該文件中的其他字符。
pattern,p從指定的字符串中讀取初始元胞自動機狀態,即起始行。
字符串中的每個非空白字符都被視為活動單元格,換行符將終止該行,并且字符串中的其他字符將被忽略。
rate,r設置視頻速率,即每秒生成的幀數。默認值為25。
random_fill_ratio,ratio設置初始元胞自動機行的隨機填充率。它是浮點數值,范圍從0到1,默認為1/PHI。
指定文件或模式時,將忽略此選項。
random_seed,seed設置種子以隨機填充初始行,必須是0和UINT32_MAX之間的整數。如果未指定,或者顯式設置為-1,則過濾器將嘗試在盡力而為的基礎上使用良好的隨機種子。
rule設置元胞自動機規則,它是一個介于0到255之間的數字。默認值為110。
size,s設置輸出視頻的大小。有關此選項的語法,請參考(ffmpeg-utils)視頻大小語法。
如果指定了'filename'或'pattern',則默認情況下將大小設置為指定初始狀態行的寬度,并將高度設置為width*PHI。
如果設置了'size',則它必須包含指定模式字符串的寬度,并且指定的模式將在較大的行中居中。
如果未指定文件名或模式字符串,則大小值默認為“320x518”(用于隨機生成的初始狀態)。
scroll如果設置為1,則在輸出中的所有行都已填充時向上滾動輸出。如果設置為0,則在填充底行之后,新生成的行將寫在頂行。默認為1。
start_full,full如果設置為1,則在輸出第一幀之前完全用生成的行填充輸出。這是默認行為,禁用時將值設置為0。
stitch如果設置為1,則將左右行邊緣縫合在一起。這是默認行為,禁用時將值設置為0。
30.2.1 示例
-
從'pattern'讀取初始狀態,并指定大小為200x400的輸出。
cellauto=f=pattern:s=200x400 -
生成寬度為200個單元格的隨機初始行,填充率為2/3:
cellauto=ratio=2/3:s=200x200 -
創建由規則18生成的模式,該模式由以寬度為100的初始行為中心的單個活動單元開始:
cellauto=p=@:s=100x400:full=0:rule=18 -
指定更精細的初始模式:
cellauto=p='@@ @ @@':s=100x400:full=0:rule=18
30.3 coreimagesrc
在OSX上使用Apple的CoreImage API在GPU上生成的視頻源。
此視頻源是coreimage視頻濾鏡的專用版本。 在應用的過濾鏈的開頭使用核心圖像生成器來生成內容。
coreimagesrc視頻源接受以下選項:
list_generators列出所有可用的發電機及其各自的選項,以及可能的最小值和最大值以及默認值。
??list_generators=true
size, s指定源視頻的大小。 有關此選項的語法,請查閱(ffmpeg-utils)視頻大小語法。 默認值為320x240。
rate, r指定源視頻的幀速率,作為每秒生成的幀數。 它必須是frame_rate_num/frame_rate_den格式的字符串,整數,浮點數或有效視頻幀速率縮寫。 默認值為25。
sar設置源視頻的樣本寬高比。
duration, d設置源視頻的持續時間。 請參閱(ffmpeg-utils)接受語法的持續時間語法。
如果未指定,或者表達的持續時間為負,則視頻應該永久生成。
此外,還接受coreimage視頻過濾器的所有選項。 完整的過濾鏈可用于進一步處理生成的輸入而無需CPU-HOST傳輸。 有關詳細信息,請參閱coreimage文檔和示例。
30.3.1 示例
-
使用CIQRCodeGenerator為FFmpeg主頁創建QR代碼,作為Apple標準bash shell的完整和轉義命令行:
ffmpeg -f lavfi -i coreimagesrc=s=100x100:filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H -frames:v 1 QRCode.pn
此示例等同于coreimage的QRCode示例,而不需要nullsrc視頻源。
30.4 mandelbrot
生成Mandelbrot集分形,并逐漸縮放到start_x和start_y指定的點。
此來源接受以下選項:
end_pts設置終端pts值。 默認值為400。
end_scale設置終端比例值。 必須是浮點值。 默認值為0.3。
inner設置內部著色模式,即用于繪制Mandelbrot分形內部區域的算法。
它應采用以下值之一:
| black | 設置黑色模式 |
| convergence | 顯示時間直到收斂 |
| mincol | 根據最接近迭代原點的點設置顏色 |
| period | 設置期間模式 |
默認值是:mincol。
bailout設置bailout價值。 默認值為10.0。
maxiter設置渲染算法執行的最大迭代次數。 默認值為7189。
outer設置外部著色模式。 它應采用以下值之一:
| iteration_count | 設置迭代cound模式 |
| normalized_iteration_count | 設置規范化迭代計數模式 |
默認值是:normalized_iteration_count。
rate,r設置幀速率,表示為每秒幀數。 默認值為25。
size,s設置框架大小。 有關此選項的語法,請查閱(ffmpeg-utils)視頻大小語法。 默認值為640x480。
start_scale設置初始比例值。 默認值為3.0。
start_x設置初始x位置。 必須是介于-100和100之間的浮點值。默認值為-0.743643887037158704752191506114774。
start_y設置初始y位置。 必須是介于-100和100之間的浮點值。默認值為-0.131825904205311970493132056385139。
30.5 mptestsrc
生成由MPlayer測試過濾器生成的各種測試模式。
生成的視頻的大小是固定的,為256x256。 此源特別適用于測試編碼功能。
此來源接受以下選項:
rate,r指定源視頻的幀速率,作為每秒生成的幀數。 它必須是frame_rate_num/frame_rate_den格式的字符串,整數,浮點數或有效視頻幀速率縮寫。 默認值為25。
duration, d設置源視頻的持續時間。 請參閱(ffmpeg-utils)接受語法的持續時間語法。
如果未指定,或者表達的持續時間為負,則視頻應該永久生成。
test,t設置要執行的測試的編號或名稱。 支持的測試是:
| dc_luma |
| dc_chroma |
| freq_luma |
| freq_chroma |
| amp_luma |
| amp_chroma |
| cbp |
| mv |
| ring1 |
| ring2 |
| all |
默認值為all,它將循環顯示所有測試的列表。
下面是一些例子:
mptestsrc=t=dc_luma將生成dc_luma測試模式。
30.6 frei0r_src
提供frei0r源。
要啟用此過濾器的編譯,需要安裝frei0r標頭并使用--enable-frei0r配置FFmpeg。
此源接受以下參數:
size要生成的視頻大小。 有關此選項的語法,請查閱(ffmpeg-utils)視頻大小語法。
framerate生成視頻的幀率。 它可以是num/den形式的字符串或幀速率縮寫。
filter_name要加載的frei0r源的名稱。 有關frei0r以及如何設置參數的更多信息,請閱讀視頻過濾器文檔中的frei0r部分。
filter_params
傳遞給frei0r源的'|'分隔參數列表。
例如,要生成大小為200x200且幀速率為10的frei0r partik0l源,它覆蓋在覆蓋濾波器主輸入上:
frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay30.7 life
生成life模式。
這個來源是基于John Conway生活游戲的概括。
源輸入表示生命網格,每個像素表示可以處于兩種可能狀態之一(alive或dead)的單元格。每個細胞與其八個鄰居相互作用,這八個neighbours是水平,垂直或對角相鄰的cells。
在每次交互時,網格根據所采用的規則進化,該規則指定將使細胞保持活著或出生的相鄰活細胞的數量。 'rule'選項允許指定要采用的規則。
此來源接受以下選項:
filename,f設置從中讀取初始網格狀態的文件。在文件中,每個非空白字符都被視為活動單元格,而換行符用于分隔每行的結尾。
如果未指定此選項,則會隨機生成初始網格。
rate,r設置視頻速率,即每秒生成的幀數。默認值為25。
random_fill_ratio,ratio設置初始隨機網格的隨機填充率。它是浮點數值,范圍從0到1,默認為1/PHI。指定文件時會被忽略。
random_seed,seed設置填充初始隨機網格的種子,必須是0到UINT32_MAX之間的整數。如果未指定,或者顯式設置為-1,則過濾器將嘗試在盡力而為的基礎上使用良好的隨機種子。
rule設定life規則。
可以使用SNS/BNB類型的代碼指定規則,其中NS和NB是0-8范圍內的數字序列,NS指定使活細胞保持活動的活動相鄰小區的數量,以及NB使死細胞變為活著(即"born")的活著的鄰居細胞的數量。 s和b可分別代替S和B。
或者,規則可以由18位整數指定。如果9個高階位對于每個相鄰的活細胞數是活著的,則使用9個高階位來編碼下一個細胞狀態,低階位指定用于“生成”新細胞的規則。高階比特編碼更多數量的相鄰小區。例如,數字6153 =(12 << 9)+9指定保持活動規則12和出生規則9,其對應于S23/B03。
默認值是S23/B3,這是Conway最初的生命游戲規則,如果它有2個或3個相鄰的活細胞,它將保持細胞存活,并且如果死者周圍有三個活細胞,它將生成一個新細胞細胞。
size,s設置輸出視頻的大小。有關此選項的語法,請檢查(ffmpeg-utils)視頻大小語法。
如果指定了'filename',則默認情況下將大小設置為與輸入文件相同的大小。如果設置了size,則它必須包含輸入文件中指定的大小,并且該文件中定義的初始網格將在較大的結果區域中居中。
如果未指定文件名,則大小值默認為320x240(用于隨機生成的初始網格)。
stitch如果設置為1,則將左右網格邊緣縫合在一起,頂部和底部邊緣也縫合在一起。默認為1。
mold設定細胞模具速度。如果設置,死細胞將從'death_color'變為'mold_color',步驟為'mold'。 'mold'的值可以是0到255。
life_color設置生命(或新生)細胞的顏色。
death_color設置死細胞的顏色。如果設置了mold,這是用于表示死細胞的第一種顏色。
mold_color設定模具顏色,確定dead和moldy的cells。
有關這3種顏色選項的語法,請查閱(ffmpeg-utils)顏色語法。
30.7.1 Examples
-
從'pattern'讀取網格,并將其居中放在尺寸為300x300像素的網格上:
life=f=pattern:s=300x300 -
生成大小為200x200的隨機網格,填充率為2/3:
life=ratio=2/3:s=200x200 -
指定用于演變隨機生成的網格的自定義規則:
life=rule=S14/B34 -
使用ffplay進行slow death效果(mold)的完整示例:
ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
30.8 allrgb, allyuv, color, haldclutsrc, nullsrc, rgbtestsrc, smptebars, smptehdbars, testsrc, testsrc2, yuvtestsrc
allrgb源返回所有rgb顏色大小為4096x4096的幀。
allyuv源返回所有yuv顏色的大小為4096x4096的幀。
顏色源提供均勻彩色的輸入。
haldclutsrc源提供Hald CLUT標識。另見haldclut過濾器。
nullsrc源返回未處理的視頻幀。它主要用于分析/調試工具,或作為忽略輸入數據的過濾器的源。
rgbtestsrc源生成一個RGB測試模式,可用于檢測RGB與BGR問題。應該從上到下看到紅色,綠色和藍色條紋。
smptebars源根據SMPTE工程指南EG 1-1990生成彩條圖案。
smptehdbars源根據SMPTE RP 219-2002生成彩條模式。
testsrc源生成測試視頻模式,顯示顏色模式,滾動漸變和時間戳。這主要用于測試目的。
testsrc2源類似于testsrc,但支持更多像素格式而不僅僅是rgb24。這允許將其用作其他測試的輸入,而無需格式轉換。
yuvtestsrc源生成YUV測試模式。你應該從上到下看到y,cb和cr條紋。
來源接受以下參數:
level指定Hald CLUT的級別,僅在haldclutsrc源中可用。 N級生成N*N*N個N*N*N個像素的圖像,以用作3D查找表的單位矩陣。每個分量以1/(N*N)標度編碼。
color, c指定源的顏色,僅在顏色源中可用。有關此選項的語法,請查閱(ffmpeg-utils)顏色語法。
size,s指定源視頻的大小。有關此選項的語法,請檢查(ffmpeg-utils)視頻大小語法。默認值為320x240。
allrgb,allyuv和haldclutsrc過濾器不提供此選項。
rate,r指定源視頻的幀速率,作為每秒生成的幀數。它必須是frame_rate_num/frame_rate_den格式的字符串,整數,浮點數或有效視頻幀速率縮寫。默認值為25。
duration, d設置源視頻的持續時間。請參閱(ffmpeg-utils)接受語法的持續時間語法。
如果未指定,或者表達的持續時間為負,則視頻應該永久生成。
sar設置源視頻的樣本寬高比。
alpha指定背景的alpha(不透明度),僅在testsrc2源中可用。該值必須介于0(完全透明)和255(完全不透明,默認值)之間。
decimals, n設置要在時間戳中顯示的小數位數,僅在testsrc源中可用。
顯示的時間戳值將對應于原始時間戳值乘以指定值的10的冪。默認值為0。
30.8.1 示例
-
生成持續時間為5.3秒的視頻,大小為176x144,幀速率為每秒10幀:
testsrc=duration=5.3:size=qcif:rate=10 -
下面的圖形描述將生成一個不透明度為0.2的紅色光源,其大小為qcif,幀速率為每秒10幀:
color=c=red@0.2:s=qcif:r=10 -
如果要忽略輸入內容,則可以使用nullsrc。 以下命令使用geq過濾器在亮度平面中生成噪聲:
nullsrc=s=256x256, geq=random(1)*255:128:128
30.8.2 命令行
顏色源支持以下命令:
c, color設置創建圖像的顏色。 接受相應‘color’選項的相同語法。
30.9 openclsrc
使用OpenCL程序生成視頻。
sourceOpenCL程序源文件。
kernel程序中的內核名稱。
size,s要生成的幀大小。 必須設置此項。
format用于生成幀的像素格式。 必須設置此項。
rate,r
每秒生成的幀數。 默認值為25。
有關程序加載的工作方式的詳細信息,請參閱program_opencl過濾器。
示例程序:
-
通過設置輸出圖像中像素位置的像素值來生成顏色漸變。 (請注意,這適用于所有像素格式,但生成的輸出將不相同。)
__kernel void ramp(__write_only image2d_t dst,unsigned int index){int2 loc = (int2)(get_global_id(0), get_global_id(1));float4 val;val.xy = val.zw = convert_float2(loc) / convert_float2(get_image_dim(dst));write_imagef(dst, loc, val);} -
生成Sierpinski地毯圖案,每幀平移一個像素。
__kernel void sierpinski_carpet(__write_only image2d_t dst,unsigned int index){int2 loc = (int2)(get_global_id(0), get_global_id(1));float4 value = 0.0f;int x = loc.x + index;int y = loc.y + index;while (x > 0 || y > 0) {if (x % 3 == 1 && y % 3 == 1) {value = 1.0f;break;}x /= 3;y /= 3;}write_imagef(dst, loc, value);}
31.視頻接收器
以下是當前可用視頻接收器的說明。
31.1 buffersink
緩沖視頻幀,并使其可用于過濾器圖形的末尾。
此接收器主要用于程序化使用,特別是通過libavfilter/buffersink.h或選項系統中定義的接口。
它接受一個指向AVBufferSinkContext結構的指針,該結構定義傳入緩沖區的格式,作為opaque參數傳遞給avfilter_init_filter進行初始化。
31.2 nullsink
空視頻接收器:輸入視頻絕對不做任何事情。 它主要用作模板和用于分析/調試工具。
總結
以上是生活随笔為你收集整理的FFplay文档解读-46-视频源,视频接收器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【课程作业】实现高斯低通滤波器并与理想低
- 下一篇: 总结:那些热门的开源游戏服务器框架,还不