Linux下编译支持h264、h265编码的FFmpeg

news/2024/11/9 2:53:40/

首先下载x264源码:https://code.videolan.org/videolan/x264/

解压,进入源码目录,然后执行命令:

./configure --prefix=/root/NfsShareDir/trunk/avs/third_party/x264-master/install --enable-static --enable-shared --disable-asm
make
make install

执行完后,即会在/root/NfsShareDir/trunk/avs/third_party/x264-master/install 目录下生成x264的头文件,库文件。

下载x265源码:https://bitbucket.org/multicoreware/x265_git/src/master/

解压,进入源码目录的source目录下,然后执行命令:

cmake -DCMAKE_INSTALL_PREFIX=./install ./
make
make install

执行完后,即会在source目录的install 目录下生成x265的头文件,库文件。

下载FFmpeg源码:https://github.com/FFmpeg/FFmpeg/tags

查看pkgconfig路径:

which pkgconfig
whereis pkgconfig

设置环境变量(这里以pkgconfig路径在/usr/lib64/pkgconfig 为例,以实际为准):

export PKG_CONFIG_PATH="/usr/lib64/pkgconfig"

分别拷贝x264和x265的.pc文件到pkgconfig目录下

cp x264.pc /usr/lib64/pkgconfig
cp x265.pc /usr/lib64/pkgconfig

这些步骤是为了防止等下configure ffmpeg 的时候报错:ERROR: x265 not found using pkg-config

进入FFmpeg源码目录,执行:

./configure --enable-shared --prefix=/root/NfsShareDir/trunk/avs/third_party/FFmpeg-n5.0.3/install --enable-ffmpeg --enable-debug --disable-optimizations --disable-asm --disable-stripping --enable-libx264 --enable-libx265 --enable-gpl --enable-pthreads --extra-cflags="-I/root/NfsShareDir/trunk/avs/sdk/x264/inc -I/root/NfsShareDir/trunk/avs/sdk/x265/inc" --extra-ldflags="-L/root/NfsShareDir/trunk/avs/sdk/x264/lib -L/root/NfsShareDir/trunk/avs/sdk/x265/lib"

其中,--enable-debug --disable-optimizations --disable-asm --disable-stripping 是为了编译出带有调试信息,可以用gdb调试的ffmpeg。

--extra-cflags 指定 x264和x265的头文件路径。

--extra-ldflags 指定 x264和x265的库文件路径。

make
make install

执行完成后,即会在/root/NfsShareDir/trunk/avs/third_party/FFmpeg-n5.0.3/install 目录下生成ffmpeg的头文件,库文件。

然后我们可以通过命令去验证ffmpeg是否支持x264的编码了:

./ffmpeg -i rtsp://admin:admin@192.168.18.14 -vcodec libx264 -acodec aac -f flv rtmp://172.16.17.154:1935/live/test

参考:

《ffmpeg怎么利用gdb调试以及gdb调试快捷键》

《ffmpeg支持libx264和libx265的安装方法》

《X265编译》


http://www.ppmy.cn/news/87484.html

相关文章

北邮22信通:实验五 共射放大电路的频率特性与深负反馈的影响

北邮22信通一枚~ 很高兴以一个新身份与大家见面~ 关注作者,解锁更多邮苑模电实验报告~ 获取更多文章,请访问专栏: 北邮22信通——电子电路_青山如墨雨如画的博客-CSDN博客 目录 实验目的: 实验设备及器件: …

贪心算法解决活动选择问题

当涉及到贪心算法时,以下是一个常见的例子:活动选择问题(Activity Selection Problem)。 问题: 假设有一个会议室,你收到了一系列活动的申请,每个活动都有一个开始时间和结束时间。你的目标是选…

机器学习与深度学习——通过奇异值分解算法压缩图片

机器学习与深度学习——通过奇异值分解算法压缩图片 什么是奇异值分解? 奇异值分解(Singular Value Decomposition,SVD)是一种重要的线性代数方法,用于将一个矩阵分解成三个部分的乘积形式。它的应用非常广泛&#x…

Linux之创建进程、查看进程、进程的状态以及进程的优先级

文章目录 前言一、初识fork1.演示2.介绍3.将子进程与父进程执行的任务分离4.多进程并行 二、进程的状态1.进程的状态都有哪些?2.查看进程的状态2.运行(R)3.阻塞4.僵尸进程(Z)1.僵尸状态概念2.为什么要有僵尸状态&#…

C#开发的OpenRA游戏之基地工程车移动3

C#开发的OpenRA游戏之基地工程车移动3 从前面可以知道,基地工程车移动的过程是鼠标点击,然后查找对象的命令,接着把命令发送给服务器,服务器再收到命令,最后把命令放到当前活动执行队列。 在上一文里,已经分析到放到当前活动执行队列: self.QueueActivity(order.Queu…

【iOS锁_@synchronized源码浅析】

文章目录 前言synchronized介绍加锁实例synchronized实现objc_sync_enter 和 objc_sync_exit objc_sync_enterobj存在SyncList的结构SyncList和SyncData的关系id2data函数的实现1. 使用快速缓存2. 获取该线程下的SyncCache3. 全局哈希表查找4. 生成新数据并写入缓存 总结 前言 …

JDK8-17的特性发生了哪些变化

JDK8-17的特性发生了哪些变化 垃圾回收器Java交互式编程接口定义扩展String底层结构变更of 创建不可变序列HTTP 2 协议接口引入 var 关键字字符串增强lambda 表达式类型推导switch 增强支持文本块定义instanceof 模式匹配引入record 关键字新增密封类的定义switch二度加强模块…

LabVIEWCompactRIO 开发指南37 在第三方模拟器中执行

LabVIEWCompactRIO 开发指南37 在第三方模拟器中执行 如果需要验证时序和功能,在将LabVIEW FPGA VI编译到硬件之前,可以与三款第三方仿真器进行交互:MentorGraphicsModelSim(LabVIEW2013及更早版本)、MentorGraphics…