FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。
FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。 FFmpeg编码库可以使用GPU加速。
查看FFmpeg支持的编码器
ffmpeg configure -encoders
查看FFmpeg支持的解码器
ffmpeg configure -decoders
查看FFmpeg支持的通信协议
ffmpeg configure -protocols
查看FFmpeg所支持的音视频编码格式、文件封装格式与流媒体传输协议
ffmpeg configure --help
播放视频
ffplay input.mp4
ffplay -autoexit input.mp4
设置视频的屏幕高宽比
ffmpeg -i input.mp4 -aspect 16:9 output.mp4
通常使用的宽高比是:
16:9
4:3
16:10
5:4
2:21:1
2:35:1
2:39:1
编码格式转换
# MPEG4编码转成H264编码
ffmpeg -i input.mp4 -strict -2 -vcodec h264 output.mp4
# H264编码转成MPEG4编码
ffmpeg -i input.mp4 -strict -2 -vcodec mpeg4 output.mp4
压缩视频
ffmpeg -i 2020.mp4 -vcodec h264 -vf scale=640:-2 -threads 4 2020_conv.mp4
ffmpeg -i 1579251906.mp4 -strict -2 -vcodec h264 1579251906_output.mp4
#参数说明
-i 2020.mp4 :指定输入文件
-vcodec h264 :指定编码格式(copy表示按原来格式)
-vf scale=640:-2 改变视频分辨率,缩放到640px宽,高度的-2是考虑到libx264要求高度是偶数,
所以设置成-2,让软件自动计算得出一个接近等比例的偶数高
-threads 4 : 运算核数
-s 1280x720 : 设置输出文件的分辨率,w*h
-b:v : 输出文件的码率,一般500k左右即可,人眼看不到明显的闪烁,这个是与视频大小最直接相关的
-preset : 指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium,
slow, slower, veryslow。与 veryslow相比,placebo以极高的编码时间为代价,只换取了大概1%的视频质量提升。这是一种收益递
减准则:slow 与 medium相比提升了5%~10%;slower 与 slow相比提升了5%;veryslow 与 slower相比提升了3%。针对特定类型的源
内容(比如电影、动画等),还可以使用-tune参数进行特别的优化。
-an : 去除音频流
-vn : 去除视频流
-c:a : 指定音频编码器
-c:v : 指定视频编码器,libx264,libx265,H.262,H.264,H.265。
libx264:最流行的开源 H.264 编码器
NVENC:基于 NVIDIA GPU 的 H.264 编码器
libx265:开源的 HEVC 编码器
libvpx:谷歌的 VP8 和 VP9 编码器
libaom:AV1 编码器
-re : 以源文件固有帧率发送数据
-minrate 964K -maxrate 3856K -bufsize 2000K : 指定码率最小为964K,最大为3856K,缓冲区大小为 2000K