linux非root用户从源码编译安装ffmpeg及添加h264(AVC)和265(HEVC)支持

2023-11-01

前言

当linux用户没有root权限时,可通过源码编译安装ffmpeg等工具,通过手动设置安装路径实现安装到用户指定目录下。然而ffmpeg的linux源码是不包含x264和x265编码器的,一旦处理到h264或h265的视频的时候就会报错,因此需要手动下载安装相应的库。本文记录了我的安装过程以及踩过的坑。

安装步骤

yasm

1.下载链接
2. 解压 tar -xzvf yasm-1.3.0.tar.gz
3. 安装

cd yasm-1.3.0
./configure --prefix=yasm安装路径
makemake -j8
make install
vi ~/.bashrc
末行添加 export PATH=yasm安装路径/bin:$PATH
source ~/.bashrc

nasm

该步骤可选,如果装 x264提示Found no assembler Minimum version is yasm-1.2.0. If you really want to compile without asm, configure with --disable-asm了,就回来装nasm吧,我看了x264的configure文件才发现里面没有enable-yasm这个参数。

  1. 下载链接
  2. 解压,tar -jxvf nasm-2.15.tar.bz2
  3. 安装
cd nasm-2.15.tar.bz2
./configure --prefix=nasm安装路径
make install
vi ~/.bashrc
末行添加 export PATH=nasm安装路径/bin:$PATH
source ~/.bashrc

x264

  1. 下载libx264(下载链接)
  2. 解压 tar -jxvf x264-master.tar.bz2
  3. 安装
cd  x264-master
./configure --prefix=x264安装路径  --enable-shared --enable-static --enable-yasm
makemake -j8
make install

x265

  1. 下载libx265(下载链接)。如果网址挂了可能是仓库改名字了,进https://bitbucket.org/multicoreware搜x265找到对应仓库,进入仓库后在左侧菜单找到download下载最新的x265压缩包
  2. 解压 x265_3.5.tar.gz
  3. 安装
cd x265_3.5/build/linux
#注意这里会进入交互模式,按照界面下方的文字指导操作,注意修改安装路径,修改后按c键进行设置,再按g键生成。
./make-Makefiles.bash
makemake -j8
make install

vi ~/.bashrc
末行添加 export PKG_CONFIG_PATH=x265安装路径/lib/pkgconfig 和 export LD_LIBRARY_PATH=x265安装路径/lib:$LD_LIBRARY_PATH
source ~/.bashrc 

注意:这里如果没加环境变量export PKG_CONFIG_PATH=x265安装路径/lib/pkgconfig会报错ERROR: x265 not found using pkg-config,没加export LD_LIBRARY_PATH=x265安装路径/lib:$LD_LIBRARY_PATH会报错libx265.so.199: cannot open shared object file: No such file or directory

ffmpeg

  1. 下载ffmpeg,下载链接
  2. 解压 tar -jxvf ffmpeg-snapshot.tar.bz2
  3. 安装,ffmpeg的make相当慢…
cd ffmpeg-snapshot
./configure --prefix=ffmpeg安装路径 --enable-shared --enable-nonfree --enable-libfreetype --enable-yasm --enable-libx264 --enable-libx265 --enable-gpl --enable-pthreads --extra-cflags=-I/x264安装路径/include --extra-ldflags=-L/x264安装路径/lib --extra-cflags=-I/x265安装路径/include --extra-ldflags=-L/x265安装路径/lib
makemake -j8
make install
vi ~/.bashrc
末行添加 export PATH=ffmpeg安装路径/bin:$PATHexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:ffmpeg安装路径/lib
source ~/.bashrc

然后打印一下 ffmpeg --version,有版本信息就是成功了,基本大功告成。

遇到的问题及解决办法

  1. 运行ffmpeg处理视频时,如果遇到 Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height,有可能是输出包含音频流和视频流,但是没有对音频流进行编码,解决方法:在ffmpeg命令里加入-acodec copy。eg:ffmpeg -i input.mkv -vf scale=720:-1 -acodec copy -threads 12 output.mkv
  2. 错误:libx265.so.199: cannot open shared object file: No such file or directory,解决办法:环境变量加入export LD_LIBRARY_PATH=x265安装路径/lib:$LD_LIBRARY_PATH
  3. 错误:ERROR: x265 not found using pkg-config,解决办法:加环境变量export PKG_CONFIG_PATH=x265安装路径/lib/pkgconfig
  4. 错误:can not be used when making a shared object; recompile with -fPIC,解决办法:make clean,然后重新make。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux非root用户从源码编译安装ffmpeg及添加h264(AVC)和265(HEVC)支持 的相关文章

  • 无关的库链接

    我有一个可能有点愚蠢的问题 因为我很确定我可能已经知道答案了 假设你有静态库A 动态共享库B和你的linux下的程序C 假设库 A 调用库 B 中的函数 并且您的程序调用库 A 中的函数 现在假设 C 在 A 中调用的所有函数都不使用 B
  • 是否从页面缓存中的脏页面进行文件读取?

    当字节写入文件时 内核不会立即将这些字节写入磁盘 而是将这些字节存储在页缓存中的脏页中 回写缓存 问题是 如果在脏页刷新到磁盘之前发出文件读取 则将从缓存中的脏页提供字节 还是首先将脏页刷新到磁盘 然后进行磁盘读取以提供字节 将它们存储在进
  • 如何确保 numpy BLAS 库可用作动态加载库?

    The theano安装文档 http www deeplearning net software theano install html troubleshooting make sure you have a blas library指
  • 确保 config.h 包含一次

    我有一个库项目 正在使用 Linux 中的 autotools 套件移植到该项目 我对自动工具很陌生 本周 我已经了解了其操作的基础知识 我有一个关于如何保留内容的问题config h免遭重新定义 我惊讶地发现生成的config h文件也没
  • 操作系统什么时候清除进程的内存

    进程在某些操作系统上成功或异常终止 操作系统何时决定擦除分配给该进程的内存 数据 代码等 在退出时或当它想为新进程分配内存时 这个清除内存分配过程在所有操作系统 winXP Win7 linux Mac 上都相同吗 据我了解 页表具有该进程
  • 伊迪德信息

    重新定义问题 有什么方法可以获取所连接显示器的序列号吗 我想收集显示器的Eid信息 当我使用 logverbose 选项运行 X 时 我可以从 xorg 0 log 文件中获取它 但问题是 如果我切换显示器 拔出当前显示器 然后插入另一个显
  • Linux 中热插拔设备时检测设备是否存在

    我正在运行 SPIcode http lxr free electrons com source drivers spi spi omap2 mcspi c在熊猫板上 我想知道其中的哪个功能code http lxr free electr
  • Bash 方法的返回值总是模 256

    我有一个 bash 脚本方法 它返回输入值 然而 返回值始终是模 256 的值 我用 google 搜索了一段时间 发现this http www tldp org LDP abs html exitcodes html文章说它总是以 25
  • 从 TypeScript 运行任何 Linux 终端命令?

    有没有办法直接从 TypeScript 类中执行 Linux 终端命令 这个想法是做类似的事情 let myTerminal new LinuxTerminal let terminalResult myTerminal run sudo
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • Docker:处理 tar 文件时出错(退出状态 1):设置枢轴目录时出错:不是目录

    我是 Docker 新手 不知道是什么原因导致此错误或如何诊断它 任何有关此问题的具体帮助或有关首先检查何处以诊断此类问题的提示将不胜感激 我的 Dockerfile FROM java 8 Install maven RUN apt ge
  • Linux 桌面快捷方式和安装图标

    我需要添加什么到我的 spec文件来创建桌面快捷方式并在安装过程中为快捷方式分配一个图标 rpm 如果需要脚本 一个示例将非常有帮助 您在 Linux 下使用 desktop 文件作为图标 图标放置的位置取决于您使用的发行版和桌面环境 由于
  • Linux shell 脚本中的 while 循环超时

    这工作正常 无限循环 while TRUE do printf done 我在尝试着timeout this while loop与timeout命令 所有这些都不起作用 timeout 5 while TRUE do printf don
  • 让 MongoDB 在 Linux 上监听远程连接

    我已在 Windows 本地计算机上 上成功安装 MongoDB 作为服务 但现在我想将 MongoDb 移动到单独的服务器 所以我将 tarball 解压到网络上的虚拟服务器 运行 Linux 当我从本地计算机使用 PuTTY 连接到服务
  • 归档文件系统或格式

    我正在寻找一种文件类型来存储已退役系统的档案 目前 我们主要使用 tar gz 但从 200GB tar gz 存档中查找并提取几个文件是很麻烦的 因为 tar gz 不支持任何类型的随机访问读取规定 在你明白之前 使用 FUSE 安装 t
  • 在 /dev/input/eventX 中写入事件需要哪些命令?

    我正在开发一个android需要将触摸事件发送到 dev input eventX 的应用程序 我知道C执行此类操作的代码结构如下 struct input event struct timeval time unsigned short
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte

随机推荐

  • MODBUS-RTU通讯协议简介

    MODBUS RTU通讯协议简介 什么是MODBUS MODBUS 是MODICON公司最先倡导的一种软的通讯规约 经过大多数公司 的实际应用 逐渐被认可 成为一种标准的通讯规约 只要按照这种规约进行 数据通讯或传输 不同的系统就可以通讯
  • plsql中函数调用java

    一 plsql中函数调用java 1 在plsql中先写一个函数 create or replace function test create id return number is language java name Generator
  • 机器学习之集成学习算法

    一 集成学习算法简介 1 1 什么是集成学习 集成学习通过建立几个模型来解决单一预测问题 它的工作原理是生成多个分类器 模型 各自独立地学习和作出预测 这些预测最后结合成组合预测 因此优于任何一个单分类的做出预测 1 2 复习 机器学习的两
  • JQUERY点击滚动到锚点

    document ready function a topLink click function html body animate scrollTop this attr href offset top px duration 500 e
  • jwt安全问题

    文章目录 jwt安全问题 jwt简介 jwt组成 header payload signature 潜在漏洞 空加密算法 web346 密钥爆破 web348 敏感信息泄露 web349 修改算法RS256为HS256 web350 jwt
  • Java String的split方法总结

    String的split 方法用于按传入的字符或字符串对String进行拆分 返回拆分之后的数组 1 一般用法 用一般的字符 例如 或 等符号做分隔符时 String address 上海 上海市 闵行区 吴中路 String splitA
  • 为分布式做准备吧——从Ajax到WebSocket

    文章目录 解决方案1 频繁轮询 解决方案2 长轮询 解决方案3 分块编码 解决方案4 Applet和Adobe Flash WebSocket 当需要前端频繁的请求后端数据的时候 比如说数据的实时显示 这种情况下产生问题的核心原因是 服务器
  • 前端性能测试工具Lighthouse

    在前端开发中 对于自己开发的app或者web page性能的好坏 一直是让前端开发很在意的话题 我们需要专业的网站测试工具 让我们知道自己的网页还有哪些需要更为优化的方面 现在推荐一款工具 Lighthouse 可以分析web应用程序和we
  • 三位数除以两位数竖式计算没有余数_四年级上册数学第六单元知识梳理,附一两位数除多位数计算...

    四年级上册第六单元知识梳理 复习 一位数除多位数 1 相同数位对齐 从最高位除起 除到哪一位就把商写在那一位的上面 如果被除数最高位比除数小就要看被除数的前两位 除到哪一位就把商写在那一位的上面 每次除得的余数必须比除数小 2 0除以任何不
  • OLED显示小数

    OLED显示小数并不是很难的 在通用的OLED库中是没有显示小数的 需要自己去写 写的方法大致是这样的 写出0到9的ACSLL值 只需要将小数点后面的位数 一位一位的写数字对应的ACSLL值即可 其中小数点 也是写同样对应的ACSLL值 只
  • 基于Matlab的拉普拉斯滤波图像增强

    基于Matlab的拉普拉斯滤波图像增强 图像增强是数字图像处理中一项非常重要的任务 旨在提高图像的观感或可用性 而拉普拉斯滤波是图像增强中的一种方法 通过对图像进行滤波以减少噪声和增加图像的对比度和清晰度 本文将介绍如何使用Matlab实现
  • 玩转Openwrt(一) — 刷入带ADSL驱动的全功能版本

    之前家里用的一直USR9108加上自己编译修改的内核及软件配合自己整的VIA小板子动物机 可是编译移植那真是叫一个痛苦 各种补丁各种依赖关系 实在头大 费时费力 而且还有那个悲催的USB1 1 那速度真叫认抓狂 我的移动硬盘插上基本就是个摆
  • 如何对jar包进行安全扫呢,用dependency-check工具吧

    工具下载地址 https github com jeremylong DependencyCheck 点击Releases 下载 https owasp org www project dependency check 点击Command
  • 【Ansible故障解决】使用Ansible连接被控端SSH拒绝解决办法

    Ansible故障解决 使用Ansible连接被控端SSH拒绝解决办法 一 Ansible连通性检查 二 手动SSH登录 三 检查被控端sshd conf 四 检查被控端ssh服务启用 五 检查相关文件目录权限 六 检查被控端公私钥是否正常
  • 用tensorflow实现简单的全连接层网络

    参考网上给的例程使用tensorflow实现了一个简单的全连接层网络的搭建 训练一个神经网络匹配二元函数 步骤主要如下 导入相应的包 定义添加层 准备训练数据 构建神经网络层 定义损失函数和训练优化使损失函数最小化 初始化变量 激活结构 迭
  • 2021-06-15

    安装SLAM中的一个小环节 我出现的错误 即安装Pangolin步骤 安装Pangolin 建议源码安装 安装依赖项 sudo apt get install libglew dev sudo apt get install libboos
  • 软件需求测试管理体系,软件测试管理系统的设计与实现

    毛知钢 王浩宇 刘鸿飞 摘要 为适应实验室管理的信息化需求 该文设计与实现了软件测试流程管控信息化平台 并给出了平台实际使用时的范例 结果表明 软件测试流程管控信息化平台很好地实现了软件测试工作流程化 规范化 精细化管理 为企业产品软件的高
  • 1. 嵌套路由

    当某个显示在
  • 【c语言pat】

    1 实验7 1 11 求整数序列中出现次数最多的数 15 分 本题要求统计一个整型序列中出现次数最多的整数及其出现次数 输入格式 输入在一行中给出序列中整数个数N 0
  • linux非root用户从源码编译安装ffmpeg及添加h264(AVC)和265(HEVC)支持

    目录 前言 安装步骤 yasm nasm x264 x265 ffmpeg 遇到的问题及解决办法 前言 当linux用户没有root权限时 可通过源码编译安装ffmpeg等工具 通过手动设置安装路径实现安装到用户指定目录下 然而ffmpeg