视频格式与编码压缩标准 mpeg4,H.264.H.265 有什么关系?

参考一:

      还是从MPEG-4说起吧。MPEG-4是一套用于音频视频信息的压缩编码标准,由国际标准化组织ISO)和国际电工委员会IEC)下属的“動態影像专家组”(Moving Picture Experts Group,即MPEG)制定,第一版在1998年10月通過,第二版在1999年12月通過。MPEG-4格式的主要用途在於網上串流光碟、語音傳送(視訊電話),以及電視廣播。(摘自Wikipedia)


再说编码格式吧。 H.264被MPEG组织称作AVC(Advanced Video Codec/先进视频编码),是MPEG4标准的第10部分,用来取代之前MPEG4第2部分(简称MPEG4P2)所制定的视频编码,因为AVC有着比MPEG4P2强很多的压缩效率。最常见的MPEG4P2编码器有divx和xvid(开源),最常见的AVC编码器是x264(开源)。 而H.265则是次世代的视频编码技术,被MPEG组织称为HEVC(High Efficiency Video Coding) ,是次世代标准MPEG-H的第2部分,不属于MPEG-4标准,有着比H.264更强的压缩效率。

最后终于可以说容器。 mp4,rmvb,mkv,avi从形式上来说首先都是视频文件的扩展名,其次它们也是视频文件的封装格式(即容器), mp4是MPEG-4标准的第14部分所制定的容器标准。所谓容器,就是把编码器生成的多媒体内容(视频,音频,字幕,章节信息等)混合封装在一起的标准。容器使得不同多媒体内容同步播放变得很简单,而容器的另一个作用就是为多媒体内容提供索引,也就是说如果没有容器存在的话一部影片你只能从一开始看到最后,不能拖动进度条(当然这种情况下有的播放器会话比较长的时间临时创建索引),而且如果你不自己去手动另外载入音频就没有声音。

关于容器的一个例子是aac/m4a"格式“的音频(这两是一回事,m4a是苹果"发明"的扩展名),这种音频采用的是AAC编码,但实际上也是被封装在MPEG4P14(即mp4)容器里的,因为没有容器的原始AAC数据流是没有索引的,不方便播放器定位。

不同的容器有不同的特性,mp4是官方指定的容器,属于”太子党“,硬件支持广泛;rmvb是一种封闭标准的容器,只能用来封装realvideo编码的视频;mkv是社区设计的开放性容器,最大的特性在于几乎可以封装一切的编码格式;avi历史悠久,其陈旧的架构本身已经不能适应新的编码格式,可以入土了。

参考二:

我通过引入下面三个概念来介绍视频压缩知识。分别是:视频文件格式(简称:文件格式)视频封装格式(简称:视频格式)视频编码方式(简称:视频编码)

----------------------------------------------------------------

一,视频文件格式(简称:文件格式):我们知道Windows系统中的文件名都有后缀,例如1.doc,2.wps,3.psd等等。Windows设置后缀名的目的是让系统中的应用程序来识别并关联这些文件,让相应的文件由相应的应用程序打开。例如你双击1.doc文件,它会知道让Microsoft Office去打开,而不会用Photoshop去打开这个文件。所以常见的视频文件格式如1.avi,2.mpg这些都叫做视频的文件格式,它由你电脑上安装的视频播放器关联。

----------------------------------------------------------------

二,视频封装格式(简称:视频格式):AVI,MPEG,VOB是一种视频封装格式,相当于一种储存视频信息的容器。它是由相应的公司开发出来的。我们可以在自己的电脑上看到的1.avi,2.mpg,3.vob这些视频文件格式的后缀名即采用相应的视频封装格式的名称。以下集中介绍几种封装格式:

1,AVI格式(后缀为.AVI):它的英文全称为Audio Video Interleaved,即音频视频交错格式。它于1992年被Microsoft公司推出。

这种视频格式的优点是图像质量好。由于无损AVI可以保存alpha通道,经常被我们使用。缺点太多,体积过于庞大,而且更加糟糕的是压缩标准不统一,最普遍的现象就是高版本Windows媒体播放器播放不了采用早期编码编辑的AVI格式视频,而低版本Windows媒体播放器又播放不了采用最新编码编辑的AVI格式视频,所以我们在进行一些AVI格式的视频播放时常会出现由于视频编码问题而造成的视频不能播放或即使能够播放,但存在不能调节播放进度和播放时只有声音没有图像等一些莫名其妙的问题。

2,DV-AVI格式(后缀为.AVI):DV的英文全称是Digital Video Format,是由索尼、松下、JVC等多家厂商联合提出的一种家用数字视频格式。

数字摄像机就是使用这种格式记录视频数据的。它可以通过电脑的IEEE 1394端口传输视频数据到电脑,也可以将电脑中编辑好的的视频数据回录到数码摄像机中。这种视频格式的文件扩展名也是avi。电视台采用录像带记录模拟信号,通过EDIUS由IEEE 1394端口采集卡从录像带中采集出来的视频就是这种格式。

3,QuickTime File Format格式(后缀为.MOV):美国Apple公司开发的一种视频格式,默认的播放器是苹果的QuickTime。

具有较高的压缩比率和较完美的视频清晰度等特点,并可以保存alpha通道。大家可能注意到了,每次安装EDIUS,我们都要安装苹果公司推出的QuickTime。安装其目的就是为了支持JPG格式图像和MOV视频格式导入。

4,MPEG格式(文件后缀可以是 .MPG .MPEG .MPE .DAT .VOB .ASF .3GP .MP4等):它的英文全称为Moving Picture Experts Group,即运动图像专家组格式,该专家组建于1988年,专门负责为CD建立视频音频标准,而成员都是为视频、音频及系统领域的技术专家。

MPEG文件格式是运动图像压缩算法的国际标准。MPEG格式目前有三个压缩标准,分别是MPEG-1、MPEG-2、和MPEG-4。MPEG-1、MPEG-2目前已经使用较少,着重介绍MPEG-4,其制定于1998年,MPEG-4是为了播放流式媒体的高质量视频而专门设计的,以求使用最少的数据获得最佳的图像质量。目前MPEG-4最有吸引力的地方在于它能够保存接近于DVD画质的小体积视频文件。你可能一定注意到了,怎么没有MPEG-3编码,因为这个项目原本目标是为高分辨率电视HDTV)设计,随后发现MPEG-2已足够HDTV应用,故MPEG-3的研发便中止(百度百科说MPEG-3就是mp3,我认为这个说法并不准确。)。

5,WMV格式(后缀为.WMV .ASF):它的英文全称为Windows Media Video,也是微软推出的一种采用独立编码方式并且可以直接在网上实时观看视频节目的文件压缩格式。

WMV格式的主要优点包括:本地或网络回放,丰富的流间关系以及扩展性等。WMV格式需要在网站上播放,需要安装Windows Media Player(简称WMP),很不方便,现在已经几乎没有网站采用了。

6,Real Video格式(后缀为.RM .RMVB):Real Networks公司所制定的音频视频压缩规范称为Real Media。

用户可以使用RealPlayer根据不同的网络传输速率制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放。RMVB格式:这是一种由RM视频格式升级延伸出的新视频格式,当然性能上有很大的提升。RMVB视频也是有着较明显的优势,一部大小为700MB左右的DVD影片,如果将其转录成同样品质的RMVB格式,其个头最多也就400MB左右。大家可能注意到了,以前在网络上下载电影和视频的时候,经常接触到RMVB格式,但是随着时代的发展这种格式被越来越多的更优秀的格式替代,著名的人人影视字幕组在2013年已经宣布不再压制RMVB格式视频。

7,Flash Video格式(后缀为.FLV):由Adobe Flash延伸出来的的一种流行网络视频封装格式。随着视频网站的丰富,这个格式已经非常普及。

8,Matroska格式(后缀为.MKV):是一种新的多媒体封装格式,这个封装格式可把多种不同编码的视频及16条或以上不同格式的音频和语言不同的字幕封装到一个Matroska Media档内。它也是其中一种开放源代码的多媒体封装格式。Matroska同时还可以提供非常好的交互功能,而且比MPEG的方便、强大。

常用视频格式及对应的文件格式


----------------------------------------------------------------

三,视频编码方式(简称:视频编码):所谓视频编码方式就是指能够对数字视频进行压缩或者解压缩(视频解码)的程序或者设备。通常这种压缩属于有损数据压缩。也可以指通过过特定的压缩技术,将某个视频格式转换成另一种视频格式。常见的编码方式有:

1,H.26X系列 (由ITU[国际电传视讯联盟]主导)包括H.261、H.262、H.263、H.264、H.265。

1) H.261:主要在老的视频会议视频电话产品中使用。

2) H.263:主要用在视频会议视频电话网络视频上。

3) H.264:H.264/MPEG-4第十部分,或称AVC(Advanced Video Coding,高级视频编码),是一种视频压缩标准,一种被广泛使用的高精度视频的录制、压缩和发布格式。

4) H.265:高效率视频编码(High Efficiency Video Coding,简称HEVC)是一种视频压缩标准H.264/MPEG-4 AVC的继任者。HEVC被认为不仅提升图像质量,同时也能达到H.264/MPEG-4 AVC两倍之压缩率(等同于同样画面质量下比特率减少了50%),可支持4K分辨率甚至到超高画质电视,最高分辨率可达到8192×4320(8K分辨率),这是目前发展的趋势。直至2013年,Potplayer添加了对于H.265视频的解码,尚未有大众化编码软件出现。

2,MPEG系列(由ISO[国际标准组织机构]下属的MPEG[运动图象专家组]开发 )视频编码方面主要有:

1) MPEG-1第二部分(MPEG-1第二部分主要使用在VCD上,有些在线视频也使用这种格式。该编解码器的质量大致上和原有的VHS录像带相当。)

2) MPEG-2第二部分(MPEG-2第二部分等同于H.262,使用在DVDSVCD和大多数数字视频广播系统和有线分布系统(cable distribution systems)中。)

3) MPEG-4第二部分(MPEG-4第二部分标准可以使用在网络传输、广播和媒体存储上。比起MPEG-2和第一版的H.263,它的压缩性能有所提高。)

4) MPEG-4第十部分(MPEG-4第十部分技术上和ITU-T H.264是相同的标准,有时候也被叫做“AVC”)最后这两个编码组织合作,诞生了H.264/AVC标准。ITU-T给这个标准命名为H.264,而ISO/IEC称它为MPEG-4 高级视频编码(Advanced Video Coding,AVC)。

3,其他系列:AMV · AVS · Bink · CineForm · Cinepak · Dirac · DV · Indeo · Video · Pixlet · RealVideo · RTVideo · SheerVideo · Smacker · Sorenson Video · Theora · VC-1 · VP3 · VP6 · VP7 · VP8 · VP9 · WMV。因为以上编码方式不常用,不再介绍。

----------------------------------------------------------------

总之,即使是同一种视频文件格式,如*.MPG。又分为MPEG-1,MPEG-2 ,MPEG-4几种不同的视频封装格式,就算是同一种视频封装格式,如MPEG-4又可以使用多种视频编码方式。视频的编码形式才是一个视频文件的本质所在,不要简单的通过文件格式和封装形式来区分视频。


封装了开源工程, mp4v2, mpeg4ip代码, /******************************************/ /* Name:Mp4Interface.h /* Mark:mp4封装解析接口 /* author: machh /* date:2012.5.12. /******************************************/ #ifndef _MP4_INTERFACE_ #define _MP4_INTERFACE_ #include "MP4Writer.h" #include "MP4Reader.h" typedef struct _tagPACKET_HEADER_ { _tagPACKET_HEADER_() { nType = 0; nLen = 0; nTime = 0; } unsigned long nTime; // 不依赖于I帧的参考时间 int nLen; // 不包括该头结构本身大小 int nType; }PACKET_HEADER; enum FILE_OPEN_MODEL { OPEN_MODEL_W, // 写文件 OPEN_MODEL_R // 读文件 r+b }; class Mp4Interface { public: Mp4Interface(void); ~Mp4Interface(void); public: /* * @mark 打开文件 * @param[in] nModel文件打开方式,如果nModel为OPEN_MODEL_W 则创建文件 * @param[in] nMediaType 值为 MP4_VIDEOTYPE_H264/MP4_VIDEOTYPE_MPEG4 * @return 操作结果 */ int OpenFile(const char* strPath, FILE_OPEN_MODEL nModel, int nMediaType ); /* * @Name:Close * @mark: 读写操作结束之后,必须调用此函数 */ int Close(); public: //写操作 /* * @mark: 添加视频轨道 * @param[out] nTrackId 轨道ID * @param[in] nWidth,nHeight 画面宽高 * @param[out] fps 帧率 */ int AddVideoTrack (int& nTrackId, const int nWidth, const int nHeight, const double fps ); /* * @mark: 写一帧数据 * @param[in] lpData 要写入的数据 * @param[in] nSize 要写入的数据大小 * @param[in] nTimestamp 时间戳 */ BOOL WriteFrame( const int nTrackId, const uint8_t* const lpData, const int nSize, const MP4Timestamp nTimestamp, const MP4Duration nDuration = -1 ); /* * @mark: 添加音频轨道 aac * @param[out] nTrackId * @param[in] nSamplePerSec (timescale) */ int AddAudioTrack( int& nTrackId, const int nSamplePerSec, const int nSamplePerFrame = -1 ); public: //读操作 /* * @mark : 全局函数,读取整个MP4文件结构信息, * 函数内部会fopen/fclose,该函数应当在OpenFile之前调用 * @param[in] strFile 文件路径 * @param[out] lsTrackInfo 输出文件信息结构 */ bool static GetMP4FileInfo( const char* strFile, MP4_TRACKINFO_LIST& lsTrackInfo ); /* * @mark:SetReadTrackId设置轨道ID, */ int SetReadTrackId( int nTrackID ); /* * @mark:获取轨道信息,该函数必须在OpenFile(……)之后调用才有效 */ int GetTrackInfo( MP4_TRACK_INFO* pstTrackInfo ); /* * @mark: 读取一帧数据 */ int ReadFrameData( DWORD nSampleId, BYTE** ppFrame, DWORD* pnBufSize,int& nFrameType ); protected: int m_nOpenModel; int m_nMediaType; CMP4Writer * m_pMp4Writer; CMP4Reader * m_pMp4Reader; }; #endif// end
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值