Linux下ffmpeg的环境搭建与安装

背景

【FFmpeg是什么】
1· FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源软件。采用LGPL或GPL许可证,提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec。
2· FFmpeg一个领先的多媒体框架,具备解码,编码,转码,复用,解复用,流式传输,滤镜和播放等能力。
3· 它包含可供应用程序使用的libavcodec,libavutil,libavformat,libavfilter,libavdevice,libswscale和libswresample。 以及最终用户可用于转码和播放的ffmpeg,ffplay和ffprobe。
4· 哪些软件在用FFmpeg? FFmpeg的用户有Google,Facebook,Youtube,VLC,优酷,爱奇艺,土豆,Mplayer,射手播放器,暴风影音,KMPlayer,QQ影音,格式工厂,狸窝视频转换器,暴风转码等。
【FFmpeg的基本组成】
libavutil:工具库,如:随机数发生器。
libavcodec:音视频编解码库。
libavformat:封装格式处理库,包含格式封装、多媒体复用和解复用,包括获取解码
所需信息以生成解码上下文结构和读取音视频帧等功能
libavdevice:一个包含输入和输出设备的库,用于从许多常见的多媒体输入/输出软
件框架中获取和渲染,包括Video4Linux,Video4Linux2,VfW和
libavfilter:多媒体滤镜
libswscale:缩放和颜色空间转换的库
libswresample:音频重采样、格式转换的库
ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等
ffsever:一个 HTTP 多媒体即时广播串流服务器;
ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示;

获取FFmpeg源码包

有两个途径可以获取:
1. ffmpeg官方网站:http://www.ffmpeg.org/
在官网找到需要的版本,我选用的是 FFmpeg 3.4.4 “Cantor” 版本,因为最新版本没有ffserver。然后在Linux 执行下载、解压命令:

[root@localhost heijunma]# wget http://www.ffmpeg.org/releases/ffmpeg-3.4.4.tar.gz
[root@localhost heijunma]#tar -zxvf ffmpeg-3.4.4.tar.gz

解压后可以查看ffmpeg的第一级目录结构:
ffmpeg目录结构
每个目录的结构后面再讲
2. github开源社区地址:
git://source.ffmpeg.org/ffmpeg.git

可以用git将代码fork到本地,当然使用git之前请先安装git版本控制工具,需要根据自己的系统来安装对应的版本,Linux的架构信息可以由 uname -a 获取

[heijunma@localhost github]$ uname -a
Linux localhost.localdomain 2.6.32-754.3.5.el6.x86_64 #1 SMP Tue Aug 14 20:46:41 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

经查询得知系统是x86_64。因此我们需要安装git.x86_64版本,执行如下命令安装git版本控制工具

[root@localhost github]# yum install git.x86_64 -y

安装好之后,新建一个git工程目录,然后git初始化,全局配置用户名和邮箱,需要与Github相同:

[root@localhost github]# git init
Initialized empty Git repository in /home/heijunma/ffmpeg-3.4.4/github/.git/
[root@localhost github]#git config --global user.name "SugarWilliam"
[root@localhost github]#git config --global user.email "276190191@qq.com"
[root@localhost github]#git config --list
user.name=SugarWilliam
user.email=276190191@qq.com
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true

这样就初始化完成了,接着我们在github上clone一个ffmpeg3.4.4版本仓库到本地
登录你自己的GitHub账户(需要自己申请),进入https://github.com/FFmpeg/FFmpeg/branches 查看不同版本分支,选择release/3.4分支直接进行源码clone

[root@localhost github]# git clone -b release/3.4 https://github.com/FFmpeg/FFmpeg.git

配置与编译ffmpeg

进入到ffmpeg目录开始配置ffmpeg

[heijunma@localhost ffmpeg-3.4.4]$ ./configure --enable-ffplay --enable-ffserver

此时可能会出现错误信息打印:

nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.

If you think configure made a mistake, make sure you are using the latest
version from Git.  If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file "ffbuild/config.log" produced by configure as this will help
solve the problem.

这是由于 asm版本是旧的或者没有asm,因此需要安装或者更新,执行如下命令:

[root@localhost ffmpeg-3.4.4]# yum install yasm.x86_64 -y

安装完成后继续配置和编译ffmpeg,把ffplay和ffserver打开,configure 主要是配置编译项并且扫描环境是否有依赖缺失,如果configure执行顺利,会在当前目录下生成一个makefile用于编译,这也是Linux下源码编译安装软件的一般流程。

[root@localhost ffmpeg-3.4.4]# ./configure --enable-ffplay --enable-ffserver

ffmpeg配置成功

接着编译并安装:

[root@localhost ffmpeg-3.4.4]# make;make install

编译完成后会在当前目录下生成ffplay\ffserver\ffprobe\ffmpeg等可执行文件:
编译生成的可执行文件

ffmpeg安装目录如下,这是配置的时候默认的目录,可以在配置的时候执行如下命令:

[root@localhost ffmpeg-3.4.4]#./configure --prefix=PREFIX //安装到指定目录
[root@localhost bin]# cd /usr/local/bin/
[root@localhost bin]# ls
ffmpeg  ffplay  ffprobe  ffserver  sdl2-config  vsyasm  yasm  ytasm

ffmpeg安装
可以看到ffmpeg\ffplay\ffserver\ffprobe 都已经安装好了,因此可以直接以命令的方式执行和使用,而且我们可以看到这里还安装了其他的一些我么自己安装的软件例如 yasm 、SDL等。

ffmpeg 初体验

1. ffmpeg 转码工具的使用:
在ffmpeg下建立一个resource文件夹,然后拷贝一个MP3,一个mp4测试文件到该目录用于调试
例如
ffmpeg文件
- 然后执行如下命令:
- 这里没有配参数,使用的是默认参数,当然自己也可以配置指定参数

ffmpeg -i I_Am_You.mp4 I_Am_You.avi

转换
- 上图是转换过程,从转换过程可以看出一些细节;例如MP4封文件中,视频编码格式是YUV420P,分辨率是1280x720,音频格式是ac3(全称Audio Coding3音频编码3)杜比数码压缩,码率192kb/s、采样率48KHz,声道为立体声。
- 如此就完成了MP4转成了AVI
AVI转换
当然我们可以播放AVI文件验证一下是转换后否可以播放。

以上为ffmpeg的安装与环境搭建,接下来将要运行ffsever\ffplay\ffprobe。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐