Linux|centos7下的编译|ffmpeg的二进制安装

news2024/10/6 8:34:59

Windows版本的ffmpeg:

###注意,高版本可能必须要windows10以及以上才支持,win7估计是用不了的

下载地址:Builds - CODEX FFMPEG @ gyan.dev

 或者这个下载地址:https://github.com/BtbN/FFmpeg-Builds/releases

这两个网址下载的ffmpeg使用上基本没有区别,例如查看该ffmpeg所安装的依赖库,基本都是很全的这种

 Linux版本的ffmpeg:

下载地址1:John Van Sickle - FFmpeg Static Builds

这个版本的二进制不需要任何设置,真正的开箱即用,直接丢到系统环境变量里就可以使用了,但需要注意,这个版本的是不包括ffplay 这个播放器的哦,需要自己编译

安装ffplay:

下载ffmpeg的源码,我下载的是FFmpeg-n6.1.1.zip,解压后,进入解压目录:

这样的编译是最简单的编译,先把epel源和阿里云centos7源添加好,然后编译就行了,编译出来的ffplay在/usr/local/bin目录下

   45  wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
   46  wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
   47  yum install nasm libX11-devel libXext-devel  SDL2 SDL2-devel SDL SDL-devel  -y
   48  ls
   49  tar xf FFmpeg-n6.1.1.zip 
   50  yum install unzip -y
   51  unzip FFmpeg-n6.1.1.zip 
   52  cd FFmpeg-n6.1.1
   53  ls
   54  ./configure --enable-gpl --enable-ffplay
   55  make && make install

 

下载地址2:Releases · BtbN/FFmpeg-Builds · GitHub 

这个版本的二进制需要安装依赖,好像是动态编译出来的,包含有ffmpeg的所有,也就是ffmpeg,ffplay,ffprobe

下面讲一讲如何使用这个版本的ffmpeg




1,

上述的gpl版本ffmpeg下载完毕后,进入解压目录:

[root@centos10 ffmpeg-master-latest-linux64-gpl]# ls -alh ~/ffmpeg-master-latest-linux64-gpl.tar.xz 
-rw-r--r-- 1 root root 100M Feb 11 03:16 /root/ffmpeg-master-latest-linux64-gpl.tar.xz
[root@centos10 ffmpeg-master-latest-linux64-gpl]# pwd
/root/ffmpeg-master-latest-linux64-gpl

 查看bin目录下的文件,利用ldd命令查询是否缺少运行所需的动态链接库:

[root@centos10 ffmpeg-master-latest-linux64-gpl]# pwd
/root/ffmpeg-master-latest-linux64-gpl
[root@centos10 ffmpeg-master-latest-linux64-gpl]# ldd bin/ffprobe 
bin/ffprobe: /lib64/libm.so.6: version `GLIBC_2.23' not found (required by bin/ffprobe)
bin/ffprobe: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by bin/ffprobe)
	linux-vdso.so.1 =>  (0x00007ffcc877e000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f06c32ce000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f06c30ca000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f06c2ec2000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f06c2ca6000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f06c28d8000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f06cc69c000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f06c26c2000)
	libmvec.so.1 => not found

从上述查询可以看到,缺少glibc也就是gcc的lib库和libmvec,并且对glibc版本有要求,必须大于2.23

如果glibc编译成功,会在/usr/lib64目录下找到最新的libc.so(还有libc.so.6和libc-2.23.so)和libmvec.so(还有libmvec.so.1和libmvec-2.23.so)等库文件

2,

要求glibc版本不低于2.22,但是不宜安装过高版本的glibc,因为较高版本的glibc依赖于python,去整python环境又得费一番功夫,所以弄个比2.22稍高一点的2.23版就够了

glibc下载地址:http://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz

下载完毕后,将该文件上传到服务器并解压,解压后进入解压目录,执行以下命令开始编译,但编译前最好使用高版本的gcc,例如gcc9

[root@centos10 glibc-2.23]# mkdir build
[root@centos10 glibc-2.23]# cd build/
[root@centos10 build]# pwd
/root/glibc-2.23/build




../configure --prefix=/usr --disable-werror
make 
make install

中间有两个报错,第一个是这个报错:

 Error: `loc1@GLIBC_2.2.5' can't be versioned to common symbol 'loc1'
 Error: `loc2@GLIBC_2.2.5' can't be versioned to common symbol 'loc2'
 Error: `locs@GLIBC_2.2.5' can't be versioned to common symbol 'locs'

解决方案为:

vim  ../misc/regexp.c


char *loc1 __attribute__ ((nocommon));
char *loc2 __attribute__ ((nocommon));
compat_symbol (libc, loc1, loc1, GLIBC_2_0);
compat_symbol (libc, loc2, loc2, GLIBC_2_0);

/* Although we do not support the use we define this variable as well.  */
char *locs __attribute__ ((nocommon));


loc1,loc2,locs 后面添加__attribute__ ((nocommon))

 第二个是make install的时候报错:

error while loading shared libraries: /lib64/libm.so.6: invalid ELF header

解决方案为:

LD_SO=ld-linux-x86-64.so.2 CC="gcc" /usr/bin/perl scripts/test-installation.pl /root/glibc-2.23/build/
Your new glibc installation seems to be ok.
make[1]: Leaving directory `/root/glibc-2.23'
[root@centos10 build]# echo $?
0
cd /lib64
rm -rf libm.so.6
ln -sf libm-2.23.so libm.so.6

最终编译成功,成功的日志末尾如下:

LD_SO=ld-linux-x86-64.so.2 CC="gcc" /usr/bin/perl scripts/test-installation.pl /root/glibc-2.23/build/
Your new glibc installation seems to be ok.
make[1]: Leaving directory `/root/glibc-2.23'
[root@centos10 build]# echo $?
0

 

🆗,编译完成后,就可以检查ffmpeg是否可以用了:

[root@centos10 build]# /root/ffmpeg-master-latest-linux64-gpl/bin/ffmpeg -version
ffmpeg version N-113585-g8c2e86ca28-20240209 Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 13.2.0 (crosstool-NG 1.25.0.232_c175b21)
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-ffbuild-linux-gnu- --arch=x86_64 --target-os=linux --enable-gpl --enable-version3 --disable-debug --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-openssl --enable-lzma --enable-fontconfig --enable-libharfbuzz --enable-libvorbis --enable-opencl --enable-libpulse --enable-libvmaf --enable-libxcb --enable-xlib --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libaribcaption --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libvpl --enable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --disable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libdrm --enable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags=-pie --extra-libs='-ldl -lgomp' --extra-version=20240209
libavutil      58. 36.101 / 58. 36.101
libavcodec     60. 39.100 / 60. 39.100
libavformat    60. 20.100 / 60. 20.100
libavdevice    60.  4.100 / 60.  4.100
libavfilter     9. 17.100 /  9. 17.100
libswscale      7.  6.100 /  7.  6.100
libswresample   4. 13.100 /  4. 13.100
libpostproc    57.  4.100 / 57.  4.100

这些还没完,还需要Linux的桌面环境和SDK SDK2 这些才可以正常的播放音视频文件

yum install nasm libX11-devel libXext-devel  SDL2 SDL2-devel SDL SDL-devel  -y

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

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

相关文章

如何升级至ChatGPT Plus:快速指南,ChatGPT的秘密武器GPT4.0是什么?

提到 ChatGPT。想必大家都有所耳闻。自从 2022 年上线以来,就受到国内外狂热的追捧和青睐,上线2个月,月活突破1个亿!!! 而且还在持续上涨中。因为有很多人都在使用 ChatGPT 。无论是各大头条、抖音等 App、…

嵌入式Qt 第一个Qt项目

一.创建Qt项目 打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项 弹出New Project对话框,选择Qt Widgets Application 选择【Choose】按钮,弹出如下对话框 设置项目名称和路径,按照向导进行下一步 选…

vue3 腾讯tdesign 后台管理框架的使用

1.介绍 TDesign 是具有包容性的设计体系,它强调为业务提供产品、服务等过程中,追求以人为本、人人受益的包容性,要求搭建过程中,了解业务底层,理解业务场景的多样性,并在繁杂的业务场景中寻找共性和特性&a…

论文阅读:GamutMLP A Lightweight MLP for Color Loss Recovery

这篇文章是关于色彩恢复的一项工作,发表在 CVPR2023,其中之一的作者是 Michael S. Brown,这个老师是加拿大 York 大学的,也是 ISP 领域的大牛,现在好像也在三星研究院担任兼职,这个老师做了很多这种类似的工…

unity2017 遇到visual studio 2017(社区版) 30日试用期到了

安装unity2017 遇到visual studio 2017 30日试用期到了,网上百度搜了好多方法都没有成功。 最后用了这个方法: 1)启动vs2017,在弹出要登录的窗口之前,迅速的点击工具-》选项-》账户,勾选在添加账户或对账户重新进行身…

Netty应用(九) 之 编解码器概念 Netty常见的编解码器

目录 22.编解码器 22.1 编解码的概念 22.2 netty中的编解码 22.3 序列化 23.编解码器在使用过程中的两部分核心内容 23.1 序列化协议(编码格式)(传输数据的格式) 23.1.1 Java默认的序列化与反序列化 23.1.2 XML的序列化与反…

LeetCode 0987.二叉树的垂序遍历:遍历时存节点信息,遍历完自定义排序

【LetMeFly】987.二叉树的垂序遍历:遍历时存节点信息,遍历完自定义排序 力扣题目链接:https://leetcode.cn/problems/vertical-order-traversal-of-a-binary-tree/ 给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历…

Java语法学习反射

Java语法学习反射 大纲 基本介绍class的介绍 具体案例 1. 基本介绍 流程图(程序在计算机的阶段) 反射的主要的类 这个提高效率不大 2. class的介绍 对于第三点:首先类只会加载一次,得到的class的对象,也只有一…

Python爬虫之Ajax数据爬取基本原理

前言 有时候我们在用 requests 抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,但是使用 requests 得到的结果并没有。这是因为 requests 获取的都是原始的 HTML 文档,而浏览器中…

【Spring原理进阶】SpringMVC调用链+JSP模板应用讲解

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《Spring 狂野之旅:底层原理高级进阶》 &#x1f680…

Apache 神禹(shenyu)源码阅读(一)——Admin向Gateway的数据同步(Admin端)

源码版本:2.6.1 单机源码启动项目 启动教程:社区新人开发者启动及开发防踩坑指南 源码阅读 前言 开了个新坑,也是第一次阅读大型项目源码,写文章记录。 在写文章前,已经跑了 Divide 插件体验了一下(体…

Java的常见api以及异常情况-2

目录 1、equals方法源码解读 2、replace替换方法 3、split分割方法 4、indexOf方法 5、常见的api 1、equals方法源码解读 public class API_test04 {public static void main(String[] args) {String str1 "rx";String str2 "rx";System.out.prin…

模态、模式和真实发生

模态和模式均是用来描述某一对象或系统可能出现的特性、状态或行为,它们既包括逻辑上的抽象可能性,也涵盖现实中具体的现象和事件结构。模态更多地关联于逻辑可能性和必然性,而模式则侧重于现象的重复性和规律性,两者都可以反映真…

【Java程序设计】【C00269】基于Springboot的漫画网站(有论文)

基于Springboot的漫画网站(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的漫画网站 本系统分为系统功能模块、管理员功能模块、以及用户功能模块。 系统功能模块:在系统首页可以查看首页、漫画投稿、…

websocket具体实践

websocket具体实践 参考: 如何使用websocket WebSocket客户端连接不上和掉线的问题以及解决方案 继6月份对websocket一顿了解之后,我们的项目也要上websocket了,虽然这部分不是我做,但是借此机会,我也想要尝试一下&am…

[C/C++] -- CMake使用

CMake(Cross-platform Make)是一个开源的跨平台构建工具,用于自动生成用于不同操作系统和编译器的构建脚本。它可以简化项目的构建过程,使得开发人员能够更方便地管理代码、依赖项和构建设置。 CMake 使用一个名为 CMakeLists.tx…

【Java程序设计】【C00266】基于Springboot的超市进存销管理系统(有论文)

【Java程序设计】【C00266】基于Springboot的超市进存销管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的超市进销存系统 本系统分为登录注册模块、管理员功能模块以及员工功能模块。 登录注册模块&#…

Solidworks:平面工程图练习

把草图变成工程图,遇到第一个问题是线宽需要用鼠标选中后再设置线宽和颜色。我觉得应该有一个自动设置现款的功能,不知道有没有,我找了半天也没找到。 另一个问题是,作业代号字体上下颠倒了,不知道这是啥意思。 第三个…

鸿蒙开发理论之页面和自定义组件生命周期

1、自定义组件和页面的关系 页面:即应用的UI页面。可以由一个或者多个自定义组件组成,Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个Entry。只有被Entry装饰的组件才可以调用页面的生命周期。自…

从零开始学howtoheap:理解fastbins的​unsorted bin攻击

how2heap是由shellphish团队制作的堆利用教程,介绍了多种堆利用技术,后续系列实验我们就通过这个教程来学习。环境可参见从零开始配置pwn环境:从零开始配置pwn环境:从零开始配置pwn环境:优化pwn虚拟机配置支持libc等指…