Linux 源码安装 FFmpeg
加班次数频繁,已经快一年没有写博了。由于此次在项目中使用到了 FFmpeg 来处理音视频,顾记录下在 Linux 系统中源码安装 FFmpeg 以便不时之需。
1. 安装 yasm
yasm 是一个汇编编译器。FFmpeg 编译中为了提高编译速度,使用了汇编命令,如果不想安装此功能,则只需在后续安装 FFmpeg 中使用 ./configure –disable-yasm 选项。
下载地址:http://yasm.tortall.net/Download.html
安装命令:
(1)上传下载的 yasm 文件 yasm-1.3.0.tar.gz,本人上传至 /home/ffmpeg/ 文件目录中。
(2)解压文件并安装
-bash-4.2# cd /home/ffmpeg/
-bash-4.2# tar zxvf yasm-1.3..tar.gz
-bash-4.2# cd yasm-1.3.0
-bash-4.2# ./configure
-bash-4.2# make
-bash-4.2# make install
2. 安装 FFmpeg
下载地址:https://ffmpeg.org/download.html
安装命令:
(1)解压安装包并进入该目录
-bash-4.2# tar -jxvf ffmpeg-4.1.tar.bz2
-bash-4.2# cd ffmpeg-4.1
(2)配置项,具体配置项见文末
-bash-4.2# ./configure --enable-shared --enable-swscale --enable-gpl --enable-nonfree --enable-pic --prefix=/usr/local/ffmpeg --enable-version3 --enable-postproc --enable-pthreads --enable-avisynth
–enable-shared 表示生成动态链接库,可以供以后编程使用,同时生成的可执行程序也依赖这些动态库。如果不加上 –enable-shared 选项则使用静态链接的方式编译,此时不会生成动态库,同时生成的 FFmpeg 等的可执行文件也比较大,但他们不需要动态库就可以直接运行。
–prefix 表示程序安装的目录,这里设为 /usr/local/ffmpeg。
(3)编译安装
编译需要等待一段的时间,但编译成功后安装也就很快完成。
-bash-4.2# make
-bash-4.2# make install
3. 路径配置
为了方便在各个路径下使用 ffmpeg 命令,需配置一些路径,包括加入系统环境变量。
安装完成后将会在 /usr/local/ffmpeg 目录下出现三个文件目录:
-bash-4.2# cd /usr/local/ffmpeg/
-bash-4.2# ls
bin include lib share
- bin:可执行文件目录
- lib:动态链接库目录
- include:编程用到的头文件目录
(1)添加动态库路径
通过打开 /etc/ld.so.conf 文件发现只有 include ld.so.conf.d/*.conf 一句。
-bash-4.2# vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
表明其包含了 ld.so.conf.d 下所有的 conf 文件,于是可以在 /etc/ld.so.conf.d/ 创建一个新的文件 ffmpeg.conf,其中包含一句话,即为 ffmpeg 的 lib 目录。
-bash-4.2# cd /etc/ld.so.conf.d/
-bash-4.2# vi ffmpeg.conf
/usr/local/ffmpeg/lib
路径 /usr/local/ffmpeg/lib 为新加的配置文件 ffmpeg.conf 中的内容。
执行 ldconfig -v 命令,更新 ld.so.cache,使修改立即生效:
-bash-4.2# ldconfig -v
(2)创建软连接
相当于 windows 中的创建快捷方式:
-bash-4.2# ln -s /usr/local/ffmpeg/bin/ffmpeg /usr/local/bin/
-bash-4.2# ln -s /usr/local/ffmpeg/bin/ffprobe /usr/local/bin/
-bash-4.2# ln -s /usr/local/ffmpeg/bin/ffserver /usr/local/bin/
(3)头文件拷贝
路径 /usr/local/ffmpeg/include/ 包含的文件信息如下:
-bash-4.2# cd /usr/local/ffmpeg/include/
-bash-4.2# ls
libavcodec libavfilter libavutil libswresample
libavdevice libavformat libpostproc libswscale
/usr/local/ffmpeg/include 目录下创建 ffmpeg 目录:
-bash-4.2# mkdir ffmpeg
将 /usr/local/ffmpeg/include 路径下所有目录复制到 ffmpeg 目录中:
-bash-4.2# cp -r libswscale/ /usr/local/ffmpeg/include/ffmpeg/
-bash-4.2# cp -r libswresample/ /usr/local/ffmpeg/include/ffmpeg/
-bash-4.2# cp -r libpostproc/ /usr/local/ffmpeg/include/ffmpeg/
-bash-4.2# cp -r libavutil/ /usr/local/ffmpeg/include/ffmpeg/
-bash-4.2# cp -r libavformat/ /usr/local/ffmpeg/include/ffmpeg/
-bash-4.2# cp -r libavfilter/ /usr/local/ffmpeg/include/ffmpeg/
-bash-4.2# cp -r libavcodec/ /usr/local/ffmpeg/include/ffmpeg/
-bash-4.2# cp -r libavdevice/ /usr/local/ffmpeg/include/ffmpeg/
将 /usr/local/ffmpeg/include 路径下 ffmpeg/ 目录复制到 /usr/include/:
-bash-4.2# cp -r ffmpeg/ /usr/include/
(4)PKG_CONFIG_PATH 变量设置
ffmpeg 安装程序会在 /usr/local/ffmpeg/lib/pkgconfig 目录下提供 libavcodec.pc libswscale.pc 等5个.pc文件,分别对应安装的五个库文件。必须要让 pkg-config 能找到 ffmpeg 的 *.pc 文件,通过 PKG_CONFIG_PATH 来设置 pkg-config 来更新。
-bash-4.2# cd /usr/local/ffmpeg/lib/pkgconfig/
-bash-4.2# vim /etc/profile
添加如下配置:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/local/ffmpeg/lib/pkgconfig
export FFMPEG_HOME=/usr/local/ffmpeg
export PATH=$PATH:$FFMPEG_HOME
使配置立即生效:
-bash-4.2# source /etc/profile
(5)检查配置是否成功
在命令行输入 ffmpeg 查看是否安装成功,若出现如下界面则安装成功:
-bash-4.2# ffmpeg
ffmpeg version 4.1 Copyright (c) - the FFmpeg developers
built with gcc 4.8. (GCC) (Red Hat 4.8.-)
configuration: --enable-shared --enable-swscale --enable-gpl --enable-nonfree --enable-pic --prefix=/usr/local/ffmpeg --enable-version3 --enable-postproc --enable-pthreads --enable-avisynth
libavutil . 22.100 / . 22.100
libavcodec . 35.100 / . 35.100
libavformat . 20.100 / . 20.100
libavdevice . 5.100 / . 5.100
libavfilter . 40.101 / . 40.101
libswscale . 3.100 / . 3.100
libswresample . 3.100 / . 3.100
libpostproc . 3.100 / . 3.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}... Use -h to get full help or, even better, run 'man ffmpeg'
附:ffmpeg configure 参数配置
进入目录 /home/ffmpeg/ffmpeg-4.1 输入命令 ./configure --help 即可查看各个参数信息:
Standard options: 基本选项参数
--help 显示此帮助信息|print this message
--log[=FILE|yes|no] 记录测试并输出到config.err文件|log tests and output to FILE [config.err]
--prefix=PREFIX 安装程序到指定目录(默认/usr/local)|install in PREFIX [/usr/local]
--libdir=DIR 安装库到指定目录(默认prefix/lib)|install libs in DIR [PREFIX/lib]
--shlibdir=DIR 指定共享库路径(默认prefix/lib)|install shared libs in DIR [PREFIX/lib]
--incdir=DIR 指定includes路径(默认prefix/include/ffmpeg)|install includes in DIR[PREFIX/include/ffmpeg]
--mandir=DIR 指定man page路径(默认prefix/man)install man page in DIR [PREFIX/man]
--enable-mp3lame 启用mp3编码libmp3lame(默认关闭)enable MP3 encoding via libmp3lame[default=no]
--enable-libogg 启用ogg支持libogg(默认关闭)enable Ogg support via libogg [default=no]
--enable-vorbis 启用Vorbis支持libvorbis(默认关闭)enable Vorbis support via libvorbis [default=no]
--enable-faad 启用faad支持libfaad(默认关闭)enable FAAD support via libfaad [default=no]
--enable-faadbin 启用faad运行时链接支持(默认关闭)build FAAD support with runtime linking[default=no]
--enable-faac 启用faac支持libfaac(默认关闭)enable FAAC support via libfaac [default=no]
--enable-libgsm 启用GSM支持libgsm(默认关闭)enable GSM support via libgsm [default=no]
--enable-xvid 启用xvid支持xvidcore(默认关闭)enable XviD support via xvidcore [default=no]
--enable-libx264 启用H.264编码(默认关闭)enable H. encoding via x264 [default=no]
--enable-mingw32 启用MinGW本地/交叉win环境编译|enable MinGW native/cross Windows compile
--enable-mingwce 启用MinGW本地/交叉winCE环境编译enable MinGW native/cross WinCE compile
--enable-a52 启用A52支持(默认关闭)enable GPLed A52 support [default=no]
--enable-a52bin 启用运行时打开liba52.so.(默认关闭)open liba52.so. at runtime [default=no]
--enable-dts 启用DTS支持(默认关闭)enable GPLed DTS support [default=no]
--enable-pp 启用后加工支持(默认关闭)enable GPLed postprocessing support [default=no]
--enable-static 构建静态库(默认启用)build static libraries [default=yes]
--disable-static 禁止构建静态库(默认关闭)do not build static libraries [default=no]
--enable-shared 构建共享库(默认关闭)build shared libraries [default=no]
--disable-shared 禁止构建共享库(默认启用)do not build shared libraries [default=yes]
--enable-amr_nb 启用amr_nb float音频编解码器|enable amr_nb float audio codec
--enable-amr_nb-fixed 启用fixed amr_nb codec | use fixed point for amr-nb codec
--enable-amr_wb 启用amr_wb float音频编解码器|enable amr_wb float audio codec
--enable-amr_if2 启用amr_wb IF2音频编解码器|enable amr_wb IF2 audio codec
--enable-sunmlib 启用Sun medialib(默认关闭) | use Sun medialib [default=no]
--enable-pthreads 启用pthreads(多线程)(默认关闭)use pthreads [default=no]
--enable-dc1394 启用libdc1394、libraw1394抓取IIDC-(默认关闭)enable IIDC- grabbing using libdc1394 and libraw1394 [default=no]
--enable-swscaler 启用计数器支持?(默认关闭)software scaler support [default=no]
--enable-avisynth 允许读取AVISynth脚本本件(默认关闭)allow reading AVISynth script files [default=no]
--enable-gpl 允许使用GPL(默认关闭)allow use of GPL code, the resulting libav* and ffmpeg will be under GPL [default=no]
Advanced options (experts only): 高级选项参数(供专业人员使用)
--source-path=PATH 源码的路径(当前为/root/flv/ffmpeg)| path to source code [/root/flv/ffmpeg]
--cross-prefix=PREFIX 为编译工具指定路径 | use PREFIX for compilation tools []
--cross-compile 假定使用了交叉编译 | assume a cross-compiler is used
--cc=CC 指定使用何种C编译器(默认gcc)use C compiler CC [gcc]
--make=MAKE 使用特定的make | use specified make [make]
--extra-cflags=ECFLAGS 添加ECFLAGS到CFLAGS | add ECFLAGS to CFLAGS []
--extra-ldflags=ELDFLAGS 添加ELDFLAGS到LDFLAGS(默认-Wl,--as-needed)| add ELDFLAGS to LDFLAGS [ -Wl,--as-needed]
--extra-libs=ELIBS 添加ELIBS | add ELIBS []
--build-suffix=SUFFIX 为专用程序添加后缀 | suffix for application specific build []
--arch=ARCH 选择机器架构(默认x86)select architecture [x86]
--cpu=CPU 选用最低的cpu(影响指令的选择,可以在老CPU上出错) | selects the minimum cpu required (affects instruction selection, may crash on older CPUs)
--powerpc-perf-enable 启用PPC上面的性能报告(需要启用PMC)enable performance report on PPC
(requires enabling PMC)
--disable-mmx 禁用MMX | disable MMX usage
--disable-armv5te 禁用armv5te | disable armv5te usage
--disable-iwmmxt 禁用iwmmxt | disable iwmmxt usage
--disable-altivec 禁用AltiVec | disable AltiVec usage
--disable-audio-oss 禁用OSS音频支持(默认启用)disable OSS audio support [default=no]
--disable-audio-beos 禁用BeOS音频支持(默认启用)disable BeOS audio support [default=no]
--disable-v4l 禁用video4linux提取(默认启用)disable video4linux grabbing [default=no]
--disable-v4l2 禁用video4linux2提取(默认启用)disable video4linux2 grabbing [default=no]
--disable-bktr 禁用bktr视频提取(默认启用)disable bktr video grabbing [default=no]
--disable-dv1394 禁用DV1394提取(默认启用)disable DV1394 grabbing [default=no]
--disable-network 禁用网络支持(默认支持)disable network support [default=no]
--disable-ipv6 禁用ipv6支持(默认支持)disable ipv6 support [default=no]
--disable-zlib 禁用zlib(默认支持)disable zlib [default=no]
--disable-simple_idct 禁用simple IDCT例程(默认启用)disable simple IDCT routines [default=no]
--disable-vhook 禁用video hooking支持 | disable video hooking support
--enable-gprof enable profiling with gprof [no]
--disable-debug 禁用调试符号 | disable debugging symbols
--disable-opts 禁用编译器最优化 | disable compiler optimizations
--disable-mpegaudio-hp 启用更快的解码MPEG音频(但精确度较低)(默认禁用)faster (but less accurate) MPEG audio decoding [default=no]
--disable-protocols 禁用 I/O 协议支持(默认启用)disable I/O protocols support [default=no]
--disable-ffserver 禁用生成ffserver | disable ffserver build
--disable-ffplay 禁用生成ffplay | disable ffplay build
--enable-small 启用优化文件尺寸大小(牺牲速度)optimize for size instead of speed
--enable-memalign-hack 启用模拟内存排列,由内存调试器干涉? | emulate memalign, interferes with memory debuggers
--disable-strip 禁用剥离可执行程序和共享库 | disable stripping of executables and shared libraries
--disable-encoder=NAME 禁用XX编码器 | disables encoder NAME
--enable-encoder=NAME 启用XX编码器 | enables encoder NAME
--disable-decoder=NAME 禁用XX解码器 | disables decoder NAME
--enable-decoder=NAME 启用XX解码器 | enables decoder NAME
--disable-encoders 禁用所有编码器 | disables all encoders
--disable-decoders 禁用所有解码器 | disables all decoders
--disable-muxer=NAME 禁用XX混音器 | disables muxer NAME
--enable-muxer=NAME 启用XX混音器 | enables muxer NAME
--disable-muxers 禁用所有混音器 | disables all muxers
--disable-demuxer=NAME 禁用XX解轨器 | disables demuxer NAME
--enable-demuxer=NAME 启用XX解轨器 | enables demuxer NAME
--disable-demuxers 禁用所有解轨器 | disables all demuxers
--enable-parser=NAME 启用XX剖析器 | enables parser NAME
--disable-parser=NAME 禁用XX剖析器 | disables parser NAME
--disable-parsers 禁用所有剖析器 | disables all parsers
Linux 源码安装 FFmpeg的更多相关文章
- Linux源码安装JDK1.8
Linux源码安装Java 1.到官网下载 jdk-8u131-linux-x64.tar.gz 官网地址:http://www.oracle.com/technetwork/java/javase/ ...
- mysql-5.5 for linux源码安装
mysql-5.5 for linux源码安装 1.使用Yum安装依赖软件包 # yum install -y gcc gcc-c++ gcc-g77 autoconf automake bison ...
- Linux源码安装软件
Linux环境下 源码编译安装软件 ==== 1. 下载,步骤略 ==== 2. 验证,部分官方下载同时提供签名,MD5,sha1,sha256等校验信息. $ gpg --verify gnupg- ...
- linux源码安装mysql,shell编程学习,ubuntu
一.mysql安装 以源码安装的方式编译和安装Mysql 5.6. 1.卸载旧版本 rpm -qa | grep mysql 检查是否有旧版本 查询结果:mysql-libs-5.1.73-7.el6 ...
- linux源码安装软件的一般方法
rhel系统貌似安装不了xmgrace,配置的时候居然说要那个M*tif库.百度了一下,需要openmotif库,然后用root账户想要用yum安装一下这个库,搞了好久没搞懂.后面搞明白了,原因竟是因 ...
- Linux 源码安装Ansible 参考篇
Ansible 源码搭建配置 近期在学习自动化运维相关技术,文章主要模拟内网情况下对Ansible的安装演示,源码安装较为繁琐.枯燥,尤其是在实际安装过程中可能出现各式各样的问题,所有在安装过程中尽量 ...
- Linux源码安装RabbitMQ高可用集群
1.环境说明 linux版本:CentOS Linux release 7.9.2009 erlang版本:erlang-24.0 rabbitmq版本:rabbitmq_server-3.9.13 ...
- Linux源码安装mysql步骤
创建文件夹: mkdir /usr/local/webserver 安装必要依赖包 yum -y install gcc gcc-c++ make ncurses-devel安装cmake ...
- Linux 源码安装apache 与常见错误解决
文档原位置 一.编译安装apache 1.解决依赖关系 httpd-2.4.4需要较新版本的apr和apr-util,因此需要事先对其进行升级. 升级方式有两种,一种是通过源代码编译安装,一种是直接升 ...
随机推荐
- Silverlight实用窍门系列:68.Silverlight的资源字典ResourceDictionary
允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://chengxingliang.blog.51cto.com/3972944/886643 ...
- 设计模式学习心得<单利模式 Singleton>
概述 意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 主要解决 一个全局使用的类频繁地创建与销毁. 何时使用 当您想控制实例数目,节省系统资源的时候. 如何解决 判断系统是否已经有这个单 ...
- kylin 系列(一)安装部署
kylin 系列(一)安装部署 一.环境说明 1.1 版本选择 cdh 版本下载地址:http://archive.cloudera.com/cdh5/cdh/5/ 软件名称 版本 JDK 1.8 H ...
- jdk8 永久代变更
java8 去掉了永久代permgen(又称非堆,其实也是堆的一部分),类的方法代码,常亮,方法名,静态变量等存放在永久代中 改为使用元空间 Metaspace , Metaspace 不在是堆的一部 ...
- Java多线程系列4 线程交互(wait和notify方法)
wait()/ notify()/ notifyAll() 任何Object对象都可以作为这三个方法的主调,但是不推荐线程对象调用这些方法. 1使用wait().notify()和notifyAll( ...
- 页面仔初窥"前端工程化"
今天看了几篇前端界的一位大牛--张云龙的文章,其中一篇在自己的理解范围内看得懂一些,有所收获,说的是前端工程化的事,看完算是对前端工程形成了一个模糊的概念. 现在我所接触到的前端开发,还是张云龙大神所 ...
- 339. Nested List Weight Sum
https://leetcode.com/problems/nested-list-weight-sum/description/ Given a nested list of integers, r ...
- 2019.02.15 bzoj5210: 最大连通子块和(链分治+ddp)
传送门 题意:支持单点修改,维护子树里的最大连通子块和. 思路: 扯皮: bzojbzojbzoj卡常差评. 网上的题解大多用了跟什么最大子段和一样的转移方法. 但是我们实际上是可以用矩阵转移的传统d ...
- modal 永久移除遮盖层
样式中直接加入: .modal-backdrop { opacity: 0 !important; filter: alpha(opacity=0) !important;}
- (转)Flex 布局教程:
这个博客的内容比较新,多看看 http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html [语法篇] http://www.ruanyifeng. ...