热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

编译带x264的FFMPEG

业务需要,需要在Linux系统下编译带x264编码的ffmpeg工程,略踩小坑,过程记录如下。首先下载源码,ffmpeg:http:www.ffmpeg.orgdownloa

业务需要,需要在Linux系统下编译带x264编码的ffmpeg工程,略踩小坑,过程记录如下。

首先下载源码,

ffmpeg: http://www.ffmpeg.org/download.html

x264:http://download.videolan.org/x264/snapshots/

yasm:http://yasm.tortall.net/Download.html

1. 编译yasm

yasm是x86架构下的一个汇编器,ffmpeg默认是使能的。没有该汇编器的话,后面编译ffmpeg时会报如下错误:

nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.

因此,我们首先来编译yasm。

进入yasm的source目录,依次执行下列语句:

./configure --prefix=/usr/local/ffmpeg_build/yasm

make

sudo make install

2. 编译x264

首先进入x264的source目录,配置如下:

./configure --prefix=/usr/local/ffmpeg_build/x264 --enable-shared --enable-static

然后:

make

sudo make install

3. 编译FFMPEG

首先需要在配置中指明依赖的外部头文件和外部库的位置,配置如下:

./configure --prefix=/usr/local/ffmpeg_build/ffmpeg \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--enable-pthreads \
--enable-libx264 \
--enable-shared \
--extra-cflags=-I/usr/local/ffmpeg_build/x264/include \
--extra-ldflags=-L/usr/local/ffmpeg_build/x264/lib

执行以上命令时报如下错误:

nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.

咦,命名安装了yasm库,怎么还报错?这是因为我们把yasm库手动安装到了 /usr/local/ffmpeg_build/yasm下面,并不在配置程序的搜索范围内,因此我们需要用如下语句将yasm的路径导出:

export PATH=$PATH:/usr/local/ffmpeg_build/yasm/bin

该命令将路径/usr/local/ffmpeg_build/yasm/bin放入环境变量中,但该设置是临时的,如果想让该环境变量永久有效,可以通过修改/etc/profile文件达成:

sudo vi /etc/profile

在下面加入:

export PATH="$PATH:/usr/local/ffmpeg_build/yasm/bin"

然后执行如下命令使环境变量立即生效:

source /etc/profile

通过以上操作后,我们再来执行ffmpeg的配置语句,执行通过。

然后make & sudo make install完成安装。

4. 测试FFMPEG

做个简单的转码测试,命令行如下:

./ffmpeg -i littlegirl.mp4 -c:v libx264 -c:a copy -f mpegts littlegirl.ts

报错:
./ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open shared object file: No such file or directory.

提示找不到libavdevice.so。

解决方法:将我们的动态库路径加入到/etc/ld.so.conf中,操作如下:

sudo vi /etc/ld.so.conf

在下面加入我们的动态库安装的路径:

/usr/local/ffmpeg_build/ffmpeg/lib

/usr/local/ffmpeg_build/x264/lib

然后执行 sudo ldconfig

进行上面的操作后,再次执行上面的转码命令,OK。


以上过程说明了如何在手动指定外部头文件和库文件位置的情况下的设置,其实可以更简单,将所有依赖的头文件放在/usr/local/include目录,所有库文件放在/usr/local/lib目录,可执行文件放在/usr/local/bin目录,由于这些目录默认在系统环境变量中,因此编译的时候能省去不少麻烦。







推荐阅读
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文记录了作者对x265开源代码的实现与框架进行学习与探索的过程,包括x265的下载地址与参考资料,以及在Win7 32 bit PC、VS2010平台上的安装与配置步骤。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • MongoDB用户验证auth的权限设置及角色说明
    本文介绍了MongoDB用户验证auth的权限设置,包括readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase、cluster相关的权限以及root权限等角色的说明和使用方法。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
author-avatar
踏山321
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有