介绍
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"。 [1] FFmpeg编码库可以使用GPU加速。
安装
FFmpeg
被许多开源项目采用,
QQ
影音、暴风影音、
VLC
等。
下载:FFmpeg
https://www.ffmpeg.org/download.html#build-windows
将zip解压
将bin目录配置到环境变量
测试 ffmpeg -version 有输出安装成功
将一个
.avi
文件转成
mp4
、
mp3
、
gif
等。
比如我们将
lucene.avi
文件转成
mp4
,运行如下命令:
ffffmpeg -i lucene.avi lucene.mp4
转成
mp3
:
ffffmpeg -i lucene.avi lucene.mp3
转成
gif
:
ffffmpeg -i lucene.avi lucene.gif
基本使用
生成m3u8/ts文件
使用ffffmpeg生成 m3u8的步骤如下:
第一步:先将avi视频转成mp4
ffmpeg.exe ‐i lucene.avi ‐c:v libx264 ‐s 1280x720 ‐pix_fmt yuv420p ‐b:a 63k ‐b:v 753k ‐r 18
.\lucene.mp4
下面把各参数意思大概讲讲,大概了解意思即可,不再此展开流媒体专业知识的讲解。
- -c:v 视频编码为x264 ,x264编码是H264的一种开源编码格式。
- -s 设置分辨率
- -pix_fmt yuv420p:设置像素采样方式,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0,它的作用是
- 根据采样方式来从码流中还原每个像素点的YUV(亮度信息与色彩信息)值。
- -b 设置码率,
- -b:a和-b:v分别表示音频的码率和视频的码率,
- -b表示音频加视频的总码率。码率对一个视频质量有很大的作用,后边会介绍。
- -r:帧率,表示每秒更新图像画面的次数,通常大于24肉眼就没有连贯与停顿的感觉了。
第二步:将mp4生成m3u8
ffmpeg ‐i lucene.mp4 ‐hls_time 10 ‐hls_list_size 0 ‐hls_segment_filename
./hls/lucene_%05d.ts ./hls/lucene.m3u8
- -hls_time 设置每片的长度,单位为秒
- -hls_list_size n: 保存的分片的数量,设置为0表示保存所有分片
- -hls_segment_fifilename :段文件的名称,%05d表示5位数字
生成的效果是:将
lucene.mp4
视频文件每
10
秒生成一个
ts
文件,最后生成一个
m3u8
文件,
m3u8
文件是
ts
的索引 文件。
使用
VLC
打开
m3u8
文件,测试播放效果,
VLC
是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多 媒体文件,以及 DVD
、音频
CD
、
VCD
及各类流媒体协议。(
http://www.videolan.org/
)
码率
码率又叫比特率即每秒传输的
bit
数,单位为
bps(Bit Per Second)
,码率越大传送数据的速度越快。
码率的计算公式是:文件大小(转成
bit
)
/
时长(秒)
/1024 = kbps
即每秒传输千位数
例如一个
1M
的视频,它的时长是
10s
,它的码率等于
1*1024*1024*8/10/1024 = 819Kbps
码率设置到多少才能达到最好,通过根据个人的经验或参考一些视频网台给出的参考,下图是优酷对码率的要求:
如果要将视频上传到优酷则必须按照上面的要求,如果是自己搭建视频服务器,码率设置不易过大,最终达到的视频清晰度满足业务需求即可。