在多媒体处理中,术语滤镜(filter)指的是修改未编码的原始音视频数据帧的一种软件工具。
● 在编码前,ffmpeg可以对raw(真实/原)音频和视频使用libavfilter库中的滤镜进行处理。(非压缩数据帧) ● 多个滤镜可以组成滤镜链图(滤镜链图filtergraphs )。 ● 在ffmpeg看来只有2种滤镜:简单滤镜,复合滤镜。
简单滤镜就是只有1个输入和输出的滤镜,滤镜两边的数据都是同一类型的,可以理解为在非压缩数据帧到再次编码前简单附加了一步:


complex filtergraph,通常是具有多个输入输出文件,并有多条执行路径;ffmpeg命令行中使用-lavfi、-filter_complex,基本原理图如下:

在libavfilter, 一个filter可以包含多个输入、多个输出。下图是一个filtergraph的示例:

在这个滤镜链图中,利用split滤镜把输入流分离成了两路流,其中一路通过crop滤镜和vfilp滤镜的同一路级联应用,再同另外一路一起通过overlay滤镜处理的流合成进行输出。则可以采用如下的命令行实现: 这个filtergraph可以用下面命令行表示: ffmpeg -i INPUT -vf "split main; [tmp] crop=iw:ih/2:0:0, vflip [flip]; main overlay=0:H/2" OUTPUT 这样最终输出将是视频上部是原始,下部是上部的镜像。(倒影效果) ffplay -i Irving_360p.mp4 -vf "split main; [tmp] crop=iw:ih/2:0:0, vflip [flip]; main overlay=0:H/2" 同一路的滤镜间用逗号(‘,’)进行分割,不同路的滤镜间用分号(‘;’)进行分割。
在这个例子里面crop和vflip是在同一路中的滤镜,split和overlay则不是同一路的(同一路的级联是对连续的视频进行,如果涉及到一输多、多输一或者多输多则都不是在同一路的,即不是同一路级联)。可以通过在方括号(’[]’)中的标签名来命名处理的链路。这个例子里,split滤镜生成了两路就通过[main]和[tmp]进行了标签命名以方便后续处理。 其中被split处理输出的第二路流被命名为[tmp],它又被crop滤镜处理裁去下半部视频,然后通过vflip进行了水平镜像(垂直翻转,即把视频镜像到下半部了)。这是整个输出被命名为flip。再把[main]与flip通过overlay进行覆盖合成,即把源输入通过split滤镜获得的[main]的上半部分覆盖到由crop和vflip滤镜级联处理的输出(这里的[flip])上最终得到了镜像结果。 一些滤镜支持参数列表: 滤镜名=由冒号(‘:’)隔开的多个参数
比如视频缩放、截取、翻转、叠加、模糊等。其中定义了很多的filter,例如以下常用的一filter。 缩放 ffplay -i good.mp4 -vf scale=iw/2:ih/2 叠加 ffmpeg -i good_scale.mp4 -i mark.png -filter_complex overlay=main_w-overlay_w-10:main_h-overlay_h-10 good_mark.mp4 裁剪 ffplay -i good_scale.mp4 -vf crop=w=200:h=200:x=100:y=0 截取视频 ffmpeg -i good_scale.mp4 -vf trim=10:30 good_trim.mp4 模糊 ffplay -i good.mp4 -vf boxblur=luma_radius=2:luma_power=1 边缘检测 ffplay -i good_scale.mp4 -vf "edgedetect=low=0.1:high=0.4"
一个滤镜链图(filtergraph)是连接滤镜的有向图。它可以包含循环动作,也可以在多个滤镜间形成链路,每个链接都有一个连接到滤镜的输入和一个连接到滤镜的输出。(参考)
滤镜链图采用文本表示,其有由一些ffmpeg和ffplay通用的选项-filter/-vf/-af和-filter_complex(ffmpeg)以及-vf/-af(ffplay)外加定义与libavfilter/avfilter.h的avfilter_graph_parse_ptr()等来描述。
(1)一个滤镜链包含序列链接起来的滤镜,这个序列由“,”分隔各个滤镜描述; (2)一个滤镜链图包含序列滤镜链,这个序列有“;”分隔各个滤镜链描述

一个滤镜由一个字符串表单表示: input_link_lable1... filter_name=parameters output_link_lable1...
(1) 输入输出都有连接标号(link lable),连接符号是可选项,在滤镜名和参数前 和 后 有一个连接标签列表。一个连接标签允许命名1个名字的连接,其作为滤镜的输入或者输出端口。 如果一个输出端没有命名标签,它默认连接到滤镜链上后面滤镜中第一个没有命名标签的输入端
(2) filter_name是滤镜类名字
(3) =arguments用于指定滤镜选项:参数表示法如下规则 (3.1)“:”分隔的key=value列表 举个例子:ffplay -i good.mp4 -vf scale=iw/2:ih/2 (3.2)一个“:”分隔的列表value值,在这种情况下,键(key)假定为选项名声明顺序 举个例子:ffplay -i good_scale.mp4 -vf fade=in:0:30(淡入视频的前30帧),按顺序声明了3个选项type、start_frame和nb_frames (3.3)上面两个规则混用 (3.4)如果选项的值本身就是一个列表(例如format滤镜有一个像素格式列表选项),则这种列表通常用“|”分隔 举个例子:将输入视频转换为列表中的任何格式 ffmpeg -i good_scale.mp4 -vf "format=pix_fmts=yuv420p|yuv444p|yuv410p" format.mp4
★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

FFmpeg工具目录下包含一个graph2dot程序可以用来分析滤镜链图描述并产生用dot语言描述的对应文本表示。 命令:dot -Tpng graph.tmp -o graph.png 描述文件:graph.tmp

生成图:

下载链接https://graphviz.org/download/
github的地址https://github.com/jrfonseca/gprof2dot.git
更多例子见附录的参考。
一些滤镜支持常规的enable选项。对于支持时间线编辑的滤镜,这个选项可以被设置为一个表达式,其通过评估之前的情况来决定是否把帧画面发送给滤镜。
例如,要在1秒到20秒允许一个blur(模糊)滤镜(smartblur),然后curves滤镜在3秒之后: ffplay -i good_scale.mp4 -vf "smartblur=enable='between(t,1,20)',curves=enable='gte(t,3)':preset=cross_process"
在过滤器操作期间,可以使用命令更改某些选项。 这些选项在ffmpeg -h filter = <过滤器名称>的输出上标记为“ T”。命令的名称是选项的名称,参数是新值。
一些具有多个输入的过滤器支持一组通用选项。 (1) eof_action(在secondary input上遇到EOF时采取的措施) repeat\endall\pass (2)shortest(如果设置为1,则在最短输入终止时强制输出终止。预设值为0。) (3)repeatlast(如果设置为1,则强制过滤器将辅助流的最后一帧扩展到主流的末尾。值为0禁用此行为。预设值为1。)
source filter(仅输出)、sink filter(仅输入)
(1) audio filter
(1.1)Audio Base
(1.2)Audio Sources
(1.3)Audio Sinks (2) video filter
(2.1)Base Video Filters
(2.2)OpenCL Video Filters
(2.3)VAAPI Video Filters
(2.4)Video Sources
(2.5)Video Sinks
(3)Multimedia filter
(3.1)Multimedia
(3.2)Multimedia Sources
8.1 acompressor (压缩器主要用于减小信号的动态范围,调整响度db)
8.2 acontrast (简单的音频动态范围压缩/扩展滤波器。) ps:音响的动态范bai围是指音响设备重放du时最大不失真输出功率与静态时系统zhi噪音输出功dao率之比的对数。单位为分贝(dB)。一般性能较好的音响系统的动态范围在100(dB)以上。
8.3 acopy (将输入音频源原样复制到输出。这主要用于测试目的。)
8.4 acrossfade(将交叉淡入淡出从一个输入音频流应用于另一输入音频流。交叉淡入淡出将在第一个流的结尾附近的指定持续时间内应用。) ffmpeg -i ca.mp3 -i see.mp3 -filter_complex acrossfade=d=10:c1=exp:c2=exp output.mp3
8.5 acrossover(将音频流分成几个频段。该滤波器将音频流分成两个或多个频率范围。) sub bass[20~65hz]这里是显示声音力量感的频段 Bass[65~250hz]定义声音肥瘦 节奏根音大都在在这个频段 提高250hz左右的频段可以在不影响清晰度的情况下给低频增加温暖感 中频[250~2000hz]决定了一个乐器有多突出 提升1000hz的频段可以给乐器增加质感 但这个频段过多使人感觉不适可能导致听觉疲劳 中高频[2000~6000hz]人耳对这个频段尤其敏感 即使提升很小的量 也会给声音造成质变 对这个频段需要小心处理 高频[6000~10000hz]这个频段可以听到一些刺耳的声音 提高这个频段可以增加明亮感 降低这个频段增加温暖感
8.6 acrusher(降低音频位分辨率。用于减少音频信号的采样位数。使声音柔和)
8.7 acue(延迟音频过滤,直到给定的墙上时钟时间戳。)
8.8 adeclick (消除输入音频中的脉冲噪声。)
8.9 adeclip (从输入音频中删除剪辑的样本。)
8.10 adelay (延迟一个或多个音频通道。) ffplay -i ca.mp3 -af "adelay=1500|0|500"
8.11 aderivative, aintegral (计算音频流的导数/积分。)
8.12 aecho (将回声应用于输入音频。) 更长的延迟听起来像山区的露天音乐会(输入增益:输出增益:延迟:衰变) ffplay -i ca.mp3 -af "aecho=0.8:0.9:1000:0.3"
8.13 aemphasis(音频强调过滤器可以创建或恢复直接从具有不同过滤器曲线的LP或重点CD中获取的素材。先通过滤波器更改信号,以消除该记录介质的缺点。)
8.14 aeval(根据指定的表达式修改音频信号。) 采样率、输入输出通道数、音量等 ffplay -i ca.mp3 -af "aeval=val(ch)/5:c=same"(音量减小到1/5)
8.15 afade(将淡入/淡出效果应用于输入音频。) ffplay -i ca.mp3 -af "afade=t=in:ss=0:d=15" (淡入15秒)
8.16 afftdn(使用FFT对音频样本进行除噪。)
8.17 afftfilt(将任意表达式应用于频域中的样本) 在音频中几乎只保留低频 ffplay -i ca.mp3 -af afftfilt="'real=re * (1-clip((b/nb)b,0,1))':imag='im * (1-clip((b/nb)b,0,1))'"
8.18 afir (应用任意的有限冲激响应滤波器。可用作数字分频器滤波器,房间均衡,串扰消除,波场合成,听觉化,歧义,歧义和空间化的组件。)
8.19 aformat (设置输入音频的输出格式约束。该框架将协商最合适的格式以最大程度地减少转化。)
8.20 agate(门控主要用于减少信号的过低。这种信号处理可减少有用信号之间的干扰噪声。)
8.21 aiir(应用任意的无限冲激响应滤波器。) 在5000Hz左右施加2极椭圆形陷波,采样率为48000 Hz ffplay -i ca.mp3 -af "aiir=k=1:z=7.957584807809675810E-1 -2.575128568908332300 3.674839853930788710 -2.57512875289799137 7.957586296317130880E-1:p=1 -2.86950072432325953 3.63022088054647218 -2.28075678147272232 6.361362326477423500E-1:f=tf:r=d"
8.22 alimiter(限幅器可防止输入信号超过所需的阈值。)
8.23 allpass(全通滤波器可更改音频的频率与相位关系,而不会更改其频率与振幅关系。)
8.24 aloop (循环音频样本。)
8.25 amerge(将两个或多个音频流合并为一个多通道流。)
8.26 amix(将多个音频输入混合为一个输出。)
8.27 amultiply(将第一音频流与第二音频流相乘,并将结果存储在输出音频流中。通过将来自第一流的每个样本与来自第二流的相同位置的样本相乘来完成乘法。)
8.28 anequalizer(每个通道的高阶参数多频带均衡器。)
8.29 anlmdn(使用非本地均值算法减少音频样本中的宽带噪声。)
8.30 anlms(使用第二个音频流将标准化的最小均方算法应用于第一个音频流。)
8.31 anull(将未更改的音频源传递到输出。)
8.32 apad(用静音填充音频流的结尾。)
8.33 aphaser(向输入音频添加定相效果。)
8.34 apulsator(音频脉冲发生器介于自动调音台和颤音之间。但是它也可以产生有趣的立体声效果。)
8.35 aresample(使用libswresample库将输入音频重新采样为指定的参数。使用libswresample库将输入音频重新采样为指定的参数。) ffplay -i ca.mp3 -af aresample=44100
8.36 areverse(反转音频剪辑。)
8.37 arnndn(使用递归神经网络减少语音噪声。需要模型文件) 8.38 asetnsamples(设置每个输出音频帧的样本数。)
8.39 asetrate(在不更改PCM数据的情况下设置采样率。这将导致速度和螺距的变化。)
8.40 ashowinfo(显示一行,其中包含每个输入音频帧的各种信息。输入音频未修改。)
8.41 asoftclip(应用音频软剪辑。)
8.42 asr(自动语音识别,需要模型)
8.43 astats(显示有关音频通道的时域统计信息。计算并显示每个音频通道的统计信息,并在适用的情况下还提供总体数字。)
8.44 asubboost(提高低音炮频率。)
8.45 atempo(调整音频速度。) ffplay -i ca.mp3 -af atempo=3
8.46 atrim(修剪输入,以便输出包含输入的一个连续子部分。) 删除除输入第二分钟外的所有内容 ffmpeg -i INPUT -af atrim=60:120 ffmpeg -i ca.mp3 -af atrim=5:30 ca_trim.mp3
8.47 axcorrelate(计算两个输入音频流之间的归一化互相关。)
8.48 bandpass
8.49 bandreject
8.50 bass, lowshelf(使用两极置物架滤波器来增强或削减音频的低音(较低)频率,其响应类似于标准高保真音调控制。这也称为搁架均衡(EQ)。)
8.51 biquad(应用具有给定系数的双二阶IIR滤波器。)
8.52 bs2b(鲍尔(Bauer)立体声转换为双耳,可改善立体声音频记录的耳机收听效果。)
8.53 channelmap(将输入通道重新映射到新位置。)
8.54 channelsplit(将每个通道从输入音频流拆分为单独的输出流。)
8.55 chorus(向音频添加合唱效果。) 具有三个延迟的更丰富的合唱: ffplay -i ca.mp3 -af "chorus=0.5:0.9:50|60|40:0.4|0.32|0.3:0.25|0.4|0.3:2|2.3|1.3"
8.56 compand(压缩或扩展音频的动态范围。) 使音乐既安静又响亮,适合在嘈杂的环境中收听 ffplay -i ca.mp3 -af "compand=.3|.3:1|1:-90/-60|-60/-40|-40/-30|-20/-20:6:0:-90:0.2"
8.57 compensationdelay(补偿延迟线是基于度量的延迟,用于补偿麦克风或扬声器的不同位置。)
8.58 crossfeed(应用耳机交叉馈电过滤器。)
8.59 crystalizer(扩展音频动态范围的简单算法。)
8.60 dcshift(对音频应用直流偏移。)
8.61 deesser(测对音频样本进行de-essing处理。)
8.62 drmeter(测量音频动态范围。)
8.63 dynaudnorm(动态音频规范化器。)
8.64 earwax(使音频更易于在耳机上收听。)
8.65 equalizer(应用两极峰均化(EQ)滤波器。)
8.66 extrastereo(线性增加左右声道之间的差异,从而在播放中增加某种“实时”效果)
8.67 firequalizer(使用任意频率响应进行FOR均衡。)
8.68 flanger(对音频应用镶边效果。)
8.69 haas(将哈斯效果应用于音频。)
8.70 hdcd(解码高清兼容数字(HDCD)数据。具有嵌入式HDCD代码的16位PCM流被扩展为20位PCM流)
8.71 headphone
8.72 highpass
8.73 join(将多个输入流合并为一个多通道流。)
8.74 ladspa(加载LADSPA(Linux音频开发人员的简单插件API)插件。要启用此过滤器的编译,您需要使用--enable-ladspa配置FFmpeg。)
8.75 loudnorm
8.76 lowpass(应用点频为3dB的低通滤波器。)
8.77 lv2 8.78 mcompand
8.79 pan
8.80 replaygain
8.81 resample
8.82 rubberband
8.83 sidechaincompress
8.84 sidechaingate
8.85 silencedetect(检测音频流中的静音。)
8.86 silenceremove(消除音频开头,中间或结尾的静音。)
8.87 sofalizer
8.88 stereotools
8.89 stereowiden
8.90 superequalizer
8.91 surround
8.92 treble, highshelf
8.93 tremolo
8.94 vibrato
8.95 volume(调整输入音频音量。)
8.96 volumedetect(检测输入视频的音量。)
stereo双声道、mono单声道
9.1 abuffer(缓冲音频帧,并使它们可用于过滤器链。该资源主要用于编程用途,尤其是通过libavfilter / buffersrc.h中定义的接口。) 9.2 aevalsrc(生成表达式指定的音频信号。) 生成频率为440 Hz的正弦信号,将采样率设置为8000 Hz ffplay -f lavfi aevalsrc="sin(4402PI*t):s=8000" 产生白噪声 aevalsrc="-2+random(0)" 9.3 afirsrc(使用频率采样方法生成FIR系数。) 9.4 anullsrc(空音频源,返回未处理的音频帧。它主要用作模板并在分析/调试工具中使用,或用作忽略输入数据的过滤器(例如sox合成过滤器)的来源。) 9.5 flite(使用libflite库合成语音。要启用此过滤器的编译,您需要使用--enable-libflite配置FFmpeg。) 9.6 anoisesrc(产生噪音音频信号。) ffplay -f lavfi anoisesrc=d=60:c=pink:r=44100:a=0.5 9.7 hilbert(生成奇抽头希尔伯特变换FIR系数。) 9.8 sinc(生成Sinc Kaiser窗式低通,高通,带通或带阻FIR系数。) 9.9 sine(生成由振幅为1/8的正弦波组成的音频信号。)
10.1 abuffersink(缓冲音频帧,并使它们可用于过滤器链的末尾。该接收器主要用于编程用途,尤其是通过libavfilter / buffersink.h或选项系统中定义的接口。) 10.2 anullsink(空音频接收器;输入音频绝对不做任何事情。它主要用作模板并用于分析/调试工具。)
音频解码后,可以avfilter api对解码出来的AVFrame进行效果处理,如音量调节,变速处理。多个音频输入还可以进行混音处理单输入过滤器解码流程 解码出
AVFrame -> abuffer-> 其他过滤器(volume)...->aformat->abuffersink->过滤后的AVFrame
这里看到有三个通用的过滤器,abuffer,aformat,abuffersink。abuffer用于接收输入frame,形成待处理的数据缓存,abuffersink用于传出输出Frame,aformat过滤器约束最终的输出格式(采样率,声道数,存储位数等),这三个不可缺少。而中间的其他过滤器可以串联多个filter,如volume,atempo
比如视频缩放、截取、翻转、叠加、模糊等。其中定义了很多的filter,例如以下常用的一filter。
scale:视频/图像的缩放(libswscale, 强制原输入的高宽比)(https://ffmpeg.org/ffmpeg-filters.html#scale-1)
(1)ffplay -i good.mp4 -vf scale=640:360
(2)ffplay -i good.mp4 -vf scale=iw/2:ih/2
(3)ffmpeg -i mark.png -vf scale=iw2:ih2 mark_scale.png
overlay:视频/图像的叠加(https://ffmpeg.org/ffmpeg-filters.html#overlay-1)
ffmpeg -i good_scale.mp4 -i mark.png -filter_complex overlay good_mark.mp4
ffmpeg -i good_scale.mp4 -i mark.png -filter_complex overlay=main_w-overlay_w-10:main_h-overlay_h-10 good_mark.mp4
crop:视频/图像的裁剪(https://ffmpeg.org/ffmpeg-filters.html#crop)
裁剪尺寸为200x200的中央输入区域
ffplay -i good_scale.mp4 -vf crop=200:200
裁剪长宽200x200,位置(100,0)左上角起始
ffplay -i good_scale.mp4 -vf crop=w=200:h=200:x=100:y=0
从左右边界裁剪10个像素,从上下边界裁剪20个像素
ffplay -i good_scale.mp4 -vf crop=in_w-210:in_h-220
应用颤抖效果
ffplay -i good_scale.mp4 -vf "crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)sin(n/7)"
trim:截取视频的片段(https://ffmpeg.org/ffmpeg-filters.html#trim)
截取视频10s到30s的内容,这里音频还在
ffmpeg -i good_scale.mp4 -vf trim=10:30 good_trim.mp4
rotate:以任意角度旋转视频(https://ffmpeg.org/ffmpeg-filters.html#rotate)
(1)顺时针旋转输入PI / 6弧度
ffplay -i good_scale.mp4 -vf rotate=PI/6
(2)从PI / 3的角度开始,以周期T进行恒定旋转(T=10就是10s)
ffplay -i good_scale.mp4 -vf "rotate=PI/3+2PIt/T:fillcolor = red"
(3)使输入视频旋转以T秒的周期和A弧度的幅度振荡(A = 5, T = 10)
ffplay -i good_scale.mp4 -vf rotate=Asin(2PI/T*t)
ffplay -i Irving_360p.mp4 -vf "crop=iw/2:ih:0:0,splitleft;[tmp]hflip[right];left hstack"
ffplay -i Irving_360p.mp4 -vf "split main; [tmp] crop=iw:ih/2:0:0, vflip [flip]; main overlay=0:H/2"
ffplay -i good.mp4 -vf boxblur=luma_radius=2:luma_power=1
colorchannelmixer 可以设置rgba四个分量的变换关系,共接受16个参数
rrrgrbragrgggbgabrbgbbbaaragabaa
参数本质就是加权求值时候的权重,每个参数接受0-1得值,滤镜本
质是将每个颜色值加权求值.公式:red=redrr+bluerb+greenrg+alphara 。green/blue和alpha同理。参数默认值对应得是1,其他为0.如:rr,rg,rb,ra。其中rr默认为1,其他为0。
ffplay -i good_scale.mp4 -vf "colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3"
之所以会是灰阶效果,原因是将每个颜色分量相等,所以rgb混合后为透明度不同得黑色
褐色处理:
ffplay -i good_scale.mp4 -vf "colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131"
edgedetect 边缘检测
感觉这个最好还是当作中间操作来用,因为单纯过这个滤镜并不会有什么美感,但是边缘检测却是实现其他操作的必经之路,比如:油画效果,动画片效果等等。
ffplay -i good_scale.mp4 -vf "edgedetect=low=0.1:high=0.4"
添加油画效果
ffplay -i good_scale.mp4 -vf "edgedetect=mode=colormix:high=0"
geq 功能特别强大,因为它不仅仅因为它接受的参数众多,而且表达式也很多,所以可以动态的设置很多东西,甚至可以跟播放进度产生关系,进而达到视频闪烁的效果。
根据像素位置修改RGB分量
ffplay -i good_scale.mp4 -vf "geq=r='X/Wr(X,Y)':g='(1-X/W)g(X,Y)':b='(H-Y)/H*b(X,Y)'"
要启用这些过滤器的编译,需要使用--enable-opencl配置FFmpeg。运行OpenCL筛选器要求您初始化硬件设备,并将该设备传递给任何筛选器图中的所有筛选器。
由于OpenCL过滤器无法访问普通内存中的帧数据,因此所有帧数据需要先上传(hwupload)到连接到适当设备的硬件表面,然后再使用,然后再下载(hwdownload)回到普通存储器。请注意,hwupload将以与软件框架相同的布局上载到表面,因此可能有必要在将输入转换为正确格式之前立即添加格式过滤器,并且hwdownload不支持输出中的所有格式-这可能必须在图表后立即插入一个附加的格式过滤器,以获取受支持格式的输出。
12.1 avgblur_opencl
12.2 boxblur_opencl
12.3 colorkey_opencl(RGB色彩空间颜色键控。)
12.4 convolution_opencl(应用3x3、5x5、7x7矩阵的卷积)
12.5 erosion_opencl(对视频应用腐蚀效果。)
12.6 deshake_opencl(基于特征点的视频稳定滤波器。防抖)
12.7 dilation_opencl(将膨胀效果应用于视频。)
12.8 nlmeans_opencl(通过OpenCL的非本地均值降噪过滤器)
12.9 overlay_opencl(将一个视频叠加在另一个视频上。)
12.10 pad_opencl(将填充物添加到输入图像,并将原始输入放置在提供的x,y坐标处。)
12.11 prewitt_opencl
12.12 program_opencl(使用OpenCL程序过滤视频。)
12.13 roberts_opencl
12.14 sobel_opencl(应用Sobel运算符,边缘检测用的算子)
12.15 tonemap_opencl(通过色调映射执行HDR(PQ / HLG)到SDR的转换。)
12.16 unsharp_opencl(锐化或模糊输入视频。)
12.17 xfade_opencl(使用OpenCL交叉淡化具有自定义过渡效果的两个视频。)
5.8 VAAPI Video Filters(Video Acceleration API) 针对Intel CPU X86架构平台,可采用FFmpeg+VAAPI的硬解方案。其中,FFmpeg用于处理各种格式的视频解码;VAAPI则提供对硬件加速视频处理的访问,处理流程图如下。

image VAAPI视频过滤器通常与VAAPI解码器和VAAPI编码器一起使用。以下是VAAPI视频过滤器的说明。要启用这些过滤器的编译,您需要使用--enable-vaapi配置FFmpeg
5.9 Video Sources(10)
(1)cellauto 创建由基本元胞自动机生成的模式。 ffplay -f lavfi -i cellauto=ratio=2/3:s=200x200 (2)mptestsrc 生成由MPlayer测试过滤器生成的各种测试模式。 ffplay -f lavfi -i mptestsrc=t=dc_luma (3)life 生成细胞动态模式。 ffplay -f lavfi -i life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
5.10 Multimedia Filter(30)
用于音频转为视频的显示(频率等),
16.1 abitscope(将输入音频转换为视频输出,显示音频位范围。)
16.2 adrawgraph(使用输入的音频元数据绘制图形。)
16.3 agraphmonitor
16.4 ahistogram(将输入音频转换为视频输出,显示音量直方图。)
16.5 aphasemeter(测量输入音频的相位,将其导出为元数据l)
16.6 avectorscope(将输入音频转换为视频输出,代表音频矢量范围。) ffplay -f lavfi "amovie=ca.mp3, asplit a; [a] avectorscope=zoom=1.3:rc=2:gc=200:bc=10:rf=1:gf=8:bf=7 [out0]"
16.7 bench, abench(筛选器的基准部分。)
16.8 concat(连接音频和视频流,一个接一个地将它们连接在一起。该过滤器适用于同步视频和音频流的片段。所有段的每种类型必须具有相同数量的流,并且这也将是输出中的流数量。)
16.9 ebur128
16.10 interleave, ainterleave(临时交错来自多个输入的帧。)
16.11 metadata, ametadata
16.12 perms, aperms
16.13 realtime, arealtime
16.14 select, aselect(选择要传递的帧。)
16.15 sendcmd, asendcmd
16.16 setpts, asetpts(更改输入帧的PTS(演示时间戳记)。)
16.17 setrange
16.18 settb, asettb
16.19 showcqt(将输入音频转换为代表频谱的视频输出) ffplay -f lavfi "amovie=ca.mp3, asplit a; [a] showcqt [out0]" ffplay -f lavfi "aevalsrc=0.1sin(2PI55t)+0.1sin(4PI55t)+0.1sin(6PI55t)+0.1sin(8PI55t),asplita; [a] showcqt [out0]"
16.20 showfreqs(将输入音频转换为代表音频功率谱的视频输出)
16.21 showspatial(将立体声输入音频转换为视频输出,以表示两个通道之间的空间关系。)
16.22 showspectrum 将输入音频转换为代表音频频谱的视频输出。 ffplay -f lavfi "amovie=ca.mp3, asplit a; [a] showspectrum=mode=separate:color=intensity:slide=1:scale=cbrt [out0]"
16.23 showspectrumpic
16.24 showvolume(将输入音频音量转换为视频输出。)
16.25 showwaves
16.26 showwavespic
16.27 sidedata, asidedata
16.28 spectrumsynth
16.29 split, asplit(将输入音频音量转换为视频输出。split使用音频输入,使用视频分割。)
16.30 zmq, azmq
5.11 Multimedia Source
movie/amovie 从movie容器中读取音频和/或视频流。
6. 水印、截图、人物滤镜等常用命令
(1) 水印 overlaye ffmpeg -i good_scale.mp4 -i mark.png -filter_complex overlay=10:10 good_mark.mp4
(2) 人物滤镜 colorchannelmixer
(3) 截取视频片段 copy ffmpeg -ss 5 -i input.mp4 -t 10 -c:v copy -c:a copy output.mp4 //-ss 5指定从输入视频第5秒开始截取,-t 10指明最多截取10秒。
(4) 把视频文件推送到rtmp服务器(ffmpeg -re -i jack.mp4 -c copy -f flv rtmp://host/live/test)
(5) 分离/合并视频音频流 (copy) ffmpeg -i input-video -vn -c:a copy output-audio //分离音频流 ffmpeg -i input-video -c:v copy -an output-video //分离视频流 ffmpeg -i input-video -c:v copy -an output-video -c:a -vn output-audio //同时分离音频和视频流 ffmpeg -i video_file -i audio_file -c:v copy -c:a copy output_file //合并视频音频流
(6) 视频截图 ffmpeg -ss 01:23:45 -i input -vframes 1 -q:v 2 output.jpg
(7) 图片序列与视频的互相转换 ffmpeg -i %04d.jpg output.mp4 ffmpeg -i input.mp4 %04d.jpg \第一行命令是把0001.jpg、0002.jpg、0003.jpg等编码成output.mp4, \第二行则是相反把input.mp4变成0001.jpg……。 \%04d.jpg表示从1开始用0补全的4位整数为文件名的jpg文件序列。
(8) 视频中去水印delogo ffmpeg -i good_mark.mp4 -vf delogo=x=10:y=10:w=100:h=60 delogo.mp4 (ffmpeg -i good_scale.mp4 -i mark.png -filter_complex overlay=10:10 good_mark.mp4 加水印)
6. 参考文章
[1]. http://ffmpeg.org/ffmpeg.html#Filtering
[2]. https://ffmpeg.org/ffmpeg-filters.html
[3]. https://www.bookstack.cn/read/other-doc-cn-ffmpeg/ffmpeg-doc-cn-30.md
[4]. FFmpeg filter的使用介绍
[5]. https://www.bogotobogo.com/FFMpeg/ffmpeg_image_scaling_jpeg.php
[6]. 使用gprof2dot和graphivz生成程序运行调用图
[7]. Graphviz 画图和例子
[8]. Graphviz典型例子
[9]. https://restream.io/blog/what-is-low-latency/
作者:DoubleLi
★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p
我正在尝试使用以下代码通过将ffmpeg实用程序作为子进程运行并获取其输出并解析它来确定视频分辨率:IO.popen'ffmpeg-i'+path_to_filedo|ffmpegIO|#myparsegoeshereend...但是ffmpeg输出仍然连接到标准输出并且ffmepgIO.readlines是空的。ffmpeg实用程序是否需要一些特殊处理?或者还有其他方法可以获得ffmpeg输出吗?我在WinXP和FedoraLinux下测试了这段代码-结果是一样的。 最佳答案 要跟进mouviciel的评论,您需要使用类似pope
一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
开门见山|拉取镜像dockerpullelasticsearch:7.16.1|配置存放的目录#存放配置文件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/config#存放数据的文件夹mkdir-p/opt/docker/elasticsearch/node-1/data#存放运行日志的文件夹mkdir-p/opt/docker/elasticsearch/node-1/log#存放IK分词插件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/plugins若你使用了moba,直接右键新建即可如上图所示依次类推创建
文章目录概念索引相关操作创建索引更新副本查看索引删除索引索引的打开与关闭收缩索引索引别名查询索引别名文档相关操作新建文档查询文档更新文档删除文档映射相关操作查询文档映射创建静态映射创建索引并添加映射概念es中有三个概念要清楚,分别为索引、映射和文档(不用死记硬背,大概有个印象就可以)索引可理解为MySQL数据库;映射可理解为MySQL的表结构;文档可理解为MySQL表中的每行数据静态映射和动态映射上面已经介绍了,映射可理解为MySQL的表结构,在MySQL中,向表中插入数据是需要先创建表结构的;但在es中不必这样,可以直接插入文档,es可以根据插入的文档(数据),动态的创建映射(表结构),这就
HTTP缓存是指浏览器或者代理服务器将已经请求过的资源保存到本地,以便下次请求时能够直接从缓存中获取资源,从而减少网络请求次数,提高网页的加载速度和用户体验。缓存分为强缓存和协商缓存两种模式。一.强缓存强缓存是指浏览器直接从本地缓存中获取资源,而不需要向web服务器发出网络请求。这是因为浏览器在第一次请求资源时,服务器会在响应头中添加相关缓存的响应头,以表明该资源的缓存策略。常见的强缓存响应头如下所述:Cache-ControlCache-Control响应头是用于控制强制缓存和协商缓存的缓存策略。该响应头中的指令如下:max-age:指定该资源在本地缓存的最长有效时间,以秒为单位。例如:Ca
如何用IDEA2022创建并初始化一个SpringBoot项目?目录如何用IDEA2022创建并初始化一个SpringBoot项目?0. 环境说明1. 创建SpringBoot项目 2.编写初始化代码0. 环境说明IDEA2022.3.1JDK1.8SpringBoot1. 创建SpringBoot项目 打开IDEA,选择NewProject创建项目。 填写项目名称、项目构建方式、jdk版本,按需要修改项目文件路径等信息。 选择springboot版本以及需要的包,此处只选择了springweb。 此处需特别注意,若你使用的是jdk1
我运行的是OSX,对视频转换一无所知。但我有大约200个视频都是mp4格式,无法在Firefox中播放。我需要将它们转换为ogg才能使用html5视频标签。这些文件位于一个文件夹结构中,这使得一次一个地处理一个文件变得困难。我希望bash命令或Ruby命令遍历所有子文件夹并找到所有.mp4并转换它们。我找到了一份关于如何使用Google执行此操作的引用资料:http://athmasagar.wordpress.com/2011/05/12/a-bash-script-to-convert-mp4-files-to-oggogv/#!/bin/bashforfin$(ls*mp4|se
前言上一篇我们简要讲述了粒子系统是什么,如何添加,以及基本模块的介绍,以及对于曲线和颜色编辑器的讲解。从本篇开始,我们将按照模块结构讲解下去,本篇主要讲粒子系统的主模块,该模块主要是控制粒子的初始状态和全局属性的,以下是关于该模块的介绍,请大家指正。目录前言本系列提要一、粒子系统主模块1.阅读前注意事项2.参考图3.参数讲解DurationLoopingPrewarmStartDelayStartLifetimeStartSpeed3DStartSizeStartSize3DStartRotationStartRotationFlipRotationStartColorGravityModif