Ubuntu20.04 编译安装FFmpeg,出错分析以及解决方案

最近工程上需要对FFmpeg底层源码进行修改,需要重新编译,遇见不少坑,出篇教程记录一下。

文章目录

    • 1.FFmpeg源码下载地址
    • 2.编译环境配置
    • 3.编译FFmpeg
    • 4.配置FFmpeg运行环境

1.FFmpeg源码下载地址

官方下载地址:Index of /releases (ffmpeg.org)

笔者这里下载的是4.4.4版本,可以根据自己的需求下载不同的版本

在这里插入图片描述

注:有些版本可能需要SDL2 支持,FFMpeg4.4.4并没有依赖这个库

SDL 下载地址:http://www.libsdl.org/download-2.0.php
下载后,同样解压,然后进入加压目录
S1执行命令:./configure --prefix=/usr/local
S2执行命令:sudo make
S3执行命令:sudo make install

2.编译环境配置

需要的编译工具如下:

sudo apt install aptitude
sudo aptitude install build-essential
sudo aptitude install yasm nasm

需要的依赖库如下:

sudo apt-get install libgmp3-dev
sudo apt install pkg-config
sudo apt install gnutls-bin
sudo aptitude install libaom-dev
sudo aptitude install libass-dev
sudo aptitude install libbluray-dev
sudo aptitude install libfdk-aac-dev
sudo aptitude install libmp3lame-dev
sudo aptitude install libopencore-amrnb-dev
sudo aptitude install libopencore-amrwb-dev
sudo aptitude install libopenmpt-dev
sudo aptitude install libopus-dev
sudo aptitude install libshine-dev
sudo aptitude install libsnappy-dev
sudo aptitude install libsoxr-dev
sudo aptitude install libspeex-dev
sudo aptitude install libtheora-dev
sudo aptitude install libtwolame-dev
sudo aptitude install libvo-amrwbenc-dev
sudo aptitude install llibvpx-dev
sudo aptitude install libwavpack-dev
sudo aptitude install libwebp-dev
sudo aptitude install libx264-dev
sudo aptitude install libx265-dev
sudo aptitude install libxvidcore-dev
sudo aptitude install liblzma-dev

注:不同的版本,所依赖的库可能略微有些差别,如果说编译的时候缺少xxx,根据提示安装相应的依赖库即可

3.编译FFmpeg

第一步:调用configure脚本,在源码根目录中,输入以下命令

./configure --prefix=/home/marxist/FFmpeg4 --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx  --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-lzma --enable-zlib --enable-gmp --enable-libvorbis --enable-libvo-amrwbenc --enable-libspeex --enable-libxvid --enable-libaom  --enable-libopenmpt --enable-libfdk-aac --enable-nonfree

注:prefix 后面是笔者的安装目录,请根据自己的需求自行修改,后面的参数是需要启用的库,不同版本的库略有些差异,

  • 如果提示xxx.h没有找到

说明该源码中可能没有包含相对应的库,删除报错相关的库即可

  • 如果遇到ERROR: gnutls not found using pkg-config

网上有两种解决方案:

1、sudo apt-get install libunistring-dev -y

笔者Ubuntu版本为20.04 ,试了并没有用

2、sudo apt install libgnutls28-dev

亲测可以使用,请读者根据两种解决方案,自行尝试

第二步:编译安装

上述configure没有出错的话,就可以进行最终编译了,install的位置由上述的prefix指定,这里笔者是安装到了主目录中了

sudo make
sudo make install

4.配置FFmpeg运行环境

install完成之后,系统环境变量中还是没有FFmpeg这个命令的,需要添加到环境变量中:

将 FFmpeg 添加至环境变量:
sudo vim ~/.bashrc
将光标调至文件末尾(快捷方式:shfit + g)
添加如下内容:export PATH=$PATH:FFmpeg安装路径/bin
保存文件(快捷键)::wq

运行命令提示:

ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open shared object file: No such file or directory

说明没有找到相关的动态库

将FFmpeg的动态链接库添加到系统库中即可

注:临时测试的时候,只需要在当前终端输入:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:FFmpeg 安装路径/lib

如果是要长期使用,建议修改系统配置文件

sudo vim /etc/profile
光标移动至文件末尾
添加如下内容:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:FFmpeg 安装路径/lib

做完上述两步之后,输入FFmpeg 验证是否成功,成功截图如下:

在这里插入图片描述
参考文章:
Ubuntu20.04 编译安装 FFmpeg 详细教程

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

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

相关文章

Java | Leetcode Java题解之第232题用栈实现队列

题目&#xff1a; 题解&#xff1a; class MyQueue {Deque<Integer> inStack;Deque<Integer> outStack;public MyQueue() {inStack new ArrayDeque<Integer>();outStack new ArrayDeque<Integer>();}public void push(int x) {inStack.push(x);}pub…

springboot1——快速构建项目

需求 第一步&#xff1a;创建maven工程(非web项目) 第二步&#xff1a;导入起步依赖 点击&#xff1a; 下拉复制&#xff1a; 粘贴&#xff1a;&#xff01;&#xff01;这是springboot工程需要继承的父工程 下拉复制&#xff1a; 粘贴&#xff1a;&#xff01;&#xf…

Python实现一对多WebSocket发送给指定多个客户端

在一对多的WebSocket场景下&#xff0c;如果你想要向特定的多个客户端发送消息&#xff0c;而不是广播给所有客户端&#xff0c;你需要维护一个能够标识每个客户端的方式&#xff0c;比如使用用户名或者客户端ID。这样&#xff0c;你就可以根据需要选择向哪些客户端发送消息。 …

Nodejs 第八十章(Kafka高级)

kafka前置知识在前几章章讲过了 不再复述 Kafka集群操作 1.创建多个kafka服务 拷贝一份kafka完整目录改名为kafka2 修改配置文件 kafka2/config/server.properties 这个文件 broker.id1 //唯一broker port9093 //切换端口 listenersPLAINTEXT://:9093 //切换监听源启动zooKe…

Rust编程-函数式编程

函数式编程&#xff1a; 函数式风格编程通常包括将函数当作参数、将函数作为其他函数的返回值或将函数赋给变量以备之后执行等。 闭包&#xff1a; 一个类似函数&#xff0c;并且可以存储在变量中的结构。闭包拥有很好的运行性能。 闭包可以存入变量或作为参数传递给其他函数的…

常见问题记录(持续更新)

备注&#xff1a; 在7月10日记录之前遇到的问题及解决方法: 一&#xff1a;常见的访问问题&#xff1a; 403 Forbidden&#xff1a;&#xff08;未有请求权限&#xff09; 表示服务器理解请求但是拒绝执行它。这通常是由于服务器上的文件或资源没有正确的读、写或执行权限&…

python接口自动化(二十四)--unittest断言——中(详解)

1.简介 上一篇通过简单的案例给小伙伴们介绍了一下unittest断言&#xff0c;这篇我们将通过结合和围绕实际的工作来进行unittest的断言。这里以获取城市天气预报的接口为例&#xff0c;设计了 2 个用例&#xff0c;一个是查询北京的天气&#xff0c;一个是查询 南京为例&#…

[MySQL][数据类型]详细讲解

目录 1.说明1.数据类型分类2.数值类型1.int类型2.bit类型3.浮点数类型1.float2.decimal 3.字符串类型1.char2.varchar3.char和varchar比较 4.日期和时间类型5.enum和set1.基本语法2.查询数据 1.说明 MySQL表中建立属性列&#xff0c;列名称 类型 num tinyint unsigned;与C/C语…

高级java每日一道面试题-2024年7月14日

面试官: 你对java反射了解多少 我回答 什么是java反射&#xff1a; Java反射机制是一种强大的运行时自省机制&#xff0c;允许程序在运行时检查和操作类、接口、构造器、方法和字段等类型信息。通过反射&#xff0c;Java程序可以在运行时动态地加载类、创建对象、调用方法、…

优化Cocos Creator 包体体积

优化Cocos Creator 包体体积 引言一、优化图片文件体积&#xff1a;二、优化声音文件体积&#xff1a;三、优化引擎代码体积&#xff1a;四、 优化字体字库文件大小&#xff1a; 引言 优化Cocos Creator项目的包体体积是一个常见且重要的任务&#xff0c;尤其是在移动设备和网…

【Flowable | 第二篇】使用Flowable实现请假流程

文章目录 3.使用Flowable实现请假流程3.1部署测试环境3.2工作流/我的任务菜单3.3设计请假流程3.4绑定业务表3.5申请请假3.6节点审批人审批3.6.1审批动作3.6.2流程状态 3.使用Flowable实现请假流程 3.1部署测试环境 我们使用开源的若依框架&#xff0c;来实现Flowable请假流程…

17102 “一条路径图”的最大独立集问题

这个问题可以通过动态规划来解决。我们可以定义一个数组f&#xff0c;其中f[i]表示从最左边的节点沿着一条路径到节点vi为止&#xff0c;具有的独立集最大权值之和。然后我们可以通过比较f[i-1]&#xff0c;f[i-2]w[i]和w[i]的值&#xff0c;来更新f[i]。 以下是解题步骤&…

应用数学与机器学习基础 - 多任务学习篇

序言 在人工智能的浩瀚星空中&#xff0c;深度学习作为一颗璀璨的明星&#xff0c;正引领着技术革命的新浪潮。随着数据量的爆炸性增长和计算能力的飞跃&#xff0c;深度学习模型在诸多领域展现出了前所未有的性能与潜力。而多任务学习&#xff08;Multi-Task Learning, MTL&a…

量化交易的高效实施方法

量化交易因其高效性和科学性&#xff0c;在现代金融市场中受到越来越多的关注。高效实施量化交易策略不仅需要先进的技术支持&#xff0c;还需要精确的策略设计和严格的风险管理措施。以下是一些实现高效量化交易的关键方法。 首先&#xff0c;策略开发是量化交易的核心。成功…

Memcached负载均衡:揭秘高效缓存分发策略

标题&#xff1a;Memcached负载均衡&#xff1a;揭秘高效缓存分发策略 在分布式缓存系统中&#xff0c;Memcached通过负载均衡技术来提高缓存效率和系统吞吐量。负载均衡确保了缓存请求能够均匀地分配到多个缓存节点上&#xff0c;从而防止任何一个节点过载。本文将深入探讨Me…

从 Pandas 到 Polars 十五:对于特征工程,Polars的透视表(pivot)功能表现非常强大

最近在我的机器学习流程中&#xff0c;我发现自己会用自己编写的Polars表达式来替换一些更简单的scikit-learn指标&#xff0c;如均方根误差。这种方法省去了将数据复制到不同格式的麻烦&#xff0c;并确保我能够保持Polars的正常优势&#xff0c;如并行化、优化和扩展到大型数…

科技云报道:产业为根大模型应用为擎,容联云推动企业营销服场景重塑

科技云报道原创。 “没有应用&#xff0c;光有一个基础模型&#xff0c;不管是开源还是闭源&#xff0c;一文不值。”在2024世界人工智能大会&#xff08;WAIC 2024&#xff09;现场&#xff0c;百度创始人、董事长兼首席执行官李彦宏直言。 国产大模型的种类越发丰富&#x…

纯净IP的重要性解析与测评分析

作为连接互联网世界的桥梁&#xff0c;IP地址的纯净度不仅关乎网络访问的速度与稳定性&#xff0c;更是影响着数据安全与隐私保护。今天&#xff0c;我们将带您深入探索纯净IP的重要性&#xff0c;并分享我们对芝麻HTTP与巨量IP这两家提供纯净SOCKS5代理服务的深度测评分析。 一…

AI算法15-弹性网络回归算法Elastic Net Regression | ENR

弹性网络回归算法简介 在机器学习领域中&#xff0c;弹性网络&#xff08;Elastic Net&#xff09;是一种结合了L1范数&#xff08;套索回归&#xff09;和L2范数&#xff08;岭回归&#xff09;的正则化方法。它综合了两者的优点&#xff0c;既可以实现特征选择&#xff0c;又…

ubuntu18修改文件打开数

Ubuntu18永久修改 最大文件打开数和最大线程数 1、查看操作系统&#xff1a; cat /etc/os-release2、查看当前用户设置&#xff1a; ulimit -a 或者&#xff1a; ulimit -nopen files 是当前最大文件打开数量 max user processes是当前最大线程数量 3、永久修改配置&#x…