众所周知在音视频的处理方面,FFmpeg是一款非常强大的自由软件,它是一个开源免费跨平台的视频和音频流软件工具,它提供了录制、转换以及流化音视频的完整解决方案。目前各大云厂商在音视频处理的底层能力也是基于开源ffmpeg各自再做优化与改进来实现音视频相关处理的,本文简单介绍下几种比较实用的ffmpeg常见命令方法。
首先了解下FFmpeg由几个组件组成:
- 命令行应用程序
- ffmpeg:用于对视频文档或音频档案转换格式
- ffplay:一个简单的播放器,基于SDL与FFmpeg库
- ffprobe:用于显示媒体文件的信息Mediainfo
- 函数库
- libswresample:用于音频重采样和格式转换等功能
- libavcodec:包含全部FFmpeg音频/视讯编解码库
- libavformat:包含demuxers和muxer库
- libavutil:包含一些工具库
- libpostproc:对于视讯做前处理的库
- libswscale:对于影像作缩放的库
- libavfilter:包含多媒体处理常用的滤镜功能
FFmpeg可使用众多参数,参数内容会根据ffmpeg版本而有差异 这里不再赘述,使用前建议先参考参数及编解码器的叙述。此外参数明细可用ffmpeg -h显示;编解码器名称等明细可用ffmpeg -formats显示。一些常用的参数也可以通过网上查找相关资料获取。
1. 直播推流:将本地mp4文件推流到直播域名
ffmpeg -re -i out.mp4 -c copy -f flv rtmp://livepush.domain/live/streamName
2. 拉流转推:将一路在线直播流转推到另外一个推流地址上
ffmpeg -i '拉流地址' -acodec copy -vcodec copy -f flv '推流地址'
3. 拉直播流保存本地文件
ffmpeg -i rtmp://liveplay.domain/live/streamName -c copy dump.flv
4. 文件格式转换
ffmpeg -i in.mov -vcodec copy -acodec copyout.mp4 // mov --> mp4
ffmpeg -i in.flv -vcodec copy -acodec copyout.mp4 // flv --> mp4
ffmpeg -i in.gif -vf scale=420:-2,format=yuv420p out.mp4 // gif --> mp4
ffmpeg -i son_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3 // wav --> mp3
5. 旋转视频,例如将视频顺时针旋转90度:
ffmpeg -i in.mp4 -vf rotate=PI/2 out.mp4
6. 视频剪辑,当需要截取一个长视频的其中某一段内容,比如从一个视频的第10秒开始,截取6秒的内容,也就是10~16秒的内容,输入一个out.mp4文件:
ffmpeg -i in.mp4 -ss 00:00:10 -t 00:00:06 -acodec aac -vcodec h264 -strict -2 out.mp4
//• -ss 指定裁剪的开始时间,精确到秒 • -t 被裁剪后的时长
7. 视频缩放,当需要把一个高分辨率的视频处理成一个低分辨率的视频,以达到减小视频体积的目的。举个例子:把一个源视频为1080*1920的视频缩小到720*960 :
ffmpeg -i in.mp4 -vf scale=720:960 -acodec aac -vcodec h264 out.mp4 // 1080*1920-->720*960
8. 调节视频帧率,比如将源视频25fps调整到15fps :
ffmpeg -i in.mp4 -r 15 out.mp4
9. 视频添加水印
ffmpeg -i out.mp4 -vf "movie=logo.png,scale=64:48[watermask];[in][watermask] overlay=30:10 [out]" watermask.mp4
// -vf中的 movie 指定logo位置。scale 指定 logo 大小。overlay 指定 logo 摆放的位置
10. 提取音频流
ffmpeg -i input.mp4 -acodec copy -vn out.aac
11. 提取视频流
ffmpeg -i input.mp4 -vcodec copy -an out.h264
12. 音视频合并
ffmpeg -i out.h264 -i out.aac -vcodec copy -acodec copy out.mp4
ffmpeg相当强大,以上只是介绍了部分比较常见实用的命令供大家借鉴,在音视频处理上使用ffmpeg可以实现很多功能,一些常见参数说明放在下面附录,完全的说明可以查询ffmpeg的官方资料:http://ffmpeg.org/ffmpeg-filters.html 。
附录:
主要参数
- -i设置输入文件名。
- -f设置输出格式。
- -y若输出文件已存在时则覆盖文件。
- -fs超过指定的文件大小时则退出转换。
- -ss从指定时间开始转换。
- -title设置标题。
- -timestamp设置时间戳。
- -vsync增减Frame使影音同步。
图像参数
- -b设置图像流量,默认为200Kbit/秒。
- -r设置帧率值,默认为25。
- -s设置画面的宽与高。
- -aspect设置画面的比例。
- -vn不处理图像,于仅针对声音做处理时使用。
- -vcodec设置图像图像编解码器,未设置时则使用与输入文件相同之编解码器。
声音参数
- -ab设置的每channel流量。
- -ar设置采样率。
- -ac设置声音的Channel数。
- -acodec设置声音编解码器,未设置时与图像相同,使用与输入文件相同之编解码器。
- -an不处理声音,于仅针对图像做处理时使用。
- -vol设置音量大小,256为标准音量。(要设置成两倍音量时则输入512,依此类推。)