前言:在不同平台下安装FFmpeg
1、mac系统下安装ffmpeg。
打开terminal,运行:
brew install ffmpeg
安装完后,terminal中输入:ffmpeg,出现下面提示即安装成功。
2、window环境下安装ffmpeg.
进入FFmpeg官网
下载完后解压到一个地方。
配置环境变量,配置到bin目录即可。
配置好后,打开命令窗口。输入ffmpeg,出现如下信息即配置成功。
一:FFmpeg处理音视频的流程
二:FFmpeg处理音视频的命令。
1、基本信息查询。
-version 显示版本
-demuxers 显示可用的demuxers
-muxers 显示可用的muxers
-devices 显示可用的设备
-decoders 显示可用的解码器
-encoders 显示可用的编码器
-formats 显示可用的格式
-protocols 显示可用的协议
-filters 显示可用的过滤器
-pix_fmts 显示可用的像素格式
-sample_fmts 显示可用的采样格式
-layouts 显示channel名称
-colors 显示识别的颜色名称
示例:ffmpeg -version
2、录制命令
mac下的录制命令:(退出录制屏幕:control+c)
ffmpeg -f avfoundation -i 1 -r 30 out.mp4
-f:指定使用 avfoundation 采集数据
-i:指定从哪采集数据,他是一个文件索引号
-r:指定帧率
window下的录制命令:(退出录制屏幕:ctrl+c)
ffmpeg -f gdigrab -i desktop luping.mp4
-f:指定使用 gdigrab 采集数据
-i:指定从哪采集数据,他是一个文件索引号
2.2、播放yuv格式数据:
ffplay -s 3360x2100 -pix_fmt uyvy422 out.yuv
2.3、查看可用设备
mac系统下的命令:
ffmpeg -f avfoundation -list_devices true -i ""
2.4、录制音频
mac系统下的命令:
ffmpeg -f avfoundation -i :0 out.wav
:0 代表音频设备
3、分解与复用
3.1、多媒体格式转换
ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv
-i:输入文件
-vcodec :视频编码处理方式
-acodec:音频编码处理方式
copy:指明只拷贝,不做编解码
3.2、提取音频
ffmpeg -i out.mp4 -acodec copy -vn out.aac
vn:v 代表视频,n 代表 no 也就是无视频的意思。
3.3、提取视频
ffmpeg -i out.mp4 -acodec copy -an out.h264
an: a 代表视频,n 代表 no 也就是无音频的意思。
3.4、视频和音频合成
ffmpeg -i out.h264 -i out.aac -vcodec copy -acodec copy muxer.mp4
4、提取原始数据
4.1、提取YUV数据
ffmpeg -i input.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuv
-c:v rawvideo 指定将视频转成原始数据
-pixel_format yuv420p 指定转换格式为yuv420p
ffplay -s wxh out.yuv
4.2、YUV转H264
ffmpeg -f rawvideo -pix_fmt yuv420p -s 320x240 -r 30 -i out.yuv -c:v libx264 -f rawvideo out.h264
4.3、提取PCM数据
ffmpeg -i out.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm
ffplay -ar 44100 -ac 2 -f s16le -i out.pcm
4.4、PCM转WAV
ffmpeg -f s16be -ar 8000 -ac 2 -acodec pcm_s16be -i input.raw output.wav
5、滤镜命令
ffmpeg可以使用libavfilter库中的过滤器处理原始音频和视频帧。 几个链式过滤器形成一个过滤器图形。 ffmpeg区分两种类型的过滤器图形:简单和复杂。
5.1、视频高度和宽度减小(默认是视频中心点)
ffmpeg -i out.mp4 -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy crop.mp4
-vf:使用视频滤镜
crop:裁剪视频
in_w-200:宽度减小200
in_h-200:高度减小200
-c:v:视频编码器
-c:a:音频编码器
6、音视频的裁剪与合并
ffmpeg -i out.mp4 -ss 00:00:00 -t 10 out1.mp4
-ss 指定裁剪的开始时间,精确到秒
-t 被裁剪后的时长。
这种截取的好处是特别快,因为它不会对视频重新编码,直接截取相关时间,导出视频,但是这种方式会导致:如果视频结尾不是关键帧,那么视频最后就会出现一段空白。
ffmpeg -ss 00:00:00 -t 12 -accurate_seek -i input.mp4 -codec copy -avoid_negative_ts 1 output.mp4
这样截取视频之后,空白视频是没有了,但是时间不会精确截取,它会找到下一个关键帧,补全这个视频,所以,导致连续分割的视频之间存在细微的交集。
ffmpeg -ss 00:00:00 -t 12 -i input.mp4 -c:v libx264 -c:a aac -strict experimental -b:a 98k output.mp4
避免关键帧的丢失并精确截取时间,需要重新编码视频。
视频拼接:
新建一个files.txt文件,其中加入(必须是单引号)
file 'input1.mp4'
file 'input3.mp4'
file 'input5.mp4'
ffmpeg -f concat -i files.txt -c copy output.mp4
这一行指令使用了-c copy,说明他只适用于视频切割产生的分段,被合并的视频必须是相同的参数!!!
如果你需要合并参数不同的视频,把-c copy去掉
或者自己写压制参数,
参考参数:
-c:v libx264 -crf 23 -profile:v high -level 5 -c:a aac -b:a 240k
7、视频转图片。
ffmpeg -i out.mp4 -r 1 -f image2 image-%3d.jpeg
8、图片转视频
ffmpeg -i image-%3d.jpeg images.mp4
9、视频转GIF
ffmpeg -i zhihui.mp4 -ss 00:00:00 -t 3 play.gif
00:00:00 开始时间,分别为 时:分:秒
-t 3 :代表时长为3秒,时间越长生成的gif越大
10、视频去水印
ffmpeg -i logo.mp4 -filter_complex "delogo=x=450:y=1100:w=268:h=178:show=0" delogo.mp4
-i:指定从哪采集数据
-filter_complex:指定要使用的滤镜
delogo:去水印的滤镜
x=:开始的x轴位置
y=:开始的y轴位置
w=:水印的宽度
h=:水印的高度
show=:是否有绿色的框(0:无框;1:有框)
11、视频裁剪(裁剪出一个矩形)
ffmpeg -i logo.mp4 -vf crop=200:400:200:400 crop.mp4
-vf:指定使用的滤镜
crop:视频裁剪滤镜
200:400:200:400 宽度:高度:x起始位置:y起始位置
等同于如下:
ffmpeg -i logo.mp4 -vf crop=w=200:h=400:x=200:y=400 crop.mp4
12、视频拉流
ffmpeg -i http://video01.youju.sohu.com/9f03c23c-5bb0-4946-b82a-947182d9dd362_0_0.mp4 meinv.mp4
13、视频转换格式
ffmpeg -y -i view_view.ifox -acodec copy video.mp4
view_view.ifox:原始视频格式
video.mp4:目标视频格式