视频转为图片
ffmpeg -i input.mp4 ./image%d.png
*ffmpeg -i input.mp4 -ss 00:00:7.435 -vframes 1 out.png //获取视频定时截图
图片合成视频
ffmpeg -f image2 -i image%d.png video.avi
切割视频
ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4
表示开始切割的时间,-t表示要切多少。上面就是从开始,切5秒钟出来
从视频中提取音频
ffmpeg -i test.mp4 -vn music.mp3
视频与音频合成
现在有个视频video.avi,有个音频 audio.mp3,将其合并成output.avi
两个命令
ffmpeg -i video.avi -vcodec copy -an video2.avi
ffmpeg -i video2.avi -i audio.mp3 -vcodec copy -acodec copy output.avi
添加视频Logo
- ffmpeg -i input.mp4 -i dd.png -filter_complex “[1:v]scale=176:144[logo];[0:v][logo]overlay=x=0:y=0” output.mp4
- ffmpeg -i input.mp4 -vf “movie=log.png[wn]; [in][wn]overlay=30:10[out]” output.mp4
- 右上角: ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w output.mp4
左下角: ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=0:H-h output.mp4
右下角: ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4
去除视频Logo
ffmpeg -i input.mp4 -vf delogo=0:0:220:90?1 output.mp4
语法:-vf delogo=x:y:w:h[:t[:show]] x:y 离左上角的坐标 w:h logo的宽和高 t: 矩形边缘的厚度默认值4 show:若设置为1有一个绿色的矩形,默认值0。
视频添加水印
- 文字水印 利用drawtext filter (如果显示汉字,需要用的字体库支持汉字,本机支持的字库可以使用fc-list命令来查看)
ffmpeg -i input.mp4 -vf “drawtext=fontsize=100:fontfile=FreeSerif.ttf:text=‘hello world’:fontcolor=green:x=20:y=20” output.mp4 - 时间水印:enable的作用是每3秒显示一次,如果要一直显示,去掉enable选项。
ffmpeg -i input.mp4 -vf “drawtext=fontsize=100:fontfile=FreeSerif.ttf:text=’%{localtime:%Y-%m-%d %H-%M-%S}’:fontcolor=green:box=1:boxcolor=yellow:enable=lt(mod(t,3),1)” output.mp4 (这里注意转义字符,:和,都需要转义,因为ffmpeg中,和:都是分隔符,是有特殊意义的,所以某些命令中需要的这些符号,都需要转义,告诉ffmpeg这不是ffmpeg的分隔符。比如这里的:就是localtime命令里面的,所以就需要转移,后面的逗号也是一样) - 图片水印:movie 滤镜
ffmpeg -i input.mp4 -vf “movie=logo.png[wm];[in][wm]overlay=30:10[out]” output.mp4
半透明水印:
有些水印图片是有背景色的,比如很多logo图片是白底的,这时overlay到视频上会非常突兀,可以利用colorkey来做成半透明效果,colorkey有三个参数(ffmpeg -h filter=colorkey) :color,similarity, blend. color是指定要透明的颜色,similarity指定相似度,blend指定叠加的参数。下面的例子logo图片是白色底的,我们这里color就设置为white(也可以设置颜色色值,比如黑色就是全0x0000,也可以写black),similarity设置相似度,因为我们要把白色去掉,可以设置的小一些0.2,blend设置为0.5
ffmpeg -i input.mp4 -vf “movie=logo.png, colorkey=white:0.2:0.5 [wm]; [in][wm] overlay=30:10 [out]” output.mp4 - 画中画:
ffmpeg -re -i input.mp4 -vf “movie=sub.mp4,scale=480x320[test]; [in][test] overlay=x=main_w-480:y=main_h-320 [out]” -vcodec libx264 output.flv - 跑马灯,就是子视频从左向右游动
ffmpeg -re -i input.mp4 -vf “movie=sub.mp4,scale=480x320[test]; [in][test] overlay=x=‘if(gte(t,2), -w+(t-2)*20,NAN)’:y=0 [out]” -vcodec libx264 output.mp4 - 九宫格 shortest参数是overlay的参数,表明终止最短的视频时全部终止
ffmpeg -re -i input1.mp4 -re -i input2.mp4 -re -i input3.mp4 -re -i input4.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 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=320 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3];[tmp3][lowerright] overlay=shortest=1:x=320:y=240” -c:v libx264 output.mp4 - 将字幕写入视频流 ass滤镜,这个滤镜是将字幕overlay到视频流上。
ffmpeg -i input.mp4 -vf ass=t1.ass -f mp4 output.mp4 - 将字幕流封装到文件中
ffmpeg -i input.mp4 -i t1.ass -acodec copy -vcodec copy -scodec copy output.mkv
如果input.mp4中已经有了字幕,想用t1.ass来替换原有的字幕,需要用map来指定(map n:m n指第几个输入,m指该输入的第几个流,从0开始计数。如-map 0:1 就是第0个输入的第1个流。)
ffmpeg -i input.mp4 -i t1.ass -map 0:0 -map 0:1 -map 1:0 -acodec copy -vcodec copy -scodec copy output.mkv