ffmpeg常用教程
一、安装
ffmpeg官网:https://www.ffmpeg.org/download.html
该网站中的FFMPEG分为3个版本:Static,Shared,Dev。
前两个版本可以直接在命令行中使用,他们的区别在于
Static里面只有3个应用程序:
- ffmpeg.exe
- ffplay.exe
- ffprobe.exe
Shared里面除了3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe之外,还有一些Dll,比如说avcodec-54.dll之类的。
Shared里面的exe体积很小,他们在运行的时候,到相应的Dll中调用功能。
Dev版本是用于开发的,里面包含了库文件xxx.lib以及头文件xxx.h,这个版本不包含exe文件。
这里我们使用static版本,下载zip压缩文件,解压到指定目录,利用Windows自带命令提示符CMD,CD到解压的路径,
例如:D:\ffmpeg201200216\bin,这样bin下面的ffmpeg.exe就可以在命令行中使用了,可以用ffmpeg -version测试一下:
放一个mp4视频,然后把声音提取到output.acc,用命令测试一下:
ffmpeg -i movie.mp4 -acodec copy -vn output.aac
二、常用命令
主要参数:
- -i 设定输入流
- -f 设定输出格式
- -ss 开始时间
视频参数:
- -b 设定视频流量(码率),默认为200Kbit/s
- -r 设定帧速率,默认为25
- -s 设定画面的宽与高
- -aspect 设定画面的比例
- -vn 不处理视频
- -vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器
音频参数:
- -ar 设定采样率
- -ac 设定声音的Channel数
- -acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
- -an 不处理音频
1. 视频格式转换
比如一个avi文件,想转为mp4。
ffmpeg -i input.avi output.mp4
2. 提取音频
比如一个相声.MP4文件,只想听声音,提取音频为.ACC格式:
ffmpeg -i 相声.mp4 -acodec aac -vn output.aac
(-vn 不处理视频 )
3. 提取视频
比如一个相声.MP4文件,只想看视频影像不听声音:
ffmpeg -i 相声.mp4 -vcodec copy -an output.mp4
(-an 不处理音频)
4. 视频剪切
截取视频从时间为00:00:15开始,截取5秒钟的视频:
ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4
-ss表示开始切割的时间,-t表示要切多少。
ffmpeg 在切割视频的时候无法做到时间绝对准确,因为视频编码中关键帧(I帧)和跟随它的B帧、P帧是无法分割开的,否则就需要进行重新帧内编码,会让视频体积增大。所以,如果切割的位置刚好在两个关键帧中间,那么 ffmpeg 会向前/向后切割,所以最后切割出的 chunk 长度总是会大于等于应有的长度。
5.码率控制
码率: bitrate = file size / duration
比如一个文件20.8M,时长1分钟,那么,码率就是:
biterate = 20.8M bit/60s = 20.8102410248 bit/60s= 2831Kbps*
ffmpg控制码率有3种选择:
- -minrate
- -b:v
- -maxrate
-b:v 主要是控制平均码率。 比如一个视频源的码率太高了,有10Mbps,文件太大,想把文件弄小一点,但是又不破坏分辨率:
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4
-minrate -maxrate 设置码率波动阈值
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4
6. 视频编码格式转换
相声.mp4的编码是MPEG4,转换H264编码:
ffmpeg -i input.mp4 -vcodec h264 output.mp4
相反
ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4
7.为视频添加logo
水印logo.png贴到一个视频上,那可以用如下命令:
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay output.mp4
8. 旋转视频
在手机上录的视频,在电脑放,是颠倒的,需要旋转90度。
ffmpeg -i 相声.mp4 -vf transpose=1 rotate8.mp4