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 云杉树.jpg -vf crop=770:430:220:0 -f image2 云杉树-1.jpg
#ffplay -i 自慰真的有害吗?.mp4 -vf crop=770:430:220:0
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=1050×1485 \
# -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=1050×1485 \
# -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=1050×1485 \
# -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=1050×1485 \
# -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=1050×1485 \
# -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=1050×1485 \
-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=675×750 -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=595×842 -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
效果如下:
———————————–