fmpeg安装第三方编码器(encoder)库,ffmpeg编码h264(完)

ffmpeg安装第三方编码器(encoder)库

关键词:ffmpeg、编码h264、第三方encoder

安装好了ffmpeg后,如果你使用ffmpeg工具去把某个视频文件转成h264视频编码、mp3音频编码or其他ffmpeg自身不带的xxx编码类型,就会看到报错信息,unknown encoder 'xxx'。此刻你需要的只要去安装其他的编码器就行了,本质上其实是把其他的编码器以库的形式安装好,例如,把正确的libx264.so or libx264.a存放在/usr/lib下 or /usr/local/lib下。

举两个例子吧,视频方面的编码器就拿h264来说,音频方面的例子就拿mp3(mp3lame)来说。

扫盲,Linux下安装一个正规的软件,一般都是三部曲,①、【./configure】(加一些可能的参数,比如enable一些功能,disable一些功能,究竟有哪些功能可以开启和关闭呢?一般通过./configure
--help命令来查询),②、【make】(编译),③、【sudo make install】(把生成的二进制应用程序文件和.so和.a复制到/usr/local/下)

一、h264

动手搜一下ffmpeg的工程代码库,会发现每个codec都有一下几个成员变量,但是有好几个codec缺少encoder,h264就是其中一个了。先不管什么原因,ffmpeg没有原生的支持h264,但是你可以查看一下avcodec_register_all这个API,会发现一大片的REGISTER_ENCODER(XXX, xxx)

REGISTER_DECODER(XXX, xxx)

这里分很多块,例如/* video codecs */,/* audio codecs */,/* external libraries */

但是你在/* video codecs */这一块却看不到h264的REGISTER_ENDECODER (H264, h264);这句话,如果你坚持往下翻,你会在/* external libraries */这块里面发现REGISTER_ENCODER (LIBX264, libx264);所以ffmpeg是有给h264准备好了接口的,但是需要第三方库来支持。

回到重点,怎么装呢?

1.先下载x264的工程代码,【Git clone git://git.videolan.org/x264.git】。

2.进入x264目录,然后./configure --help看看它的帮助信息,我们这里需要的是x264以.so or .a的形式来支援ffmpeg,所以一般就关注shared和static关键词就可以了。执行./configure --enable-shared --enable-static就行了。

3.完了make && sudo make install就可以了。

你会发现我们在./configure的时候没有指定前缀--prefix=/usr,很明显,libx264.so和libx264.a就会复制到/usr/local/lib下去,记住这里,等下会因为这里要做一些修改。

二、mp3lame

上面说了h264,相信mp3lame理解起来就简单多了。

1.先下载mp3lame的工程代码,http://sourceforge.NET/projects/lame/files/lame/,为什么这里要显得多余的讲一下mp3lame呢,是这样的。大家可以看到x264用的是git,mp3lame是用的sourceforge,不妨再多说一个faac(也是一种原生ffmpeg不支持的音频codec),faac用的是http://sourceforge.Net/projects/faac/files/faac-src/,所以每一种codec或者很重要的软件都有一个团队或者社区在维护,所以需要什么东西,尽量去sourceforge或者git上找,其他地方找的可能不够新,可能不完整不正确。

2.然后也是./configure --help先,看看哪些功能是我们需要打开关闭的

3.完了make && sudo make install就可以了。

很明显,我们又没有指定--prefix-/usr,所以mp3lame的libmp3lame.so和libmp3lame.a就被赋值到了/usr/local/lib下了。

三、重新编译ffmpeg

1.进入ffmpeg目录,./configure --enable-gpl --enable-libx264 --enable-libmp3lame,然后就生成了新的makefile了。

2.执行sudo make clean && make sudo make install。

3.这样ffmpeg就被重新编译了,完了就可以验证一下,使用ffmpeg工具,把某个视频文件中的视频流转码成h264格式,音频流转码成mp3lame格式,不妨试试。

4.如果你真的尝试了,你应该会看到类似于“libxxx.so找不到”的错误提示,解决办法如下:

(1).表象:ffmpeg运行的时候试图去链接libxxx.so,但是却找不到相应的libxxx.so。

(2).疑惑:我之前明明安装了libxxx.so的。

(3).原因:程序运行的时候默认是去/usr/lib下找libxxx.so,但是我们之前安装的确实在/usr/local/lib下,所以造成这个报错。

(4).解决办法:有很多,我说一种我亲测过的。

在/etc/ld.so.conf文件中添加一行/etc/ld.so.conf,当然是用root用户啦。然后执行ldconfig命令使得刚才的修改生效,完了再运行ffmpeg的转码命令试试,可以了吧。

之前我尝试过用ffplay来播放一个h264编码的视频,结果当然是可以播放,我就天真的以为ffmpeg支持h264了,其实不然,ffmpeg主要还是用来解码,所以部分格式的encoder却没有,所以才会有第三方库支援,为什么原生ffmpeg不支持某些格式呢?原因我暂时不知道。为了解决ffmpeg可以编码h264这个问题,我在网上搜索一些资料,然后总结成上文,在此过程中我还收获了一些Linux的知识,也已经写出。

补充三点:

H264 下载地址:http://www.videolan.org/developers/x264.html

aac下载地址:http://sourceforge.net/projects/faac/files/faac-src/faac-1.28/faac-1.28.tar.gz/download

找不到库:vim /etc/ld.so.conf,加入:/usr/local/lib,执行ldconfig

aac:./configure --enable-shared  --enable-static

264:./configure --enable-shared  --enable-static  --disable-asm

ffmpeg:./configure --enable-gpl --enable-libx264  --enable-libfaac  --enable-nonfree --disable-yasm

【FFMPEG】【ARM-Linux开发】fmpeg安装第三方编码器(encoder)库,ffmpeg编码h264(完)的更多相关文章

  1. 在Ubuntu上建立Arm Linux 开发环境

    我使用的是友善2410的板子,以前都是用Fedora,现在家里的电脑被我转为Linux专用的了,装的是Ubuntu.但是嵌入式还是要玩的,在装载过程中也遇到一些小麻烦.在此记录一下,一来自己比较健忘, ...

  2. Linux:编译安装boost 1.69库

    Boost库是为C++语言标准库提供扩展的一些C++程序库的总称,由Boost社区组织开发.维护.在C++的地位感觉可以和Spring在Java中相比. boost向来有准标准库之称,很多新特性例如智 ...

  3. 成功移植SQLite3到ARM Linux开发板

    SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 ...

  4. 【Linux开发】为qt-embedded添加jpeg库的交叉编译方法for arm

    看了一个文章: =====================================谢论坛内各位的帮助,我的qt/e2.3.10和qtopia2.1.1终于全部编译通过. 下面是jpeg和uui ...

  5. minigui移植到arm linux开发板上无法执行

    要保证目录下有该文件 /etc/MiniGUI.cfg 复制过程使用cp –af 强制复制

  6. VS使用Nuget教程详解 Visual studio 安装第三方的组件库

    首先说明Nuget是什么呢?它的官方是:https://www.nuget.org/ 官方主页的介绍如下: What is NuGet? NuGet is the package manager fo ...

  7. Linux环境下安装PHP的gd库

    当前使用的安装包版本: freetype-2.4.0.tar.bz2 jpegsrc.v9.tar.gz libpng-1.6.28.tar.gz 1.安装freetype tar jxvf free ...

  8. 【DSP开发】【Linux开发】基于ARM+DSP进行应用开发

    针对当前应用的复杂性,SOC芯片更好能能满足应用和媒体的需求,集成众多接口,用ARM做为应用处理器进行多样化的应用开发和用户界面和接口,利用DSP进行算法加速,特别是媒体的编解码算法加速,既能够保持算 ...

  9. arm linux 移植 ffmpeg 库 + x264

    背景 Ffmpeg 中带有h264的解码,没有编码,需要添加x264.libx264是一个自由的H.264编码库,是x264项目的一部分,使用广泛,ffmpeg的H.264实现就是用的libx264. ...

随机推荐

  1. JQuery实践--插件

    jQuery插件的概览http://docs.jquery.com/Pluginshttp://jquery.com/plugins/most_popular 官方的表单插件http://jquery ...

  2. Maratona Brasileira de Popcorn( 二分答案+暴力 )

    题意:输入三个数n,c,t . 桌子上有n堆爆米花,每一堆有ai个, 现在有c个人一起吃爆米花,每人每分钟最多能吃t个爆米花,但有两个规定:1.一堆爆米花只能一个人吃, 2.每个人只能吃连续的若干堆爆 ...

  3. P2680 运输计划 二分+树上差分

    又咕咕了几天\(QwQ\) 思路:二分+树上差分 提交:\(\geq5\)次 错因:\(lca\)写错+卡了很久常数(哪位大佬帮我康康,有更好的写法请指出\(QwQ\)) 题解: 我们先将原问题转化为 ...

  4. SQL Server report server使用

    1.配置share point網站來改動報表      打開Reporting Servers Configuration Manager,裏面有Web Service URL(http://loca ...

  5. scrapy框架之log日志

    scrapy中的debug信息 在scrapy中设置log 1.在settings中设置log级别,在settings.py中添加一行: Scrapy提供5层logging级别: CRITICAL - ...

  6. MySQL查询top N记录

    下面以查询每门课程分数最高的学生以及成绩为例,演示如何查询 top N记录.下图是测试数据,表结构和相关 insert 脚本见<常用SQL之日期格式化和查询重复数据>. 使用自连接[推荐] ...

  7. Maven的几种新建项目方式

    1. 使用原型创建Maven的java工程 (1) 选择 JDK 的版本,勾选“使用原型创建”,选中 maven-archetype-quickstart,下一步. (2) 填写公司名,填写项目名,修 ...

  8. 重读APUE(12)-SIGCHLD与僵尸进程

    SIGCHLD信号是当子进程终止时向父进程发送的信号:它的语义如下: 如果进程明确的将该信号设置为SIG_IGN,则调用进程不会产生僵尸进程:这种情况下,wait是等不到给子进程收尸的,所以wait阻 ...

  9. 蚁群算法求解TSP问题

    一.蚁群算法简介 蚁群算法是对自然界蚂蚁的寻径方式进行模似而得出的一种仿生算法:蚂蚁在运动过程中,能够在它所经过的路径上留下信息素(pheromone)的物质进行信息传递,而且蚂蚁在运动过程中能够感知 ...

  10. centos7 - nginx配置安装phpmyadmin

    原文  https://www.linuxidc.com/Linux/2017-10/147556.htm 使用Nginx搭建phpMyAdmin   Nginx有什么用? Nginx可读作Engin ...