说明:下面测试命令中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轴的位置
#如果水印内容是中文需要设置中文字体否则会文字显示乱码

参数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):用滤镜实现各种图片效果