ffmpeg -i test.mp3 -af atempo=2 ff_atempo.mp3 ffmpeg -i test.mp3 -af atrim=start=30:end=50 ff_atrim.mp3 ffmpeg -i fuzhous.mp4 -i seas.mp4 -filter_complex "[0:v]fps=25[v0];[1:v]fps=25[v1];[v0][v1]blend=all_mode=average" ff_blend.mp4 ffmpeg -i fuzhous.mp4 -vf boxblur=luma_radius=4 ff_boxblur.mp4 ffmpeg -i ../fuzhous.mp4 -colorspace bt709 -ss 00:00:10 -vframes 1 ff_bt709.png ------------------------------------------ ffmpeg -f concat -safe 0 -r 1/4 -i file -f mp4 output.mp4 file file 'a0.jpg' file 'a1.jpg' file 'a2.jpg' file 'a3.jpg' file 'a4.jpg' file 'a5.jpg' file 'a6.jpg' ffmpeg -f concat -i file -c copy ff_merge_audio.mp3 file file 'ff_capture.mp3' file 'ff_capture.mp3' -------------------------------------------- #ffplay -i score.jpg -vf crop=880:300:0:280 ffmpeg -i score.jpg -vf crop=880:300:0:280 -f image2 score-0.jpg ffmpeg -i test.mp4 -vf "crop=out_w=iw*2/3:out_h=ih*2/3:x=(in_w-out_w)/2:y=(in_h-out_h)/2" output_crop.mp4 -------------------------------------- ffmpeg version 4.4.2-1 Copyright (c) 2000-2021 the FFmpeg developers built with gcc 8 (Uos 8.3.0.3-3+rebuild) configuration: --prefix=/usr --extra-version=1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared libavutil 56. 70.100 / 56. 70.100 libavcodec 58.134.100 / 58.134.100 libavformat 58. 76.100 / 58. 76.100 libavdevice 58. 13.100 / 58. 13.100 libavfilter 7.110.100 / 7.110.100 libswscale 5. 9.100 / 5. 9.100 libswresample 3. 9.100 / 3. 9.100 libpostproc 55. 9.100 / 55. 9.100 Filter delogo Remove logo from input video. Inputs: #0: default (video) Outputs: #0: default (video) delogo AVOptions: x <string> ..FV....... set logo x position (default "-1") y <string> ..FV....... set logo y position (default "-1") w <string> ..FV....... set logo width (default "-1") h <string> ..FV....... set logo height (default "-1") show <boolean> ..FV....... show delogo area (default false) This filter has support for timeline through the 'enable' option. ffmpeg -i ffmovie.mp4 -vf delogo=x=2:y=2:w=120:h=120 ff_delogo.mp4 ------------------------------------------ #在一张图片上画1个方框 ffmpeg -i 201-202.jpg -vf drawbox=x=250:y=450:w=1200:h=250:color=ff0000:t=3 -f image2 201-202-1.jpg -y #ffmpeg -i aliyun_2-4-0.jpg -vf drawbox=iw/4:ih/4:iw/3*2:ih/2:color=00f0f0@0.8:thickness=fill -f image2 aliyun_2-4-0-1.jpg -y #ffmpeg -i example.jpg -filter_complex [0:v]rotate=a=0:ow="rotw(0)":oh="roth(0)":fillcolor="00ffff"[rot],[0:v][rot]overlay=x=-500:y=0 example-1.jpg -y #ffmpeg -i example-1.jpg -filter_complex [0:v]rotate=a=0:ow="rotw(0)":oh="roth(0)":fillcolor="00eeee"[rot],[0:v][rot]overlay=x=500:y=0 example-2.jpg -y #在一张图片上画4个方框 #ffmpeg -i example.jpg -vf "drawbox=x=5:y=5:w=100:h=100:color=ff0101:t=1.5, drawbox=x=120:y=5:w=100:h=100:color=ff0000:t=1.5, drawbox=x=5:y=120:w=100:h=100:color=ff0011:t=1.5, drawbox=x=120:y=120:w=100:h=100:color=00ff00:t=1.5,drawbox=x=5:y=240:w=100:h=100:color=00ff00:t=1.5,drawbox=x=120:y=240:w=100:h=100:color=00ff00:t=1.5,drawbox=x=5:y=360:w=100:h=100:color=00ff00:t=1.5,drawbox=x=120:y=360:w=100:h=100:color=00ff00:t=1.5,drawbox=x=5:y=480:w=100:h=100:color=00ff00:t=1.5,drawbox=x=120:y=480:w=100:h=100:color=00ff00:t=1.5" -f image2 example-0.jpg #ffmpeg -i input.mp4 -vf "drawbox=x=100:y=100:width=200:height=100:color=0x000000@0.5" -c:v libx264 -crf 20 output.mp4 #画一块区域遮挡图片 #ffplay -i a2.jpg -vf "drawbox=x=1063:y=0:width=230:height=160:color=0xFFFFFF:t=128" #ffmpeg -i a2.jpg -vf "drawbox=x=1063:y=0:width=230:height=160:color=0xFFFFFF:t=128" -f image2 a2-0.jpg #ffmpeg在图片上画斜线,这种做法可以理解为写一个N #ffmpeg -i input.jpg -vf "drawtext=text='N':x=10:y=20:fontsize=44:fontcolor=white:box=1:boxcolor=black@0.5" output.jpg ------------------------------------------- #在一张图片上画3个方框 #ffplay -f lavfi -i color=ffffff:size=1050x1485 \ # -vf "drawbox=x=5:y=10:w=1030:h=500:color=ff0101:t=1.5, \ # drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=25:x=7:y=12:text='21.', \ # drawbox=x=5:y=520:w=1030:h=500:color=ff0101:t=1.5, \ # drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=25:x=7:y=522:text='22.', \ # drawbox=x=5:y=1030:w=1030:h=445:color=ff0101:t=1.5, \ # drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=25:x=7:y=1032:text='23.'" #------------------------- #-----------1/5-------------- #ffmpeg -f lavfi -i color=ffffff:size=1050x1485 \ # -frames:v 1 -vf "drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=30:x=210:y=5:text='国家教师资格考试《教育知识与能力》(小学)', \ # drawbox=x=5:y=40:w=1030:h=500:color=ff0101:t=1.5, \ # drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=25:x=7:y=42:text='21.', \ # drawbox=x=5:y=545:w=1030:h=500:color=ff0101:t=1.5, \ # drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=25:x=7:y=547:text='22.', \ # drawbox=x=5:y=1050:w=1030:h=420:color=ff0101:t=1.5, \ # drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=25:x=7:y=1052:text='23.', \ # drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=15:x=520:y=1470:text='1/5'" \ # -f image2 01-0.jpg -y && #-----------2/5-------------- #ffmpeg -f lavfi -i color=ffffff:size=1050x1485 \ # -frames:v 1 -vf "drawbox=x=5:y=5:w=1030:h=740:color=ff0101:t=1.5, \ # drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=25:x=7:y=7:text='24(1).', \ # drawbox=x=5:y=750:w=1030:h=720:color=ff0101:t=1.5, \ # drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=25:x=7:y=752:text='24(2).', \ # drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=15:x=520:y=1470:text='2/5'" \ # -f image2 01-1.jpg -y && #-----------3/5-------------- #ffmpeg -f lavfi -i color=ffffff:size=1050x1485 \ # -frames:v 1 -vf "drawbox=x=5:y=5:w=1030:h=740:color=ff0101:t=1.5, \ # drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=25:x=7:y=7:text='25(1).', \ # drawbox=x=5:y=750:w=1030:h=720:color=ff0101:t=1.5, \ # drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=25:x=7:y=752:text='25(2).', \ # drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=15:x=520:y=1470:text='3/5'" \ # -f image2 01-2.jpg -y && #-----------4/5-------------- #ffmpeg -f lavfi -i color=ffffff:size=1050x1485 \ # -frames:v 1 -vf "drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=30:x=5:y=5:text='四、教学设计', \ # drawbox=x=5:y=40:w=1030:h=1430:color=ff0101:t=1.5, \ # drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=25:x=7:y=42:text='26.', \ # drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=15:x=520:y=1470:text='4/5'" \ # -f image2 01-3.jpg -y && #-----------5/5-------------- ffmpeg -f lavfi -i color=ffffff:size=1050x1485 \ -frames:v 1 -vf "drawbox=x=5:y=5:w=1030:h=1465:color=ff0101:t=1.5, \ drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=25:x=7:y=7:text='.', \ drawtext=fontfile=/usr/share/fonts/songhei.ttf:fontcolor=000000:fontsize=15:x=520:y=1470:text='5/5'" \ -f image2 01-4.jpg -y && exit --------------------------------- #ffmpeg -h filter=drawgrid,查看是否有这个滤镜 #ffmpeg -i input.jpg -vf "drawgrid=w=30:h=30:thickness=1:color=black@0.5" -f image2 output.jpg -y ffmpeg -f lavfi -i color=ffffff:size=675x750 -frames:v 1 \ -vf "drawgrid=w=20:h=20:thickness=1:color=black@0.5" -f image2 ffmpeg-A4-875.jpg #解释: #-i input.jpg: 输入图片文件。 #-vf "drawgrid=": 应用视频滤镜。 #w=30: 水平网格的宽度。 #h=30: 垂直网格的高度。 #thickness=1: 网格线的粗细。 #color=white@0.5: 网格线的颜色和透明度(这里是半透明的白色)。 #output.jpg: 输出图片文件。 ----------------------------- #ffmpeg -i input.jpg -vf "drawgrid=w=30:h=30:thickness=1:color=black@0.5" -f image2 output.jpg -y ffmpeg -f lavfi -i color=ffffff:size=595x842 -frames:v 1 \ -vf "drawgrid=w=20:h=20:thickness=1:color=black@0.5" -f image2 ffmpeg-A4-33.jpg #解释: #-i input.jpg: 输入图片文件。 #-vf "drawgrid=": 应用视频滤镜。 #w=30: 水平网格的宽度。 #h=30: 垂直网格的高度。 #thickness=1: 网格线的粗细。 #color=white@0.5: 网格线的颜色和透明度(这里是半透明的白色)。 #output.jpg: 输出图片文件。 -------------------------------- ffmpeg-drawtext #ffmpeg -i njwmd2014-0.jpg \ # -vf "drawtext=fontfile=/usr/share/fonts/msyh.ttf:fontcolor=ffffff:fontsize=30:x=200:y=350:text='name\:njwmd2014', \ # drawtext=fontfile=/usr/share/fonts/msyh.ttf:fontcolor=ffffff:fontsize=30:x=200:y=400:text='password\:XYCdongge188'" \ # -f image2 njwmd2014-1.jpg -y && #exit ffmpeg -i test.mp4 -vf "drawtext=fontcolor=white:line_spacing=5:fontfile=/usr/share/fonts/msyh.ttf:text='Hello World':fontsize=h/8:x=(w-text_w)/2:y=(h-text_h*2)" test_en.mp4 ffmpeg -i test.mp4 -vf "drawtext=fontcolor=white:line_spacing=5:fontfile=/usr/share/fonts/msyh.ttf:text='白日依山尽,黄河入海流':fontsize=h/8:x=(w-text_w)/2:y=(h-text_h*2)" ff_delogo_cn.mp4 -------------------------------- ffmpeg-eq #添加滤镜,可以查看图片打印效果是否有灰框 ffplay -i 51-0.jpg -vf "eq=contrast=0.2:0.2:0.2" ffmpeg -i 51-0.jpg -vf "eq=contrast=0.2:0.2:0.2" -f image2 51-0-0.jpg --------------------------------- ffmpeg-filter (1)模糊 参数boxblur。 ./ffmpeg -i 1.jpg -vf boxblur=2 blur1.jpg 值越大越模糊,以下是值分别为2、4、8的效果: ------------------------------------- (2)变色 有几个办法。 (a)colorbalance 调整rgb某个维度的权重实现变色。 选项有三组,分别为rs/gs/bs、rm/gm/bm、rh/gh/bh。每一个选项都指定了目标颜色(rgb中的一个),s表现偏暗,m表现偏中间,h表现偏亮(且平滑)。 选项的值范围为[-1, 1],正数表示偏向目标颜色,负数表示远离目标颜色。 比如这三个命令: ./ffmpeg -i 1.jpg -vf colorbalance=rs=1 colorbalance1-1.jpg ./ffmpeg -i 1.jpg -vf colorbalance=rm=1 colorbalance1-2.jpg ./ffmpeg -i 1.jpg -vf colorbalance=rh=1 colorbalance1-3.jpg ---------------------------- 再比如把图片变得冷色一点: ./ffmpeg -i 2.jpg -vf colorbalance=rh=-0.6 colorbalance2.jpg (b)colorchannelmixer 对rgba四个通道进行重新计算,并分别给定权重比例。 先看命令: ./ffmpeg -i 3.jpg -vf colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3 colorchannelmixer3.jpg ./ffmpeg -i 2.jpg -vf colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131 colorchannelmixer2.jpg 每个通道的权重从0到1,先给red的计算权重,即red=redrr + bluerb + green*rg + alpha*ra,然后分别是green跟blue的计算权重。 上面两个命令对应的效果是这样的: (c)hue 改变色调,相当在调色板上调色。 ./ffmpeg -i 2.jpg -vf hue=h=30:s=1 hue_30.jpg s为饱和度,范围为[-10,10],默认为1。h为角度,不同角度有不同的颜色布局(类比调色板),范围为[0,360],超过360则相当于从0开始,默认为0。 以下效果为s=1(默认),h分别为30、60、90、120、160、180、210、250、280、320、360时的效果(在360时,就是原图): 再比如,只调饱和度s: ./ffmpeg -i 2.jpg -vf hue=h=0:s=-5 hue_s-5.jpg 以下效果为h=0(默认),s分别为-10、-5、0、1、5、10时的效果(在1时,就是原图): (d)lut/lutyuv/lutrgb ./ffmpeg -i 2.jpg -vf lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val" lutyuv1.jpg ./ffmpeg -i 2.jpg -vf lutyuv="y=negval:u=negval:v=negval" lutyuv2.jpg lutyuv用于yuv颜色空间。这两个命令的效果是一样的,都是反转,得到底片的效果: ./ffmpeg -i 2.jpg -vf lutyuv=y=negval lutyuv2.jpg 把亮度(y)反转,效果如下: ./ffmpeg -i 2.jpg -vf lutyuv="u=128:v=128" lutyuv3.jpg 把色度移除(uv),得到黑白图: ./ffmpeg -i 2.jpg -vf lutyuv="y=2*val" lutyuv4.jpg 提升亮度,效果如下: ./ffmpeg -i 2.jpg -vf lutyuv='u=1.2val:v=1.1val' lutyuv5.jpg 调整uv的值,效果如下: (e)negate 反转,得到底片的效果,参数值为0或1,为1时表示把alpha通道也反转,默认为0。 ./ffmpeg -i 3.jpg -vf negate=0 negate1.jpg 效果如下: (f)swapuv uv互换。 ./ffmpeg -i 2.jpg -vf swapuv swapuv1.jpg 效果如下: (3)裁剪 参数crop,支持裁剪多大、在哪个位置开始,也支持带变量的更复杂的裁剪。 ./ffmpeg -i 1.jpg -vf crop=200:300:100:100 crop1.jpg ./ffmpeg -i 1.jpg -vf crop=w=200:h=300:x=100:y=100 crop2.jpg 这两个命令是一样的,都是在(100,100)的位置,裁剪200*300的大小,效果如下: ./ffmpeg -i 1.jpg -vf crop=400:500 crop2.jpg 这个命令是从中间开始,裁剪400*500的尺寸。 (4)去logo 参数delogo,在指定的区域作模糊处理,达到消除logo的效果。 ./ffmpeg -i 2.jpg -vf delogo=x=0:y=0:w=50:h=50:band=5:show=1 delogo2.jpg band为模糊的强度,show为1时显示模糊的区域框,省略show或值为0时不显示区域框。 效果如下: (5)加边框 参数drawbox。 ./ffmpeg -i 2.jpg -vf drawbox drawbox1.jpg 在边界画一个实心的黑框,效果如下: ./ffmpeg -i 2.jpg -vf drawbox=10:10:200red@0.5 drawbox2.jpg ./ffmpeg -i 2.jpg -vf drawbox=x=10:y=10:w=200:h=100:color=red@0.5 drawbox2.jpg 这两个命令是一样的,0.5为边框的透明度(0到1),效果如下: ./ffmpeg -i 2.jpg -vf drawbox=x=10:y=10:w=300:h=230:color=pink@0.5:t=10 drawbox3.jpg t为边框厚度,效果如下: (6)画网格 参数drawgrid。 ./ffmpeg -i 2.jpg -vf drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5 drawgrid1.jpg 画一个3*3的白色的厚度为2,透明度为0.5的网络,效果如下: ./ffmpeg -i 2.jpg -vf drawgrid=w=400:h=100:t=2:c=red@0.5 drawgrid2.jpg 画每个单元为400*100的网格,效果如下: (7)添加字幕 参数为drawtext,这个小程之前已经详细介绍过了。 (8)画边缘 参数edgedetect。 ./ffmpeg -i 2.jpg -vf edgedetect=low=0.1:high=0.4 edge2-1.jpg ./ffmpeg -i 2.jpg -vf edgedetect=low=0.5:high=0.8 edge2-2.jpg low小于等于high,且值的范围为[0,1],是检测算法使用的阈值。 以上两个命令的效果是这样的: 再比如: ./ffmpeg -i 1.jpg -vf edgedetect=low=0.1:high=0.2 edge1-1.jpg 效果是这样的: (9)eq效果 参数为eq,可以调整亮度、饱和度、对比度等。 ./ffmpeg -i 2.jpg -vf eq=brightness=0.2 eq1.jpg brightness为亮度,值范围为[-1,1],效果是这样的: ./ffmpeg -i 2.jpg -vf eq=contrast=1.5 eq2.jpg contrast是对比度,值范围为[-2, 2],效果如下: ./ffmpeg -i 2.jpg -vf eq=saturation=0.1 eq3.jpg saturation是饱和度,值范围为[0,3],默认是1,效果如下: ./ffmpeg -i 2.jpg -vf eq=gamma_r=0.2 eq4.jpg 调整gamma系数,范围为[0.1,10],默认是1,效果如下: (10)缩放 参数scale。 ./ffmpeg -i 3.jpg -vf scale=200:200 scale1.jpg 缩放为200*200,效果如下: (11)等比放大 参数hqx。 ./ffmpeg -i 2.jpg -vf hqx=4 hqx1.jpg 效果是尺寸等比放大4倍。 (12)横向倒置 参数hflip。 ./ffmpeg -i 2.jpg -vf "hflip" hflip1.jpg 水平方向作镜像,效果是这样的: (13)纵向倒置 参数vflip。 ./ffmpeg -i 2.jpg -vf "vflip" vflip2.jpg 纵向作镜像,效果是这样的: (14)加噪音 参数noise。 ./ffmpeg -i 3.jpg -vf noise=alls=100:allf=t+u noise1.jpg alls表示所有像素成分的强度,范围为[0,100],默认为0;allf表示所有像素成分的噪音类型,t为临时噪音,u为统一噪音。效果如下: ./ffmpeg -i 3.jpg -vf noise=alls=100:allf=a noise2.jpg a表示平滑的平均噪音,效果如下: ./ffmpeg -i 3.jpg -vf noise=alls=100:allf=p noise3.jpg p表示随机噪音,效果如下: (15)加水印 参数overlay。 之前介绍在视频上加logo(图片或gif图)时讲解过。 (16)加底板 参数pad。 ./ffmpeg -i 2.jpg -vf pad=500:500:40:40:violet pad1.jpg ./ffmpeg -i 2.jpg -vf pad=width=500:height=500:x=40:y=40:color=violet pad2.jpg 以上两个命令是一样的效果,增加一个500*500的底面板,(x,y)是原图摆放的位置: (17)旋转 参数rotate。 ./ffmpeg -i 1.jpg -vf rotate=PI/6 rotate1.jpg 效果如下: (18)光晕 参数vignette。 ./ffmpeg -i 2.jpg -vf vignette=PI/4 vignette1.jpg 效果如下: -----------------------------------