说明:下面测试命令中image_source 是要处理的输入文件,out_source是处理完成之后的输出文件
1.图片压缩
ffmpeg可以很完美的压缩图片生成新图片,并可以设置压缩等级
ffmpeg -i image_source -q compress_level out_source
#compress_level:压缩等级为正整数,数值越大压缩等级越高
2.等比放大
参数hqx。
ffmpeg -i image_source -vf hqx=4 out_source
效果是尺寸等比放大4倍
3.约束比例压缩
ffmpeg可以将图片压缩成指定的尺寸
ffmpeg -i image_source -vf scale=width:height out_source
#width为压缩后的图片宽度
#height为压缩后的图片高度
#当width或height其中有一个数值为-1时将保持原来图片尺寸比例压缩
4.图片裁剪
ffmpeg可以指定图片裁剪位置和裁剪的图片尺寸
ffmpeg -i image_source -vf crop=width:height:from_x:from_y out_source
#width是要裁剪出的图片的宽度
#height是要裁剪出的图片的高度
#from_x是裁剪的起始X轴的位置
#from_y是裁剪的起始Y轴的位置
#如果不指定from_x和from_y表示从原始图片中心位置开始裁剪
5.添加水印图片
ffmpeg可以为图片添加水印,可以设置水印图片的大小、位置和透明度
ffmpeg -i image_source -vf movie=logo_source,scale=logo_width:logo_height,lut=a=val*opacity_num[watermask];[in][watermask] overlay=from_x:from_y[out] -y out_source
#logo_source为水印图片地址
#logo_width为水印图片的宽度
#logo_height为水印图片的高度
#opacity_num为水印图片的透明度
#from_x为水印的起始X轴的位置
#from_y为水印的起始Y轴的位置
6.添加文字水印
ffmpeg可以为图片添加文字水印,可以设置字体、颜色、尺寸、文字内容、文字位置
ffmpeg -i image_source -vf drawtext=fontfile=font_ttf_path:fontcolor=font_color:fontsize=font_size:text=message_info:x=from_x:y=from_y out_source
#font_ttf_path为字体路径,此项必须设置否则会出现字体无法找到的错误;
#字体路径要设置绝对路径并且要注意路径正反斜线转义(例如C\\:/Windows/Fonts/simhei.ttf)
#font_color为字体的颜色
#font_size为字体的大小
#message_info为水印文字内容
#from_x为水印的起始X轴的位置
#from_y为水印的起始Y轴的位置
#如果水印内容是中文需要设置中文字体否则会文字显示乱码
7.去logo
参数delogo,在指定的区域作模糊处理,达到消除logo的效果。
ffmpeg -i image_source -vf delogo=x=0:y=0:w=50:h=50:band=5:show=1 out_source
band为模糊的强度,show为1时显示模糊的区域框,省略show或值为0时不显示区域框。
8.图片旋转指定的角度
ffmpeg可以将图片按照指定的角度旋转生成新图片
ffmpeg -i image_source -vf rotate=route_num*PI/180 -y out_source
#route_num是要旋转的角度
#当route_num大于0的时候顺时针旋转,当route_num小于0的时候逆时针旋转
9.图片旋转特殊简便命令
上面的命令理论上可以完成所有的图片旋转操作,但ffmpeg仍然存在特殊简便旋转命令
ffmpeg -i image_source -vf transpose=route_number -y out_source
#route_number=0顺时针旋转90度再左右镜像
#route_number=1顺时针旋转90度
#route_number=2逆时针旋转90度
#route_number=3逆时针旋转90度再左右镜像
10.图片左右镜像
ffmpeg -i image_source -vf hflip out_source
11.将图片上下镜像
ffmpeg -i image_source -vf vflip out_source
12.加边框
参数drawbox。
ffmpeg -i image_source -vf drawbox out_source
在边界画一个实心的黑框
ffmpeg -i image_source -vf drawbox=x=10:y=10:w=200:h=100:color=red@0.5 out_source
0.5为边框的透明度(0到1)
ffmpeg -i image_source -vf drawbox=x=10:y=10:w=300:h=230:color=pink@0.5:t=10 out_source
t为边框厚度
13.画网格
参数drawgrid。
ffmpeg -i image_source -vf drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5 out_source
画一个3*3的白色的厚度为2,透明度为0.5的网络
ffmpeg -i image_source -vf drawgrid=w=400:h=100:t=2:c=red@0.5 out_source
画每个单元为400*100的网格
14.加底板
参数pad。
ffmpeg -i image_source -vf pad=500:500:40:40:violet out_source
ffmpeg -i image_source -vf pad=width=500:height=500:x=40:y=40:color=violet out_source
以上两个命令是一样的效果,增加一个500*500的底面板,(x,y)是原图摆放的位置
15.画边缘
参数edgedetect。
ffmpeg -i image_source -vf edgedetect=low=0.1:high=0.4 out_source
ffmpeg -i image_source -vf edgedetect=low=0.5:high=0.8 out_source
low小于等于high,且值的范围为[0,1],是检测算法使用的阈值。
16.加噪音
参数noise。
ffmpeg -i image_source -vf noise=alls=100:allf=t+u out_source
alls表示所有像素成分的强度,范围为[0,100],默认为0;allf表示所有像素成分的噪音类型,t为临时噪音,u为统一噪音。
ffmpeg -i image_source -vf noise=alls=100:allf=a out_source
a表示平滑的平均噪音
ffmpeg -i image_source -vf noise=alls=100:allf=p out_source
p表示随机噪音
17.模糊处理
高斯模糊
ffmpeg -i image_source -filter_complex gblur=sigma=10 out_source
glur是高斯blur的缩写
简单来说就是通过周围的像素点计算得到中间像素点的值,ffmpeg中gblur滤镜只考虑了上下左右四个点,然后有一个强度系数sigma。
gblur=sigma=10为模糊程度
方框模糊
ffmpeg -i image_source -vf boxblur=2 out_source
值越大越模糊
18.光晕
参数vignette。
ffmpeg -i image_source -vf vignette=PI/4 out_source
19.变色
colorbalance
调整rgb某个维度的权重实现变色。
选项有三组,分别为rs/gs/bs、rm/gm/bm、rh/gh/bh。每一个选项都指定了目标颜色(rgb中的一个),s表现偏暗,m表现偏中间,h表现偏亮(且平滑)。
选项的值范围为[-1, 1],正数表示偏向目标颜色,负数表示远离目标颜色。
比如这三个命令:
ffmpeg -i image_source -vf colorbalance=rs=1 out_source
ffmpeg -i image_source -vf colorbalance=rm=1 out_source
ffmpeg -i image_source -vf colorbalance=rh=1 out_source
ffmpeg -i image_source -vf colorbalance=rh=-0.6 out_source
colorchannelmixer
对rgba四个通道进行重新计算,并分别给定权重比例。
ffmpeg -i image_source -vf colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3 out_source
ffmpeg -i image_source -vf colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131 out_source
每个通道的权重从0到1,先给red的计算权重,即red=redrr + bluerb + greenrg +
alphara,然后分别是green跟blue的计算权重。
hue
改变色调,相当在调色板上调色。
ffmpeg -i image_source -vf hue=h=30:s=1 out_source
s为饱和度,范围为[-10,10],默认为1。h为角度,不同角度有不同的颜色布局(类比调色板),范围为[0,360],超过360则相当于从0开始,默认为0,在360时,就是原图。
lut/lutyuv/lutrgb
ffmpeg -i image_source -vf lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val" out_source
ffmpeg -i image_source -vf lutyuv="y=negval:u=negval:v=negval" out_source
lutyuv用于yuv颜色空间。这两个命令的效果是一样的,都是反转,得到底片的效果
ffmpeg -i image_source -vf lutyuv=y=negval out_source
把亮度(y)反转
ffmpeg -i image_source -vf lutyuv="u=128:v=128" out_source
把色度移除(uv),得到黑白图
ffmpeg -i image_source -vf lutyuv="y=2*val" out_source
提升亮度
ffmpeg -i image_source -vf lutyuv='u=1.2val:v=1.1val' out_source
调整uv的值
negate
反转,得到底片的效果,参数值为0或1,为1时表示把alpha通道也反转,默认为0。
ffmpeg -i image_source -vf negate=0 out_source
swapuv
uv互换。
ffmpeg -i image_source -vf swapuv out_source
20.eq效果
参数为eq,可以调整亮度、饱和度、对比度等。
ffmpeg -i image_source -vf eq=brightness=0.2 out_source
brightness为亮度,值范围为[-1,1]
ffmpeg -i image_source -vf eq=contrast=1.5 out_source
contrast是对比度,值范围为[-2, 2]
ffmpeg -i image_source -vf eq=saturation=0.1 out_source
saturation是饱和度,值范围为[0,3],默认是1
ffmpeg -i image_source -vf eq=gamma_r=0.2 out_source
调整gamma系数,范围为[0.1,10],默认是1
21.多张图片合成视频
ffmpeg -r 25 -i %d.png -vcodec libx264 out_source
-r指定帧率,%d表示将按数字顺序读取PNG文件,-vcodec指定视频编码器,-b:v调整视频码率,-crf调整视频质量,-vf scale 调整视频分辨率
22.视频图片提取
ffmpeg -i image_source ./test/0_%05d.jpg
ffmpeg -i image_source -ss 0:0:29 -t 0:0:8 -r 16 -f image2 ./test/0_%05d.jpg
获取视频关键帧并保存成jpg图像
1秒取1帧 r:rate
ffmpeg -i image_source -f image2 -r 1 dstPath/image-%03d.jpg
提取I帧
ffmpeg -i image_source -an -vf select='eq(pict_type\,I)' -vsync 2 -s 720*480 -f image2 dstPath/image-%03d.jpg
参考文章
FFmpeg----图片处理
ffmpeg对图片模糊处理
ffmpeg中的gblur实现
使用ffmpeg进行视频图片提取
FFMPEG获取视频关键帧并保存成jpg图像
多媒体开发(6):用滤镜实现各种图片效果