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

news/2024/7/10 21:20:31 标签: ffmpeg, git, 操作系统

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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的知识,也已经写出。
    2012年5月28日16:05:15

转载于:https://my.oschina.net/michaelyuanyuan/blog/68616


http://www.niftyadmin.cn/n/640833.html

相关文章

react——组件 state

1. 设计合适的state 一个组件的任何UI改变都可以从state的变化中反应出来, 一个合适state必须代表一个组件的UI呈现的最小状态集。即state中所有的状态都用于表现UI的变化,没有任何多余的状态;也不应该包含任何可以由其他状态计算可以得到的中…

Web前端面试题 Js把URL中的参数解析为一个对象

请编写一个JavaScript函数 parseQueryString&#xff0c;它的用途是把URL参数解析为一个对象 如&#xff1a;var url ”http://www.taobao.com/index.php?key00&key11& key22”var obj new parseQueryString(url);alert(obj.key0) // 输出0 1 <!DOCTYPE HTML>…

前端面试-必会

1. http 与 https 的区别&#xff1f; http协议传输的数据是未加密的(明文的)&#xff0c;传输隐私信息不安全。 https是由SSLHTTP协议构建的可进行加密传输、身份认证&#xff0c;比较安全 2. vue 和 react 的区别&#xff1f; 共同点&#xff1a; 都是组件化开发---(在UI层&a…

js——正则表达式

正则表达式是用于匹配字符串中字符组合的模式。 创建正则表达式的两个方式&#xff1a; ① 使用一个正则表达式字面量 var re /abc/; 正则表达式字面量为正则表达式提供了脚本加载后的编译 ② 调用RegExp对象的构造函数 var re new RegExp("abc"); 使用构造函数为…

前端面试笔记*****敲黑板***重点

自我介绍 .......... 项目简介 该项目是基于react全家桶开发的一个博客系统&#xff0c;具有简单的增删改查、用户对文章的评论、收藏、点赞等功能&#xff1b;该项目是从后端到前端的开发&#xff0c;后端使用了 node 搭建框架并且安装了生产依赖(npm install --save express …

国家气象局提供的天气预报接口

接口地址&#xff1a; http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data/cityinfo/101010100.html http://m.weather.com.cn/data/101010100.html 对于第三个接口&#xff0c;返回信息比较全面&#xff0c;也是以json格式提供&#xff0c;格式…

webpack中文文档笔记——起步

private &#xff1a;true 确保我们安装包是私有的(private) 移除 main &#xff1a;“index.js” 可以防止意外发布你的代码 2.webpack 的项目结构中的src文件和打包完的dist文件夹的区别&#xff1a; src “源”代码是用于书写和编辑的代码 dist 是构建过程产生的代码最小化…

用perl访问Oracle

1&#xff09;在安装CPAN前&#xff0c;需要首先安装Oracle-Client。 &#xff12;&#xff09;安装好Oracle-Client后&#xff0c;要配置tnsnames.ora。用sqlplus测试一下确实可以访问到这个Oracle实例。 &#xff13;&#xff09;安装好DBI和DBD::Oracle后&#xff0c;perl访…