手把手编译FFmpeg

news2025/1/20 4:45:20

支持centos8.6、ubuntu20.04

export

建议开始之前,弄一台干净的机子,或者系统恢复到出厂设置,否则容易出问题

然后设置动态库默认加载目录(注意/usr/local/lib不是系统默认的路径,/lib/usr/lib才是)

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
# ....其他自定义地址, export LD_LIBRARY_PATH=<path>:$LD_LIBRARY_PATH

为什么修改LD_LIBRARY_PATH呢?因为运行时动态库的搜索路径的先后顺序是:

  1. 编译目标代码时指定的动态库搜索路径,优先级最高,需要用户直接在CMakeList.txt里指定,例如:link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)
  2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径,通过echo $LD_LIBRARY_PATH来查看
  3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径,通过cat /etc/ld.so.conf来查看
  4. 系统默认动态库搜索路径/lib
  5. 系统默认动态库搜索路径/usr/lib

这个顺序是compile gcc时写在程序内的,通常软件源代码自带的动态库不会太多,而我们的/lib/usr/lib只有root权限才可以修改,而且配置文件/etc/ld.so.conf也是root的事情,我们只好对LD_LIBRARY_PATH进行操作。

sudo vi /etc/profile

添加几行内容(和刚才的export一摸一样)

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

然后执行source使之生效

source /etc/profile

cmake/make/gcc/g++/gdb

首先进入管理者模式

sudo su
#centos
yum update
yum install git unzip zip
#ubuntu
apt update
apt install git unzip zip

准备好Linux设备,先安装cmake v3.20.2

cd /usr/local
wget https://cmake.org/files/v3.20/cmake-3.20.2-linux-x86_64.tar.gz
tar zxvf cmake-3.20.2-linux-x86_64.tar.gz
mv cmake-3.20.2-linux-x86_64 /opt/cmake-3.20.2
ln -sf /opt/cmake-3.20.2/bin/* /usr/bin/
rm cmake-3.20.2-linux-x86_64.tar.gz

通过cmake命令来验证

然后安装编译器和构建工具

make、gcc、g++、gdb

#centos
yum install make gcc g++ gdb
#ubuntu
apt install make gcc g++ gdb

验证gdb版本

openssl

安装openssl,如果是ubuntu先要删除系统自带的版本

apt remove openssl

然后统一安装openssl

cd /usr/local
wget https://www.openssl.org/source/openssl-1.1.1i.tar.gz --no-check-certificate
tar zxvf openssl-1.1.1i.tar.gz
mv openssl-1.1.1i openssl
cd openssl
./config shared
make
make install

测试openssl版本信息

openssl version

如果出现以下错误,就重启下机子

设置环境变量,否则cmake的find_package找不到它,同时也写进/etc/profile中去

参考:cmake .. -DOPENSSL_ROOT_DIR=/usr/local/openssl -DOPENSSL_INCLUDE_DIR=/usr/local/include -DOPENSSL_CRYPTO_LIBRARY=/usr/local/lib/libcrypto.so -DOPENSSL_SSL_LIBRARY=/usr/local/lib/libssl.so

export OPENSSL_ROOT_DIR=/usr/local/openssl
export OPENSSL_INCLUDE_DIR=/usr/local/include/openssl
export OPENSSL_CRYPTO_LIBRARY=/usr/local/lib/libcrypto.so
export OPENSSL_SSL_LIBRARY=/usr/local/lib/libssl.so

 ffmpeg

mkdir /usr/local/DOWNLOAD

#ubuntu
sudo apt-get install libx11-dev
sudo apt-get install xorg-dev
#解决ffplay播放音频报错:Could not initialize SDL - Audio target 'pulse' not available,以及No such audio device问题
sudo apt-get install libpulse-dev
#以下这两个只安装libasound2也是可以的,如果不行就两个都安装
sudo apt-get install libasound2
sudo apt-get install libasound2-dev

yasm

cd /usr/local/DOWNLOAD
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz --no-check-certificate
tar zxvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
sudo ./configure
sudo make
sudo make install

fdk-aac

cd /usr/local/DOWNLOAD
wget https://downloads.sourceforge.net/opencore-amr/fdk-aac-2.0.1.tar.gz --no-check-certificate
tar zxvf fdk-aac-2.0.1.tar.gz
cd fdk-aac-2.0.1
./configure --disable-static
make
make install

nasm

cd /usr/local/DOWNLOAD
wget https://www.nasm.us/pub/nasm/releasebuilds/2.15/nasm-2.15.tar.gz --no-check-certificate
tar -vxf nasm-2.15.tar.gz
cd nasm-2.15
./configure
make
make install

sdl2

cd /usr/local/DOWNLOAD
wget http://libsdl.org/release/SDL2-2.0.14.tar.gz --no-check-certificate
tar zxvf SDL2-2.0.14.tar.gz
cd SDL2-2.0.14
./configure
make
make install

curl

cd /usr/local/DOWNLOAD
wget https://curl.haxx.se/download/curl-7.74.0.tar.gz --no-check-certificate
tar zxvf curl-7.74.0.tar.gz
cd curl-7.74.0
./configure --without-nss --with-ssl
make
make install

vpx

cd /usr/local/DOWNLOAD
wget https://github.com/webmproject/libvpx/archive/v1.10.0/libvpx-1.10.0.tar.gz
unzip libvpx-v1.10.0.zip
cd libvpx-1.10.0
./configure --enable-pic --enable-static  --enable-shared --as=yasm --target=generic-gnu
make
make install

opus

cd /usr/local/DOWNLOAD
wget https://archive.mozilla.org/pub/opus/opus-1.3.tar.gz
tar xzvf opus-1.3.tar.gz
cd opus-1.3
./configure --enable-static --enable-shared
make
make install

x264

cd /usr/local/DOWNLOAD
git clone https://code.videolan.org/videolan/x264.git
cd x264
./configure --enable-static --enable-shared --disable-opencl --disable-asm
make
make install

x265

cd /usr/local/DOWNLOAD
wget http://ftp.videolan.org/pub/videolan/x265/x265_3.2.tar.gz --no-check-certificate
tar xzvf x265_3.2.tar.gz
cd x265_3.2/build/linux/
sh make-Makefiles.bash
// 按'c'再按'e'再按'g'键保存退出
make
make install

ffmpeg

#查看链接依赖顺序
/sbin/ldconfig -v
 
cd /usr/local/DOWNLOAD
wget http://ffmpeg.org/releases/ffmpeg-4.3.2.tar.xz --no-check-certificate
tar -xvf ffmpeg-4.3.2.tar.xz
cd ffmpeg-4.3.2

./configure --prefix=/usr/local \
  --enable-static \
  --enable-shared \
  --enable-gpl \
  --enable-libx264 \
  --enable-libx265 \
  --enable-libopus \
  --enable-libvpx \
  --enable-sdl2 \
  --enable-zlib \
  --enable-libfdk-aac \
  --enable-openssl \
  --enable-nonfree \
  --extra-cflags=-Wno-implicit-function-declaration
   
make && make install

到此,就基本ok了,输入ffmpeg命令查看一下吧 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/161432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jsp库存管理管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 库存管理管理系统 是一套完善的系统源码&#xff0c;对理解JSP java serlvet MVC编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;以及相应配套的设计文档&#xff0c;系统主要采用B/S 模式开发。 通过本系统建设&#xff0c…

ArcGIS基础实验操作100例--实验97计算河道方向坡度

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 空间分析篇--实验97 计算河道方向坡度 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&…

内存管理-模板初阶理解-string类的模拟实现

文章目录1. 内存管理operator new和operator delete面试题&#xff1a;malloc、free和new、delete的区别2. 内存泄漏1. 内存泄漏&#xff1a;2. 内存泄漏危害&#xff1a;3.堆内存泄漏4.系统资源泄漏3. 模板初阶函数模板类模板&#xff1a;模板运行时不检查数据类型&#xff0c…

黑马编程资源最新最全全清单:速来收藏~

今年是黑马坚持免费分享视频教程的第16年&#xff0c;每年到了这个时候&#xff0c;「成绩单」也不会缺席&#xff0c;不仅是对过往的回顾&#xff0c;更是对那些选择跟着黑马持续学习的小伙伴们的一种激励。 黑马视频教程2022年速报 截至年底&#xff0c;黑马程序员 B 站累计…

ArcGIS基础实验操作100例--实验96创建地形剖面图

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 空间分析篇--实验96 创建地形剖面图 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&am…

头戴式耳机跑步方便吗、公认最好的跑步耳机排行榜

平时&#xff0c;我们总能看到许多运动健身的人群&#xff0c;在锻炼时都佩戴着耳机。但运动耳机的选择&#xff0c;同样是大有学问的。如果佩戴传统的真无线蓝牙耳机&#xff0c;有可能出现佩戴不稳、耳道肿胀等问题&#xff0c;影响运动体验。所以今天我们特意给大家带来几款…

时间段查询将00:00:00更换成23:59:59

目录 一.问题描述 二.解决问题 2.1.思路一(时间戳赋值) 2.2思路二(LocalDateTime 方法赋值) 三.总结 一.问题描述 在我们作web项目的时候总会有时间段的查询条件 例如: 问题: 前端传到后台的时间: reportStartTime: 2023-01-01 00:00:00 reportEndTime: 2023-01-13 00…

Vue3和Vue2的区别

vue经历从2.0到3.0更新之后&#xff0c;简⽽⾔之就是变得更轻&#xff0c;更快&#xff0c;使⽤起来更加⽅便&#xff0c;每⼀次的版本迭代都是对上⼀个版本的升级优化&#xff0c;不管 是对于我们开发者还是对于⽤户体验都是不断地在越来越⽅便&#xff0c; 选项式Api与组合式…

【计数服务】计数服务落地

一、计数服务 计数服务是针对某个动作在不同维度行为次数的统计或者累加&#xff0c;计数服务需要满足计数的准确性&#xff0c;并且在满足准确性的同时&#xff0c;要注意其性能。 二、计数服务的实现 计数服务分为 非精准计数和精准计数 非精准计数&#xff1a;点赞量、浏…

【Blender UV映射03】如何处理复杂的结构 如何整理UV

写在前面 前面的学习记录&#xff1a; 【Blende UV映射01】创建UV 使用UV贴图处理纹理 【Blender UV映射02】智能UV映射 创建和应用法线纹理 依旧是跟着Blender 2.8 UV Mapping教程&#xff0c;本文是教程的P13-P19的过程记录。 1 善用L分析模型结构 拿到一个相对复杂的模…

压轴级教程!Java人必学的微服务项目上线!

给你说个冷知识下周末就要过年了……年关将至有人欢喜有人愁欢喜的是在外奔波一年终于可以和家人相聚愁的则是回家无非是&#xff1a;1.圆了亲戚的媒婆梦2.让亲戚过过嘴瘾3.成为晚辈的反面教材面对七大姑八大姨的灵魂拷问——有对象了吗&#xff1f;——现在做啥工作&#xff1…

2022年美赛B题O奖获奖分享

1.美赛获奖分享&#xff1a; ** 可以去我的网站逛逛点击传输 ** 首先是选题&#xff0c;今年MCM选择A,B题目的队伍相对较少&#xff0c;超60%的队伍选择C题&#xff0c;对题目的选择需要慎重&#xff0c;较难的题目参赛的队伍会少一些&#xff0c;获得O奖的概率理论上较高…

day14|110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

110.平衡二叉树 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输…

【正点原子FPGA连载】 第十七章 呼吸灯实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十七章 呼吸灯…

队列的讲解和实现(图解+代码/C语言+循环队列OJ)

今天为大家分享的是队列的实现&#xff0c;本文主要介绍单向链表来模拟实现队列&#xff0c;最后给出力扣上一道循队列的OJ实现。 目录 一、图解队列的结构 二、模拟栈的分步实现 &#xff08;1&#xff09;队列的初始化 &#xff08;2&#xff09;队尾入队 &#xff08;3&…

【自学Python】Python比较运算符is和==区别

Python比较运算符is和区别 Python比较运算符is和区别教程 在 Python 中&#xff0c;比较运算符 is 和 is not 用于比较两个对象是否是同一个对象&#xff0c; 和 ! 用于比较两个 变量 的数据是否相等。 案例 比较数值型 数值型&#xff0c;使用 is 和 效果相同 print(&q…

Word控件Spire.Doc 【Table】教程(5):创建表格并在 Doc 文档中设置其边框

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

ROS2机器人编程简述新书推荐-A Concise Introduction to Robot Programming with ROS2

参考链接&#xff1a;https://github.com/fmrico/book_ros2封面&#xff1a;简介&#xff1a;ROS2机器人编程简明教程使用ROS2进行机器人编程的简明介绍为读者提供了通过编程实现机器人所需的概念和工具。它将使读者具备使用ROS2&#xff08;ROS的新版本&#xff09;进行项目所…

RT-Thread系列--内存堆MEMHEAP源码分析

一、目的在上一篇《RT-Thread系列--内存池MEMPOOL源码分析》我们介绍了RT-Thread的内存池MEMPOOL实现细节&#xff0c;包括内存池结构和内存块管理。本篇我们来分析一下RT-Thread的内存堆MEMHEAP的实现原理。内存堆MEMHEAP的特点&#xff1a;按需分配&#xff0c;需要多少内存就…

小伟婚后首次看望丈母娘,大衣哥准备了一大三轮车礼品,太豪横了

伴随着春节的临近&#xff0c;大衣哥的儿子小伟&#xff0c; 又一次迎来自己的高光时刻&#xff0c;他和未婚妻一起携手&#xff0c;步入了神圣的婚姻殿堂&#xff0c;大衣哥也长出一口气。儿子小伟再婚&#xff0c;大衣哥完成了一小半任务&#xff0c;接下来还要生孩子&#x…