H.264和H.265的区别是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了H.264和H.265的区别是啥相关的知识,希望对你有一定的参考价值。

H.265是新的编码协议,也即是H.264的升级版。H.265标准围绕着现有的视频编码标准H.264,保留原来的某些技术,同时对一些相关的技术加以改进。H.264可以低于1Mbps的速度实现标清数字图像传送;H.265则可以实现利用1~2Mbps的传输速度传送720P 普通高清音视频传送。同样的画质 ,H.265比H2.64 占用的存储空间少50%。H.265标准在同等的内容质量上会显著减少带宽消耗。

拓展资料

H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式。H.264,同时也是MPEG-4第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。

参考技术A 首先,由于分辨率的大大增加,单个宏块所表示的图像内容信息大大减少,H.264所采用的4×4或8×8宏块经过整数变换后,低频系数相似程度也大大提高,出现大量冗余,导致H.264编码对高清视频的压缩效率明显降低;其次,H264算法宏块个数的爆发式增长,会导致每个编码宏块的预测模式、运动矢量、参考帧索引和量化级等宏块级参数信息占用更多码流资源,在有限带宽中,分配给真正描述图像内容的残差系数信息的可用带宽明显减少了;由于分辨率的提高,表示同一个运动的运动矢量幅值也将大大增加,H.264中采用基于空间域的运动矢量预测方式,对运动矢量差编码使用的是哥伦布指数编码,该编码方式的特点是数值越大使用的比特数越多,因此,随着运动矢量幅值的大幅增加,H264中用来对运动矢量进行预测以及编码的压缩率也将逐渐降低;最后,H.264的一些关键算法都要求串行编码,并行度比较低,针对GPU/DSP/FPGA/ASIC等并行化程度非常高的CPU,H.264的这种串行化处理越来越成为制约运算性能的瓶颈。
相对于H.264的4×4、8×8、16×16宏块类型,H.265引入了32×32、64×64甚至于128×128 的宏块,目的在于减少高清数字视频的宏块个数,减少用于描述宏块内容的参数信息,同时整形变换块大小也相应扩大,用于减少H.264中变换相邻块问的相似系数。 使用新的MV(运动矢量)预测方式。区别于H.264基于空间域的运动矢量预测方式,H.265扩充更加多的方向进行帧内预测,同时将预测块的集合由原来的空间域扩展到时间域及空时混合域,通过率失真准则计算后选择最佳的预测块。使用该方法,在基本模式下测试,在与H.264相同质量的情况下,得到平均为6.1%的压缩增益,复杂图像的压缩增益甚至能提高到20%。更多的考虑并行化设计。当前芯片架构已经从单核性能逐渐往多核并行方向发展,H.265引入了Entropy slice、WPP 等并行运算思路,使用并行度更高的编码算法,更有利于H.265在GPU/DSP/FPGA/ASIC等并行化程度非常高的CPU中快速高效的实现产业化。
参考技术B   H.265是新的视频编码标准,是H.264升级版
  H.265改善码流、编码质量、延时和算法复杂度之间的关系,达到最优化设置。
  具体内容:提高压缩效率、提高鲁棒性和错误恢复能力、减少实时的时延、减少信道获取时间和随机接入时延、降低复杂度等。
  可以低于1Mbps的速度实现标清数字图像传送;H265则可以实现利用1~2Mbps的传输速度传送720P(分辨率1280*720)普通高清音视频传送。
参考技术C H.265是ITU-T VCEG 继H.264之后所制定的新的视频编码标准。H.265标准围绕着现有的视频编码标准H.264,保留原来的某些技术,同时对一些相关的技术加以改进。新技术使用先进的技术用以改善码流、编码质量、延时和算法复杂度之间的关系,达到最优化设置。具体的研究内容包括:提高压缩效率、提高鲁棒性和错误恢复能力、减少实时的时延、减少信道获取时间和随机接入时延、降低复杂度等。H264由于算法优化,可以低于1Mbps的速度实现标清数字图像传送;H265则可以实现利用1~2Mbps的传输速度传送720P(分辨率1280*720)普通高清音视频传送。 参考技术D H.265是目前比较新的视频压缩编码,算是H.264的升级。
H.264上目前比较主流的压缩算法,视频会议设备、行车记录仪、监控等一般都采用这个编码格式。基础的H.264可以支持在1M带宽下传输720P30帧/秒的图像;H.264 HIGH PROFILE支持在512K带宽下传输720P30帧/秒的视频。
H.265可以进一步提高压缩比,随着现在生活中出现的视频格式越来越大(比如现在基本都是1080P甚至4K的显示器,4K片源将来也会越来越多),就需要像H.265这样的新压缩算法,提高效率、节约带宽或存储空间。H.265支持在384K带宽下传输720P30帧/秒的视频。

在处理单独的 .cpp 和 .h 文件中的类时,实现继承的正确方法是啥?

【中文标题】在处理单独的 .cpp 和 .h 文件中的类时,实现继承的正确方法是啥?【英文标题】:What is the correct way to implement inheritance when dealing with classes in separate .cpp and .h files?在处理单独的 .cpp 和 .h 文件中的类时,实现继承的正确方法是什么? 【发布时间】:2021-03-25 14:00:09 【问题描述】:

我是 C++ 新手,为了练习,我决定编写一个简单的控制台游戏。我最初将它全部写在 main.cpp 文件中,但现在我决定将所有类拆分以使其更易于阅读。我查阅了一些关于如何正确执行此操作的教程,但似乎遇到了一个我无法找到解决方案的错误。

这是一个“块”的基类。不同材质的方块继承自这个基础方块。

这是头文件的代码:

#pragma once
#include <iostream>

class BaseBlock  //Base block class
private:
    int PosX, PosY;
protected:
    std::string Appearance;
    bool        IsActive;

public:
    BaseBlock(int x, int y);

    virtual inline int          getX();
    virtual inline int          getY();
    virtual inline bool         getIsActive();
    virtual inline std::string  getAppearance();
    virtual inline void         setActive(bool isactive);

;

这是它的 .cpp 文件:

 #include "clsBaseBlock.h"



    BaseBlock::BaseBlock(int x, int y) 
        PosX        = x;
        PosY        = y;
        Appearance  = ' ';
        IsActive    = false;
    

    inline int          BaseBlock::getX()                    return PosX; 
    inline int          BaseBlock::getY()                    return PosY; 
    inline bool         BaseBlock::getIsActive()             return IsActive; 
    inline std::string  BaseBlock::getAppearance()           return Appearance; 
    inline void         BaseBlock::setActive(bool isactive)  IsActive = isactive; 

这是其中一个派生类的标头代码:

 #pragma once
#include "clsBaseBlock.h"

class BlockWeak : public BaseBlock  // Third derived block class
public:
    BlockWeak(int x, int y) : BaseBlock(x, y)  //Here is the inheritance
;

这是它的 .cpp 文件:

  #include "clsBlockWeak.h"

BlockWeak::BlockWeak(int x, int y): BaseBlock(x,y)
        Appearance = "\xB1";
        IsActive = true;
    

从这段代码中,我在派生类的头文件中得到了各种错误,例如:

-语法错误:“符号”:预期的成员函数定义以“”结尾 - 在基/成员初始化列表中尾随 'char' 非法

然后在 .cpp 文件中我得到:

-type "int" 出乎意料 - 发现文件的意外结尾

任何有关如何更正我的代码的信息将不胜感激。

【问题讨论】:

您已经在标题中定义了BlockWeak 的构造函数,然后在源代码中再次定义。如果没有继承和单个文件中的所有代码,那也是错误的 您遇到的确切错误是什么? Edit 问题,然后粘贴编译器输出的 exact 错误,包括错误的行号。如有必要,请在问题的代码中指出这些行的位置。 inline 表示该函数可能在多个翻译单元中具有定义。所有成员函数都隐含为inline。它与函数 calls 的内联没有任何关系,并且没有必要将它洒在你的代码中。 您需要按每个文件中出现的顺序修复错误。一个非常小的问题,例如缺少分号或不匹配的大括号,可能会导致大量难以理解的后续错误。 无关:为什么 #include &lt;iostream&gt;clsBaseBlock.h 中?该文件中不需要它。只在头文件中包含需要的内容。 【参考方案1】:
BlockWeak(int x, int y) : BaseBlock(x, y)  //Here is the inheritance

不,不是。 这里是继承:

class BlockWeak : public BaseBlock

以下是构造函数的完整定义,您也在 .cpp 文件中提供了它,因此可能会违反单一定义规则

BlockWeak(int x, int y) : BaseBlock(x, y)  

您可能应该删除从: 开始的部分,包括,并将它们移到定义中

【讨论】:

虽然这是代码的问题,但不是问题中语法错误的原因。 非常感谢。那成功了。现在一切正常。

以上是关于H.264和H.265的区别是啥的主要内容,如果未能解决你的问题,请参考以下文章

H.264编码器和H.265编码器有啥区别?

H.265标准与H264标准有啥区别

H264与H265相关区别了解

avc(H.264,高级视频编码,Advanced Video Coding,x264)和hevc(h.265,高效率视频编码,High Efficiency Video Coding,x265)区别

avc(H.264,高级视频编码,Advanced Video Coding,x264)和hevc(h.265,高效率视频编码,High Efficiency Video Coding,x265)区别

H.265---区别于H.264的地方