记一次for Unbuntu的x264和ffmpeg的编译过程

先介绍下x264编码器

摘自维基百科:http://zh.wikipedia.org/wiki/X264%E7%B7%A8%E7%A2%BC%E5%99%A8

x264提供了一个命令行接口以及一组应用程序接口(API)。前者在许多图形用户界面软件中得到应用,如Staxrip和MeGUI。后者也在许多其他类型到软件中调用,如HandBrake和FFmpeg。

x264具备的H.264标准定义的特性,较之其他H.264编码器而言多出许多。H.264编码器之间的特性比较,可以参见:

x264包含有一些心理视觉增强技术,以增强编码视频的主观质量。

x264能够在普通计算机上实现多路高清视频的实时编码。

x264也是第一个免费的蓝光视频编码器。2010年4月,x264项目组宣布蓝光格式视频编码功能完成,使得x264成为首个免费的蓝光视频编码器。

H.264简介:

H.264/MPEG-4第10部分MPEG-4第10部分也称为AVC,既Advanced Video Coding,高级视频编码)是一种视频压缩标准,一种被广泛使用的高精度视频的录制、压缩和发布格式。第一版标准的最终草案于2003年5月完成。

H.264/MPEG-4 AVC是一种面向块的基于运动补偿的编解码器标准。由ITU-T视频编码专家组与ISO/IEC联合工作组——即动态图像专家组(MPEG)——联合组成的联合视频组(JVT,Joint Video Team)开发。因ITU-T H.264标准和 ISO/IEC MPEG-4 AVC标准(正式名称是ISO/IEC 14496-10 — MPEG-4第十部分,高级视频编码)有相同的技术内容,故被共同管理。

H.264因其是蓝光盘的一种编解码标准而著名,所有蓝光盘播放器都必须能解码H.264。它也被广泛用于网络流媒体数据如Vimeo、YouTube、以及iTunes Store,网络软件如Adobe Flash Player和Microsoft Silverlight,以及各种高清晰度电视陆地广播(ATSC,ISDB-T,DVB-T或DVB-T2),线缆(DVB-C)以及卫星(DVB-S和DVB-S2)。

H.264/AVC项目意图创建一种视频标准。与旧标准相比,它能够在更低带宽下提供优质视频(换言之,只有MPEG-2,H.263或MPEG-4第2部分的一半带宽或更少),也不增加太多设计复杂度使得无法实现或实现成本过高。另一目的是提供足够的灵活性以在各种应用、网络及系统中使用,包括高、低带宽,高、低视频分辨率,广播,DVD存储,RTP/IP网络,以及ITU-T多媒体电话系统。

H.264标准可以被看作一个“标准家族”,成员有下面描述的各种配置(profile)。一个特定的解码器至少支持一种,但不必支持所有的。解码器标准描述了它可以解码哪些配置。

H.264的命名遵循了ITU-T的命名约定,它是VCEG视频编码标准H.26x线中的一员;MPEG-4 AVC的命名来自ISO/IEC MPEG的命名约定,它是ISO/IEC 14496的第10部分,该协议族被称为MPEG-4。该标准是作为VCEG和MPEG的一部分开发的,此前在ITU-T作为VCEG的项目,叫做H.26L。所以常用于指代此标准的名称有H.264/AVC,AVC/H.264,H.264/MPEG-4 AVC,或MPEG-4/H.264 AVC,以强调共同遗产。有时,也用“JVT编解码”指代它,以指明是JVT(联合开发组)组织开发的。(这种伙伴关系和多命名并不少见。例如,视频编码标准MPEG-2也出现在MPEG和ITU-T的伙伴关系中,MPEG-2视频在ITU-T社区中称作H.262。[1])一些软件(如VLC media player)内部标识此标准为AVC1。

H.264/AVC标准化的第一个版本于2003年5月完成。在第一个扩展原始标准的项目中,JVT开发了高精度拓展(Fidelity Range Extensions,FRExt)。该拓展通过支持更高的像素精度(包括10比特和12位像素精度)和支持更高的色度抽样率(包括YUV 4:2:2和YUV 4:4:4)来支持更高精度的视频编码。该拓展加入了一些新的特性(比如自适应的4x4和8x8的整数变换,用户自定义量化加权矩阵,高效的帧间无损编码,支持新增的色度空间和色度参差变换)。该拓展的设计于2004年7月完成,草案也于2004年9月完成。

对标准进一步的最新扩展包括:增加五个新的配置,主要用于专业应用;增加扩展全范围(extended-gamut)色彩空间的支持;定义附加长宽比标识;定义“补充增强信息”的两个附加类型(滤波后提示和色调映射);以及废弃一个根据产业反馈应该另行设计的早期FRExt配置。

接着加入标准的主要特性是可适应视频编码(Scalable Video Coding,SVC)。据H.264/AVC附件G,SVC允许码流结构中包含遵循标准的子码流,这种称作“基础层”的码流要能够为不支持SVC的H.264/AVC编解码器所解码。为达成在时间上的可适应性,在推导子码流时,从码流中移除了完整访问单元(complete access unit)。这种情况下,要按相应方式来构造码流中的高层语法和帧间预测参考帧。另一方面,为达成空间和质量的可适应性(换言之,低分辨率/低质量作为子码流而不是主码流),推导子码流时移除了NAL(网络抽象层)。这种情况下,层间预测(暨,从低分辨率/低质量信号数据中预测高分辨率/高质量信号)常被用于提高编码效率。可适应视频编码扩展于2007年11月完成。

下一个加入标准的主要特性是多视图编码(Multiview Video Coding,MVC)。据H.264/AVC附件H,MVC使得码流结构可以表达一个视频场景的不止一个视图。该功能的一个重要例子是3D立体视频编码。MVC的工作中开发了两个配置:多视图高配置(Multiview High Profile)支持任意数量的视图,立体高配置(Stereo High Profile)是为双视图立体视频特别设计的。多视图编码扩展于2009年11月完成。

按照ffmpeg官网,x264的编译介绍进行,地址 https://trac.ffmpeg.org/wiki/How%20to%20quickly%20compile%20libx264

wiki:

How to quickly compile libx264

In order to quickly compile your libx264, you can type the following commands in your shell:

# cd /my/path/where/i/keep/compiled/stuff
# git clone git://git.videolan.org/x264.git
# cd x264
# ./configure --enable-static --enable-shared
# make
# make install
# ldconfig

If you get a message like this:

Found yasm 0.x.x.xxxx
Minimum version is yasm-1.0.0
If you really want to compile without asm, configure with --disable-asm.

that means that you have an old version of yasm on your system, so you should update it. The quickest way to do so is like this:

# git clone git://github.com/yasm/yasm.git
# cd yasm
# ./autogen.sh
# ./configure
# make
# make install

and after that, just repeat the configure, make, and make install steps for libx264 and it should be fine this time.


compile FFmpeg with libx264 (x264, H.264)

如果一切顺利的话就ok了,我的编译过程产生了一个libx264.c:690: undefined reference to `x264_encoder_open_142'的error.在编译x264的

./configure --enable-static --enable-shared 后面添加了  --disable-cli ,老大说依赖的东西太多了,所以加上这个。加上后就不依赖外部那么多东西了。

谨此记录。环境Ubuntu. 

你可能感兴趣的:(记一次for Unbuntu的x264和ffmpeg的编译过程)