这里我默认大家已经看过 第一章 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编码的更多相关文章

  1. 新手学习FFmpeg - 调用API完成录屏并进行H.264编码

    Screen Record H.264 目前在网络传输视频/音频流都一般会采用H.264进行编码,所以尝试调用FFMPEG API完成Mac录屏功能,同时编码为H.264格式. 在上一篇文章中,通过调 ...

  2. Qt基于FFmpeg播放本地 H.264(H264)文件(灿哥哥的博客)

    最近在弄H264的硬件编解码,基于DM3730,但是为了调试方便,在小红帽上用FFmpeg实现了H264的软件编解码.现在弄了一个Windows的例子,给需要的同学参考一下,如果大家觉得有帮助,可以小 ...

  3. C语言编程入门之--第二章编译环境搭建

    第二章 编译环境搭建 导读:C语言程序如何工作,首先需要编译链接成可执行文件,然后就可以运行在不同的环境中,这个“环境”的意思就是比如说,电脑,手机,路由器,蓝牙音箱等等智能设备中,其中编译器启到了关 ...

  4. C++实现RTMP协议发送H.264编码及AAC编码的音视频

    http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html C++实现RTMP协议发送H.264编码及AAC编码的音视频 RTMP ...

  5. C++实现RTMP协议发送H.264编码及AAC编码的音视频(转)

    C++实现RTMP协议发送H.264编码及AAC编码的音视频(转) RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia ...

  6. 直播一:H.264编码基础知识详解

    一.编码基础概念 1.为什么要进行视频编码? 视频是由一帧帧图像组成,就如常见的gif图片,如果打开一张gif图片,可以发现里面是由很多张图片组成.一般视频为了不让观众感觉到卡顿,一秒钟至少需要16帧 ...

  7. 视频基础知识:浅谈视频会议中H.264编码标准的技术发展

    浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...

  8. (转)C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播

    转:http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html C++实现RTMP协议发送H.264编码及AAC编码的音视频 RT ...

  9. 树莓派编译安装 FFmpeg(添加 H.264 硬件编解码器支持)

    说明 FFmpeg 是一套开源的音视频编解码库,有非常强大的功能,包括视频采集功能.视频格式转换等.众所周知视频编解码是一个非常消耗系统资源的过程,而树莓派自带了 H.264 的硬件编解码器,因此本文 ...

  10. H.264编码profile & level控制

    背景知识 先科普一下profile&level.(这里讨论最常用的H264) H.264有四种画质级别,分别是baseline, extended, main, high:  1.Baseli ...

随机推荐

  1. 环境声音分类的深度 CNN 模型

    具体的软硬件实现点击 http://mcu-ai.com/ MCU-AI技术网页_MCU-AI 声音事件的分类精度与特征提取有很强的关系.本文将深度特征用于环境声音分类(ESC)问题.深层特征是通过使 ...

  2. 设置MySQL数据库的远程连接权限

    解决方案 在服务器上登录数据库,然后执行如下授权SQL语句.该授权SQL语句的含义为root用户可用任何IP地址登录数据库,操作任何数据库中的任何对象.   GRANT ALL PRIVILEGES ...

  3. Instsrv.exe 与 Srvany.exe 安装Windows服务

    原理:Instsrv.exe可以给系统安装和删除服务 Srvany.exe可以让exe程序以服务的方式运行(Srvany只是exe注册程序的服务外壳,可以通过它让我们的程序以SYSTEM账户活动,随电 ...

  4. gossh nohup部署退出解决方法

    ssh 会话远程nohup ./node> node.out & 执行指令,会话退出以后也会导致服务并没有部署成功. 应该使用以下命令:nohup ./node > node.ou ...

  5. Leetcode数组-二分法

    Leetcode数组-二分法 二分法学习地址 二分法 704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 targe ...

  6. Aspire项目发布到远程k8s集群

    前提 你必须会创建aspire项目,不会的请先看微服务新体验之Aspire初体验 Aspirate (Aspir8) Aspirate 是将aspire项目发布到k8s集群的工具 安装aspirate ...

  7. C++笔记(9) 异常

    程序有时会遇到运行阶段错误,导致程序无法正常走下去.对于这种问题,处理方法主要有: 1.调用abort() Abort()函数原型位于头文件cstdlib,其典型实现是向标准错误流(即cerr使用的错 ...

  8. vue局部注册

    只能在当前注册它的vue实例中使用,通过某个 Vue 实例/组件的实例选项 components 注册仅在其作用域中可用的组件 var Child = { template: '<div> ...

  9. Scrapy框架(八)--CrawlSpider

    CrawlSpider类,Spider的一个子类 - 全站数据爬取的方式 - 基于Spider:手动请求 - 基于CrawlSpider - CrawlSpider的使用: - 创建一个工程 - cd ...

  10. 实现并发新高度:23ai的无锁列值保留

    Oracle Database 23ai支持Lock-Free Reservation,中文通常译为"无锁列值保留". 本文将通过3个部分来阐述Lock-Free Reservat ...