转自:http://wmnmtm.blog.163.com/blog/static/38245714201142883032575/

要播放HDTV,就首先要正确地解开封装,然后进行视频音频解码。所以我们需要分离器,视频解码器和音频解码器,俗称hdtv的“三件套”,又统称滤镜。

H264的分离器:

常见的有Gabest MP4分离器,就是MP4splitter,也是Gabest编写的,Halli的分离器和NDigital分离器等。

H264的视频解码器:

CoreAVC的H264视频解码器CoreAVC DirectShow Video Decoder。

月光的H264解码器,全称为Moonlight H264 Video Decoder,ffdshow的解码器,全称为ffdshow
MPEG-4 Video Decoder,能打开N卡显卡硬件加速的CyberLink H.264/AVC Decoder(PDVD7)。

音频解码器:

ffdsshow,月光音频解码器、WinDVD的音频解码器、PowerDVD的音频解码器、AC3Filter音频解码器。

如果播放HDTV时碰到有声无画或者有画无声,就应该自己从解码器着手,替换一个试试。

缘起:HDTV的减肥药

其实HDTV个头大的根本原因,并非是分辨率太高,而是采用的MPEG2视频压缩算法力道不够,换成MPEG4就好得多,基本上可压缩到几G,但目前MPEG4编码群雄并起,编解码方案很不统一,有时拿着一部好片折腾半天却放不出来,再好的脾气也不免搓火。

现阶段比较好的选择是H.264/AVC。它是由ITU-T的VCEG(视频编码专家组)和ISO/IEC的MPEG(运动图像专家组)共同开发的视频处理标准,ITU-T称为H.264,而ISO/IEC称为AVC(高级视频编码),并将其作为MPEG-4 Part 10。可以说,H.264代表了当前业界最先进的视频压缩技术,具有压缩比高、码率低、图像质量好、容错能力强、网络适应性广等优点,在数字影像、网络电话、多媒体、IPTV、通讯等领域得到越来越广泛的应用。用H.264来处理HDTV,不仅能保留较高的视频质量,而且可以将HDTV瘦身到令人惊讶的程度,实在是对了HDTV肥胖症的减肥药。

实战:自己动手编码H.264影片

现在H.264的编码器已经很多,MainConcept H.264 Encoder和X264都很不错。下面以MainConcept
H.264 Encoder为例,介绍如何将Mpeg-HDTV转换为H.264-HDTV。

启动MainConcept H.264 Encoder,在Video编辑框中输入待转换视频文件名,或点击旁边的Open按钮选择。MainConcept H.264 Encoder能识别绝大多数视频格式,包括HDTV常使用的TS和M2V、MPG、AVI、WMV格式。由于许多HDTV节目视频和音频是分离的,因此 MainConcept H.264 Encoder单独设置了Audio编辑框,可在其中输入HDTV音频文件,或用旁边的Open按钮选择。如果音视频是合成在一起的,那么选择视频文件后,Audio编辑框自动出现该视频文件,勿需再选择音频文件了。Output编辑框设置目标文件名,一般为MPG文件。

下面Output format栏设置目标文件的格式。设置好后,点击主界面下的Convert按钮,即可开始转换。由于H.264编码需要大量计算,颇为耗时,所以用户得有比较好的耐心。编码完成后,大家可以拿目标文件同源文件对比一下,不难发现用H.264编码的HDTV文件大小只有MPEG2编码的三分之一左右。

小贴士:输出文件格式的具体设置

MPEG项: 和H.264相关的有三项:H.264 Baseline、H.264 Main和H.264High,其编码的画面质量从低到高,通常选择H.264 Main就可以了。

Video项:设置制式NTSC或PAL,最好选择与源文件一致的制式,以保证转换效果并减少转换时间。

Stream项:设置流格式,主要有三种:Elementary、Program和Transport,HDTV通常使用最后一种格式,因此选择Transport(Video+Audio)项较为合适。

Audio项:设置音频格式,使用Layer2和AAC均可。点击Details按钮弹出辅助设置对话框,在此设置码率(Bitrate)以及音频格式等,还可以利用Muxer栏的选项分割HDTV文件。点击Video栏中的Advanced按钮,可更详细地设置视频参数。不建议普通用户修改。

回放:帮暴风影音搞定H.264

H.264的解码器现在太多了,不过Moonlight H.264 Video Decoder格外好一些。这款HDTV解码器的品质得到了广泛的认可,几乎成了HDTV的标准解码器。下面讲讲怎么把它和常用的暴风影音结合起来。

安装Moonlight H.264 Video Decoder,完成后启动暴风影音,选择“查看→选项”菜单,弹出选项对话框。点击“滤镜”项下的“管理”子项,再在右边的“管理”页中点击“添加滤镜”按钮。

弹出选择滤镜对话框,点击“浏览”按钮,到C:\Program Files\Common Files\Moonlight文件夹中找到h264dec.ax滤镜,将其加入,这样Moonlight H.264 Video Decoder解码器就添加到暴风影音中。最后别忘了在“管理”页中将Moonlight H.264 Video Decoder设为“首选”。

支招:回放吃力的问题

试着播放刚才压缩的HDTV,暴风影音已能正常解码,画面也很精致,与源文件相比,画质损失很小,可就是太卡了!H.264非常考验CPU的运算能力。本来MPEG2格式的解码,就让许多CPU败下阵来,若无支持HDTV硬解压的显卡帮忙,非得有顶级的配置才能使播放较为流畅。而H.264的算法比MPEG2更复杂,如果纯软件解码,即使是目前顶级的配置,解码高分辨率H.264-HDTV也比较吃力。

还好,ATI和Nvidia都有支持H.264硬解码的GPU推出。ATI的R520即使在较低配置下,也可以流畅地解码H.264-HDTV,只是价位不那么平易近人。而Nvidia方面,因为Geforce6/7系列GPU都内建PureVideo视频引擎,只需升级PureVideo,即可使Geforce6/7系列支持H.264解码,这一点比较实惠。至于解码效率,虽不及采用纯硬件解码模式,但比纯软件解码还是强些。Nvidia称,在Forceware85的支持下,6600GT之后NvidiaGPU产品都可以全速解码1080p高清晰H.264视频。CES2006上曾有人用Geforce7800演示H.264解码,效果还不错。

H.264标准的由来

1998年,视频编码专家组(ITU-TVCEG)启动了H.26L工程,旨在研制新的视频编码压缩标准,要做到尽可能地简单直观,同时网络适应性要足够好,以适合广播、存储、流煤体等交互或非交互式应用。

2001年12月,VCEG和运动图像专家组(ISO/IECMPEG)组成联合视频组(JVT),在H.26L基础上研制出H.264/AVC编码标准,于2003年3月正式获得ISO/IEC批准。

在网络时代,视频往往要借助网络进行传播,这就要求一个好的视频方案能适应各种网络应用及网络类型。H.264/AVC无疑做到了这点。它包含两个层次:视频编码层(VCL)和网络抽象层(NAL),前者主要致力于有效地表示视频内容,后者则规范视频数据的格式,主要是提供头部信息,以适合各种媒体的传输和存储。

H.264/AVC的高压缩率及其优良的网络特性,使它可能在网络电话、视频点播、IPTV、视频会议、视频聊天、远程教学、广播电视、HDTV、流媒体服务、3GPP多媒体信息服务、视频邮件等方面得到广泛的应用。

 
H.264开源解码器评测

Peter Lee 2006.05.07 videosky.9126.com

2003年5月,当H.264编码标准草案发布时,很多人都觉得H.264太复杂,不宜实用。眨眼间3年过去了,以往的论断、疑惑被如今的现实冲洗的干干净净。随着硬件性能的提高和视频编码工作者对H.264的不断优化,如今的H.264已完全实用,最新的达芬奇芯片上能实现D1分辨率(720*480)视频的实时编码,而对于解码,普通的PC机就能实现x264编码的DVDrip电影的流畅播放。纵观过去的三年,有多少人对H.264倾注了热情和汗水才换来今天的成绩,而那些H.264的开源项目以及参与这些项目的开发者自然是功不可没。

本文评测的是作者接触过的H.264开源解码器,包括:JM
decoder, T264 decoder, x264 decoder, ffmpeg libavcodec, Intel IPP simple player。评测的内容有:对H.264特性的支持、解码速度以及二次开发难易程度。

一、H.264开源解码器介绍

1、JM
decoder

JM decoder是H.264的官方源码,通常也称为校验模型。其特点是支持特性好,实用性差。本文选用的程序是JM86,不支持high
profile,因为本文不对high profile部分进行实验比较。

NOTE: JM一直没有做实用化方面的努力,所以其解码速度代表的是2003年的水平。

2、T264
decoder

T264是国内的开源项目,T264
decoder的程序做过汇编优化,速度还可以,但只能解T264本身的码流。作者对T264 decoder version 0.14(2005-3-29)作了修改,支持baseline的解码。

3、x264
decoder

x264本没有decoder,但其包含decoder的部分函数雏形,猜想作者在一开始时是准备实现decoder,后来可能是因为有了ffmpeg,就放弃了这个想法(纯粹属于猜测,呵呵)。

本文的x264 decoder是作者在x264
svn check out 2005.12.26的基础上实现的,支持baseline的解码。

4、ffmpeg
libavcodec

ffmpeg是一个大项目,它包含各种音视频标准的codec,还支持各类file
format(.avi, .mp4, .mkv and etc)的parsing。所以,很多开源项目都有直接或间接地采用了ffmpeg,如mplayer播放器就是直接采用了ffmpeg,而mpc播放器则是先采用了ffdshow
filter,而ffdshow又采用了ffmpeg。ffmpeg是一个非常棒的音视频编解码库,支持的标准非常全,而且编解码速度也很快。

本文实验采用的是cvs check out 2006.02.20的版本,作者对其中的apiexample
demo进行了简单的修改,用于解码h.264码流

5、Intel
IPP simple player

Intel的IPP库,全称为Integrated
Performance Primitives,在Intel的各种处理器平台(IA-32, Itanium, xscale and etc)上实现了信号处理常用算法、常用数学运算及音视频编解码算法等等。IPP给我的第一感觉是,在Intel的处理器平台上,它实现的各种算法应该是最快的,至于实际结果如何,待等到实验比较后见分晓。

本文采用的IPP库版本为IA32
5.1.017 评估版

Intel IPP simple player是用于播放各种音视频文件的简单播放器,用c++实用,具体算法调用IPP库来实现。本文采用的simple
player版本是5.0.017

二、对于H.264特性的支持

1、JM86
decoder

support baseline, extended, main profile

2、T264
decoder

baseline

3、x264
decodeer

baseline

4、ffmpeg
libavcodec

support baseline, main profile, high profile except the feature: paff, mbaff…

5、Intel
IPP simple player

support baseline and main profile

【简单结论】

解码速度:ffmpeg > IPP simple player
> x264 decoder > t264 decoder > jm86 decoder

以ffmpeg的编码速度为基准,假设为100fps,则:

IPP simple player:90fps

x264 decoder:50fps

t264 decoder:30fps

jm86 decoder:3fps

五、程序开发上的比较

我估计阅读本文的大部分读者都是搞开发的,因此,阅读过程中自然会思考如何在程序开发上借鉴或者采用以上开源的H.264解码器,下面就针对程序开发上的难易、适用场合等作个比较。

1、JM86
decoder

适合写paper群体

2、T264
decoder

3、x264
decodeer

两者代码非常相似,所以就合在一起讲了。这两个源码的程序结构都比较清晰,支持vc和gcc的编译环境,但对H.264的特性支持不好,解码速度和ffmpeg相比,还有差距。

4、ffmpeg
libavcodec

程序结构比较差,H.264解码的代码基本上在h264.c一个文件中,这个文件有8000多行,不利于阅读。

编译环境为gcc或MinGW,移植到vc下比较难(我尝试过)。

解码速度快(BTW: 通过doom9论坛了解到,目前最快的h.264解码器是CoreAVC
decoder,比ffmpeg快50%左右)。

对于H.264特性的支持好。

5、Intel
IPP simple player

分两个方面讲:

(a)IPP库

我觉得是非常棒的,但实现的是H.264解码(IPP中也有H.264编码)的一些关键函数,如deblock,dct,插值补偿等,不能直接拿来用。

其它的缺点:IPP库是商业软件,要money的,而且只支持Intel平台

(b)simple
player

开源,用c++写的,而且是directshow编程,也就是说只支持windows平台。

其解码速度比ffmpeg慢10%左右,我觉得原因不在于IPP库,而是simple
player的代码不够完善。

【图像处理】H.264开源解码器评测的更多相关文章

  1. H.264开源解码器评测

    转自:http://wmnmtm.blog.163.com/blog/static/38245714201142883032575/ 要播放HDTV,就首先要正确地解开封装,然后进行视频音频解码.所以 ...

  2. FFmpeg的H.264解码器源代码简单分析:解析器(Parser)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  3. h.264并行解码算法分析

    并行算法类型可以分为两类 Function-level Decomposition,按照功能模块进行并行 Data-level Decomposition,按照数据划分进行并行 Function-le ...

  4. 【H.264/AVC视频编解码技术具体解释】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据

    <H.264/AVC视频编解码技术具体解释>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战project的形式对H.2 ...

  5. 7. H.264的句法和语义

    1.句法 在编码器输出的码流中,数据的基本单位是句法元素,每个句法元素由若干比特组成,它表示某个特定的物理意义,例如:宏块类型.量化参数等. 句法表征句法元素的组织结构,语义阐述句法元素的具体含义. ...

  6. <开源项目分析>Cisco的开源视频加解码器THOR(H.264解码)

    原创博客,转载请联系博主! 题外话:自学了快两个月的Perl语言,本来打算写两篇基础介绍的博文来科普一下一些小技巧,但是仔细想想还是没有必要了吧,毕竟现在无论是在用Perl5还是Perl6的人都是小众 ...

  7. FFmpeg的H.264解码器源代码简单分析:环路滤波(Loop Filter)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  8. FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧间宏块(Inter)

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  9. FFmpeg的H.264解码器源代码简单分析:熵解码(Entropy Decoding)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

随机推荐

  1. Unrecognized SSL message, plaintext connection? 将https 换为http 即可

    请求链接:https://59********* 升级后的项目地址有https换为了http  ,出现这个错误,改为http请求即可

  2. tomcat使用实践三种运行模式之apr

    tomcat有三种运行模式 nio,bio,apr bio是阻塞式IO操作,使用的是传统的java i/o处理方式,对于每一个请求都要创建一个线程来进行处理,所以开销较大不适合处理高并发的场景 nio ...

  3. 牛券Cow Coupons

    USACO12FEB 久违的奶牛题. 题意: FJ准备买一些新奶牛,市场上有 $ N $ 头奶牛 $ (1 \leq N \leq 50000) $ ,第i头奶牛价格为 $ P_i (1 \leq P ...

  4. django 问题总结(八)

    1.第一步创建项目,不成功,命令不报错一直不创建文件夹 django-admin.py startproject mysite2 原因: django-admin.py ,py文件的默认打开方式不对, ...

  5. 软件开发中什么是CI/CD

    持续集成(Continuous integration)是一种软件开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误. 持续部署(continuous d ...

  6. 微信小程序swiper禁止用户手动滑动

    最近做一个项目,由于用到了竖向swiper,导致占用屏幕过大,用户滑动总是滑动到swiper组件,页面无法向下拉动,于是找各种办法禁止用户手动滑动swiper组件. 经过网上一番查找,网友们也是闹洞大 ...

  7. iTerm2使用Profiles自动登录

    http://blog.csdn.net/wandershi/article/details/75088310 1.创建Profiles文件 cd ~/.ssh/iTerm2SSH/ vi 172.1 ...

  8. 第11组 团队Git现场编程实战

    第11组 团队Git现场编程实战 组员职责分工: 前端部分: 陈郑铧:构架的搭建,前端模块开发 陈益:前端模块开发 李镇平:前端模块开发 后端部分: 沈国煜:后端模块开发 王泽鸿:后端模块开发 林铮威 ...

  9. phpstorm配置了git后Terminal 不能使用显示:git' 不是内部或外部命令,也不是可运行的程序

    问题:在phpstorm上配置好git后,将代码拉了下来 ,但是命令行无法使用显示如图 解决方法:①找到安装git的位置,然后在该目录的子目录下分别找到git-core.bin 两个目录,我的安装在了 ...

  10. SpringCloud(一)之微服务核心组件Eureka(注册中心)的介绍和使用

    一 Eureka服务治理体系1.1 服务治理服务治理是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现. Spring Cloud Eureka是Spring Clou ...