一、命令格式:
1.1ffmpeg <全局参数> <输入文件参数> -i<输入文件> <输出文件参数> <输出文件>
常用参数:
-y:全局参数,不经过确认,输出覆盖同名文件;
-c:a :指定音频编码器;
-c:v: 指定视频编码器;
-a:n :去除音频流;
-v:n :去除视频流;
-af: 音频过滤器;
-vf: 视频过滤器,后面接处理参数;
\-c:指定编码器;
-c copy:直接复制,不经过重新编码(这样比较快);
-f 用于指定输入或输出的格式,即应该如何解释输入数据,或者应该如何封装输出数据 ;
-f mp4 : 表示 输入或输出 的 文件格式是 mp4 格式 ;
-f avi : 表示 输入或输出 的文件格式是 avi 格式 ;
-f flv : 表示 输入或输出 的文件格式是 flv 格式 ;
-f mov : 表示 输入或输出 的文件格式是 mov 格式 ;
-f mkv : 表示 输入或输出 的文件格式是 mkv 格式 ;
-f wav : 表示 输入或输出 的文件格式是 wav 格式 ;
-f rawvideo : 表示 原始视频 数据流格式 , 通常用于一些专业的音视频处理 ;
-f null : 特殊的格式 , 用于不产生任何输出文件 , 通常用于测试或性能分析 ;
-f image2 : 处理图像序列 , 将 视频帧 保存为一系列的 图片或将图片序列编码成视频 ;
-f image2pipe : 用于通过管道传输图像数据的格式 , 通过标准输入/输出 ( stdin/stdout ) 或其他管道机制将图像数据传递给 FFmpeg 或从 FFmpeg 接收图像数据 ;
-f mpegts : 表示 MPEG 传输流格式,常用于流媒体传输
二、对视频分辨率进行缩放,scale
ffmpeg -i test.mp4 -vf fps=25,scale=w=512:h=512 -qmin 1 -q:v 1 resized.mp4
# -vf:fps, scale
# -qmin 1:q的最小值设定为1
# -q:v 1:设置图像质量, 2为保存为高质量
scale=w=宽度:h=高度;
iw和ih分别为当前视频的宽度和高度;
将宽度或高度设置为-1表示将保持原始视频长宽比进行缩放;
三、对视频进行裁剪
3.1空间裁剪crop
ffmpeg -i test.mp4 -vf crop=256:256:128:128 crop.mp4
ffplay crop.mp4
# 256:256为裁剪的分辨率
# 128:128为裁剪的原点相对于左上顶点的距离
3.2时间裁剪-ss
ffmpeg -i test.mp4 -c:v libx264 -crf 18 -ss 00:00:05 -to 00:00:10 split1.mp4
ffmpeg -i test.mp4 -c:v copy -c:a copy -ss 00:00:05 -to 00:00:10 split2.mp4
ffmpeg -i test.mp4 -c:v libx264 -crf 18 -ss 00:00:01 -t 00:00:06 split3.mp4
ffmpeg -i test.mp4 -c:v copy -c:a copy -ss 00:00:01 -t 00:00:06 split4.mp4
进行重新编码相对于copy效果比较符合预期。
详细信息参考:使用ffmpeg截取视频片段_ffmpeg 截取视频片段-CSDN博客
四、对视频进行填充,pad
ffmpeg -i test.mp4 -vf pad=1024:1024:256:256:white pad.mp4
ffplay pad.mp4
# 1024:1024为padding后的尺寸;
# 256:256为原始视频左上顶点在1024*1024的图像中的坐标;
# white为padding像素的颜色;
padding的颜色可以通过十六进制数来表示rgb颜色;
五、对视频进行翻转,hflip,vflip
ffmpeg -i test.mp4 -vf hflip hflip.mp4
ffmpeg -i test.mp4 -vf vflip vflip.mp4
六、在视频中加入视频(画中画),overlay;
前景窗口(第二输入)覆盖在背景窗口(第一输入)的指定位置。
ffmpeg -i test1.mp4 -i test2.mp4 -filter_complex overlay=W-w:H-h overlay.mp4
# -filter_complex:
# overlay=W-w:H-h为前景窗口左上顶点在背景窗口中的坐标
#变量说明:如下变量可用在 x 和 y 的表达式中
#main_w 或 W 主输入(背景窗口)宽度
#main_h 或 H 主输入(背景窗口)高度
#overlay_w 或 w overlay 输入(前景窗口)宽度
#overlay_h 或 h overlay 输入(前景窗口)高度
七、在视频中加入文字,drawtext
ffmpeg -i test.mp4 -vf drawtext=fontcolor=black:fontsize=50:text='HelloWorld':x=0:y=100 drawtext.mp4
# fontcolor为颜色
# fontsize为字号;
# text为内容;
# x:y为显示的坐标;
八、视频拼接,空间拼接,时间拼接
8.1空间拼接
ffmpeg -i test1.mp4 -i test2.mp4 -filter_complex "[0:v]pad=iw*2:ih*1[a];[a][1:v]overlay=w:0" concat.mp4
# -filter_complex
# [0:v]pad=iw*2:ih*1[a]:将第0个输入(test1.mp4)的视频padding为两倍宽度的视频[a];
# [a][1:v]overlay=w:0:将第1个输入(test2.mp4)视频作为前景覆盖到视频[a]上,坐标为w:0;
参考:左右拼接、上下拼接、2*2拼接
ffmpeg 常用命令_ffmpeg -r -q-CSDN博客
8.2时间拼接
ffmpeg -i test.mp4 -qscale 4 1.mpg
ffmpeg -i test2.mp4 -qscale 4 2.mpg
ffmpeg -i "concat:1.mpg|2.mpg" -c copy output.mpg
ffmpeg -i output.mpg -y -qscale 0 -vcodec libx264 output.mp4
# or
ffmpeg -i concat:"1.mpg|2.mpg" -c copy concat.mp4
九、视频转为图像
ffmpeg -i test.mp4 -q:v 1 -start_number 0 imgs/%05d.jpg
# or
ffmpeg -i test.mp4 -r 10 -f image2 imgs/%05d.jpg
# -q:v 1:图像质量, 2为保存为高质量
# -start_number 0:为保存图片名字的起始index
# -r 10:帧数 10
# -f image2: 定格式化的格式为image2
# %5d:以为5位数按正序编号
十、图像转为视频
ffmpeg -framerate 25 -i ./imgs/%d05.jpg -c copy -y video.mp4
# -framerate 25: 帧率
十一、视频添加音频
ffmpeg -i test.mp4 -i audio.wav -y -v quiet -shortest new.mp4
# -v quiet:静默工作,不输出版本、工作信息
# -shortest:在输出文件前增加-shortest参数,让生成的视频最短化
参考资料:
https://cloud.tencent.com/developer/article/2388711
https://ffmpeg.org/ffmpeg-filters.html