添加动画文字水印
ffmpeg算法函数链接:https://ffmpeg.org/ffmpeg-utils.html
//参数说明:enable代表激活水印的时机,如果不添加这个参数的话那么将一直显示
//注意事项:fontfile,指定字体的路径,如果转换后的时候是乱码的话,大概率是找不到该字体。
固定位置
ffmpeg -i input.mp4 -filter:v drawtext="fontfile=STXINGKA.ttf:text='hello world':fontcolor=red@1.0:fontsize=36:y=h-line_h-10:x=100" -codec:v libx264 -codec:a copy -y output.mp4
根据调整x,y参数可以实现改变文字展示的位置,实现从上到下、从右到左等方式展示。
//10-20s显示
ffmpeg -i input.mp4 -filter:v drawtext="fontfile=Microsoft YaHei Mono.ttf='hello world':fontcolor=red@1.0:fontsize=36:y=h-line_h-10:x=100:enable=between(t\,10\,20)" -codec:v libx264 -codec:a copy -y output.mp4
//从第10s,从左到右显示
ffmpeg -i input.mp4 -filter:v drawtext="fontfile=STXINGKA.ttf:text='动态文字':fontcolor=red@1.0:fontsize=36:y=h-line_h-10:x=w/10*mod(t\,10):enable=gt(t\,10)" -codec:v libx264 -codec:a copy -y output.mp4
显示时间
添加字幕
新建一个srt/ass文件,写入字幕信息,关于字幕的样式,均写在文件中。可参考此文章
ffmpeg -i input.mp4 -vf subtitles=test.srt -y output.mp4
画中画
实现视频画中画,将一个视频嵌入到另一个视频中
ffmpeg -i input.mp4 -vf "movie=test.mp4,scale=480x320[test]; [in][test] overlay=x=100:100 [out] enable=10" over.mp4
动态改变x,y值,实现走马灯效果
ffmpeg -i input.mp4 -vf "movie=test.mp4,scale=480x320[test]; [in][test] overlay=x='if(gte(t,2),-w+(t-2)*20)':100 [out] " -y over.mp4
效果图:
多宫格显示
ffmpeg -re -i input.mp4 -re -i over.mp4 -re -i test.mp4 -re -i zzz.mp4 -filter_complex "nullsrc=size=640x480 [base]; [0:v] setpts=PTS-STARTPTS,scale=320x240 [upperleft]; [1:v] setpts=PTS-STARTPTS,scale=320x240 [upperright];[2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft]; [3:v] setpts=PTS-STARTPTS,scale=320x240 [lowerright]; [base][upperleft] overlay=shortest=1 [temp1]; [temp1][upperright] overlay=shortest=1:x=320 [temp2]; [temp2][lowerleft] overlay=shortest=1:y=240 [temp3]; [temp3][lowerright] overlay=shortest=1:x=320:y=240 " -c:v libx264 output.mp4
抠图
参数说明:colorkey 将指定的色值变成透明色,0.3这个颜色的范围
ffmpeg -i blue.png -vf colorkey=0x09377a:0.3 -y out.png
视频背景模糊处理
//split过滤器创建两个输入文件的拷贝并标记为[a],[b]
// [a]boxburl过滤器进行虚化并输出到[1],参数2:1将亮度,色度和alpha半径设置为2,将boxblur滤镜应用到相应平面的次数1次
// [b]scale过滤器可以缩放视频视频并输出到[2].
// 用overlay过滤器把 [2]覆盖到[1]的旁边,W代表[1]的宽,w为[2]的宽。
ffmpeg -i input.mp4 -vf "split[a][b];[a]scale=iw*1.5:ih*1.5,boxblur=2:1[1];[b]scale=iw:ih[2];[1][2]overlay=(W-w)/2:(H-h)/2" -c:v libx264 -crf 18 -preset veryfast -f mp4 output.mp4 -y
方法二:
[0:v]代表视频流为输入源
crop代表截取视频范围,一般参数有4个w,h,x,y分别为宽:长:x轴截取起点:y轴截取起点(默认x,y为(W-w)/2:(Y-y)/2)
gblur代表高斯模糊
ffmpeg -i test.mp4 -filter_complex [0:v]crop=iw/10:100,gblur=sigma=5,scale=iw*10:720[v1];[v1][0:v]overlay=0:(H-h)/2 -y out.mp4
音视频倍速处理
视频变速
setpts,小于1为加快速度,大于1为减速
ffmpeg -i input.mp4 -vf "setpts = 0.5 * PTS, setpts=0.5*PTS" -y output.mp4
音频变速
atempo 只能使用0.5到2.0之间的值,大于1是加速,与视频中的参数相反
ffmpeg -i input.mp4 -af "atempo=2.0" -y output.mp4
同时对音视频变速处理
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts = 0.5 * PTS[v1];[0:a] atempo=2.0[a1]" -map "[v1]" -map "[a1]" output.mp4
视频淡入淡出效果
fade
•type, t
指定类型是in代表淡入,out代表淡出,默认为in
•start_frame, s
指定应用效果的开始时间,默认为0.
•nb_frames, n
应用效果的最后一帧序数。
对于淡入,在此帧后将以本身的视频输出,对于淡出此帧后将以设定的颜色输出,默认25.
•alpha
如果设置为1,则只在透明通道实施效果(如果只存在一个输入),默认为0
•start_time, st
指定按秒的开始时间戳来应用效果。
如果start_frame和start_time都被设置,则效果会在更后的时间开始,默认为0
•duration, d
按秒的效果持续时间。
对于淡入,在此时后将以本身的视频输出,对于淡出此时后将以设定的颜色输出。
如果duration和nb_frames同时被设置,将采用duration值。默认为0
//前面30帧黑色,100帧淡入
ffmpeg -i test.mp4 -vf fade=in:30:100 -y oo.mp4
//前面3s黑屏,3.5s淡入
ffmpeg -i test.mp4 -vf fade=t=in:st=3:d=3.5 -y oo.mp4
调整亮度、饱和度、对比度、gama变换
contrast 对比度范围-1000-1000 default 1
brightness 亮度-1.0-1.0 default 0
saturation 饱和度 取值范围0.0-3.0 default 1
gamma 取值范围0.1-10.0 default 1
gamma_r
gamma_g
gamma_b
//对比度为50
ffmpeg -i test.mp4 -vf eq=contrast=50 -y ooo.mp4
ffmpeg -i test.mp4 -vf eq=gamma_r=6 -y ooo.mp4