第二章 编译FFmpeg并开启H.264编码
这里我默认大家已经看过 第一章 FFmpeg初体验:在Centos7.9下编译FFmpeg!【如果没有那还不赶紧去看!】
前言
FFmpeg本身并不支持H.264编码器,而是采用集成第三方模块的方式来支持。要想在FFmpeg中开启H.264编码,可以采用x264和OpenH264这两个编码器。二者各有千秋,不过目前主流的H.264编码器还是x264。
安装环境:
| 操作系统 | OpenEuler 22.03 LTS SP4 |
|---|---|
| 硬件内存 | 8G内存 |
| 硬盘大小 | 128G硬盘 |
1. 下载x264
git clone http://git.videolan.org/git/x264.git
2. 编译x264
cd x264
./configure --enable-static --prefix=/usr/local/x264
--enable-static:这个选项告诉配置脚本,在编译x264库时,应该生成静态库。静态库是包含在最终可执行文件中的,这意味着当你的程序运行时,不需要单独的库文件。--prefix=/usr/local/x264是指定x264库安装后的根目录。这意味着所有的文件(包括库文件、头文件、文档等)都会被安装到/usr/local/x264目录下。这样做的好处是,可以将软件安装到非标准位置,从而避免与系统自带软件发生冲突或者在不影响系统其他部分的情况下轻松地卸载软件。
3. 编译FFmpeg
./configure --enable-libx264 --enable-gpl
--enable-libx264:这个选项告诉配置脚本,在编译过程中包含对x264编码库的支持。--enable-gpl:这个选项表明你接受GNU通用公共许可证(GPL)。x264是按照GPL许可证发布的,启用这个选项是为了确保你的项目与x264库的许可证兼容。
make -j$(nproc) && make install
-j:这是make命令的一个选项,用于指定并发执行的任务数。-j后面通常跟着一个数字,表示同时运行的作业数。$(nproc):这是一个 shell 命令替换,它会展开为当前系统上的处理器核心数。例如,如果系统有4个核心,那么-j$(nproc)将展开为-j4,告诉make同时运行4个编译任务。这样做可以显著加快编译速度,因为它充分利用了多核处理器的优势。
3.1 可能出现的问题和解决方法
3.1.1 ERROR: x264 not found using pkg-config

解决方法:
由于我们使用--prefix指定了路径,那么我们已经知道了x264的安装路径是在/usr/local/x264
在/usr/local/x264/lib/pkgconfig/目录下有个x264.pc文件,只需要将它复制到/usr/share/pkgconfig/下即可。(pkg-config默认会搜索这个路径)
cp /usr/local/x264/lib/pkgconfig/x264.pc /usr/share/pkgconfig/
3.1.2 libx264 is gpl and --enable-gpl is not specified.

解决方法:
只需要在configure后面再加上--enable-gpl就可以了。
如:
./configure --enable-libx264 --enable-gpl
因为x264是按照GPL许可证发布的,启用这个选项是为了确保能与x264库的许可证兼容。
4. 检查编译结果
ffmpeg -h encoder=libx264
返回结果:
Encoder libx264 [libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10]:
General capabilities: dr1 delay threads
Threading capabilities: other
Supported pixel formats: yuv420p yuvj420p yuv422p yuvj422p yuv444p yuvj444p nv12 nv16 nv21 yuv420p10le yuv422p10le yuv444p10le nv20le gray gray10le
libx264 AVOptions:
....................................
....................................
如果返回结果是这样就说明你的FFmpeg已经支持H.264编码啦~

第二章 编译FFmpeg并开启H.264编码的更多相关文章
- 新手学习FFmpeg - 调用API完成录屏并进行H.264编码
Screen Record H.264 目前在网络传输视频/音频流都一般会采用H.264进行编码,所以尝试调用FFMPEG API完成Mac录屏功能,同时编码为H.264格式. 在上一篇文章中,通过调 ...
- Qt基于FFmpeg播放本地 H.264(H264)文件(灿哥哥的博客)
最近在弄H264的硬件编解码,基于DM3730,但是为了调试方便,在小红帽上用FFmpeg实现了H264的软件编解码.现在弄了一个Windows的例子,给需要的同学参考一下,如果大家觉得有帮助,可以小 ...
- C语言编程入门之--第二章编译环境搭建
第二章 编译环境搭建 导读:C语言程序如何工作,首先需要编译链接成可执行文件,然后就可以运行在不同的环境中,这个“环境”的意思就是比如说,电脑,手机,路由器,蓝牙音箱等等智能设备中,其中编译器启到了关 ...
- C++实现RTMP协议发送H.264编码及AAC编码的音视频
http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html C++实现RTMP协议发送H.264编码及AAC编码的音视频 RTMP ...
- C++实现RTMP协议发送H.264编码及AAC编码的音视频(转)
C++实现RTMP协议发送H.264编码及AAC编码的音视频(转) RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia ...
- 直播一:H.264编码基础知识详解
一.编码基础概念 1.为什么要进行视频编码? 视频是由一帧帧图像组成,就如常见的gif图片,如果打开一张gif图片,可以发现里面是由很多张图片组成.一般视频为了不让观众感觉到卡顿,一秒钟至少需要16帧 ...
- 视频基础知识:浅谈视频会议中H.264编码标准的技术发展
浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...
- (转)C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播
转:http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html C++实现RTMP协议发送H.264编码及AAC编码的音视频 RT ...
- 树莓派编译安装 FFmpeg(添加 H.264 硬件编解码器支持)
说明 FFmpeg 是一套开源的音视频编解码库,有非常强大的功能,包括视频采集功能.视频格式转换等.众所周知视频编解码是一个非常消耗系统资源的过程,而树莓派自带了 H.264 的硬件编解码器,因此本文 ...
- H.264编码profile & level控制
背景知识 先科普一下profile&level.(这里讨论最常用的H264) H.264有四种画质级别,分别是baseline, extended, main, high: 1.Baseli ...
随机推荐
- P1036 [NOIP2002 普及组] 选数
传送锚点:https://www.luogu.com.cn/problem/P1036 题目描述 已知 \(n\) 个整数 \(x_1,x_2,\cdots,x_n\),以及 \(1\) 个整数 \( ...
- 使用Docker安装Odoo 17(非Docker Compose)
使用Docker安装Odoo 17(非Docker Compose) 前言 最近在学习Odoo,先是windows 安装企业版,多年不用windows的服务器操作系统,一看windows的ECS那么贵 ...
- 7.21考试总结(NOIP模拟22)[d·e·f]
你驻足于春色中,于那独一无二的春色之中. 前言 首先,这套题的暴力分数十分丰厚,大概是 81+89+30=200 . T1 的特殊性质比较多,也都很好想,于是考场 81pts 是没有问题的. T2 暴 ...
- C++笔记(8)常规new运算符和定位new运算符
通常,new负责在堆(heap)中找到一个能够满足要求的内存块.new运算符还有一种变体,被称为定位(placement)new运算符,他能让你能够指定要使用的位置.程序员可以使用这种特性来设置其内存 ...
- Excel相关技巧
(1)如何实现EXCEL某个单元格满足条件整行变色? 链接:https://jingyan.baidu.com/article/75ab0bcba47c19d6864db2cf.html (2)获取表 ...
- P6259
problem 考虑使用 dfs 模拟. 由于一个程序可能在不进入无限循环的情况下运行很多步,这将会非常缓慢.因此,接下来要加速模拟,可以用记忆化搜索. 在网格中,机器人的可能状态(位置和朝向)只有 ...
- MySQL数据库开发(2)
单表查询 单表查询即对单个表进行查询. 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY fie ...
- 服务器安装mysql
数据库连接操作 修改root的hostupdate user set host='%' where user='root' and host ="127.0.0.1"flush p ...
- SQL 如何去掉字段中千位的逗号(比如set @= '1,320.00' 想得到@= '1320.00' )
1/去掉字段里的逗号.(比如set @= '1,320.00' 想得到@= '1320.00' )UPDATE table SET fieldA = REPLACE(fieldA, ',', '') ...
- .NET8操作Mysql,Pomelo.EntityFrameworkCore.MySql版本目前最高只有7.0解决办法
Pomelo.EntityFrameworkCore.MySql7.0是不支持.NET8的,但现在Pomelo.EntityFrameworkCore.MySql的最新版本只有7.0 因为 Pomel ...