博客
关于我
H264(9)---------h264面试题
阅读量:140 次
发布时间:2019-02-28

本文共 2258 字,大约阅读时间需要 7 分钟。

为什么要有YUV这种数据出来?(YUV相比RGB的优点)

YUV是一种用于视频编码和处理的像素格式,主要用于描述图像的亮度(Y)和色彩信息(U和V)。YUV与RGB的主要区别在于:

  • 存储空间优化

    • 除了YUV444外,其他格式(如YUV422、YUV420、YUV411)在存储空间上都比RGB格式占用更少。
    • YUV444与RGB格式占用的存储空间相同,但其它YUV格式的存储需求远低于RGB。
  • 色彩模型与编码效率

    • YUV的色彩模型基于YCbCr,Y表示亮度,U和V分别表示绿色和红色分量。
    • 与RGB格式相比,YUV的色彩信息编码效率更高,能够在更少的数据量下传达高质量的图像信息。
  • H264与H265的主要区别

    H264和H265(HEVC)是主流的视频编码标准,两者在压缩效率和技术特性上有显著差异:

  • 分辨率和压缩能力

    • H264的压缩率相比H265理论上较低,H265的压缩率通常能达到H264的1.5倍至2倍。
  • 宏块划分

    • H264宏块尺寸固定为16x16。
    • H265宏块尺寸根据视频内容的变化幅度动态调整,支持从8x8到64x64的多种分辨率。
  • 运动编码能力

    • H265支持更复杂的运动编码技术,能够在相同压缩率下实现更好的运动预测和补偿效果。
  • 格式容容性

    • H265支持更宽广的色彩范围和更高的动态范围,适合高动态和广色域视频内容。
  • 平常电视的帧率通常是多少?

    • 标准电视:通常以25帧/秒(25Hz)为帧率,适用于黑白电视和早期彩色电视。
    • 高清电视:帧率通常为60帧/秒(60Hz),以提升画面流畅度和清晰度。
    • 游戏与动画:帧率通常为30帧/秒(30Hz),以支持较高的画面更新频率。

    SPStm的作用

    SPStm(Slice Parameter Set)在H264/H265视频编码中承担以下重要功能:

  • Profile和Level的解析

    • Profile决定了视频的压缩级别和支持的编码特性。
    • Level决定了视频的最大分辨率和比特率。
  • 视频尺寸的计算

    • Pic_width_in_mbs_minus1和Pic_height_in_mbs_minus1可用于计算视频的宽度和高度。
  • 帧率控制

    • Frame_mbs_only_flag用于标识帧编码与场编码的区别。
    • Log2_max_frame_num_minus4可用于计算最大GOP(Group of Pictures)数量。
    • Max_num_ref_frames可用于确定参考帧的数量。
  • 颜色平面和场编码信息

    • Separate_color_plane_flag和Color_plane_id用于标识颜色分量的分离和位置。
    • Field_pic_flag和Bottom_field_flag用于场编码信息。
  • IDR帧检测

    • Idr_pic_id用于标识独立决断帧(Intra-Display Refresh),用于减少闪烁现象。
  • PPS的作用

    PPStm(Picture Parameter Set)在H264/H265编码中主要负责以下功能:

  • 熵编码控制

    • 确定是否启用权重预测(Weighted prediction),优化压缩效率。
  • 分片处理

    • 确定分片的解码顺序和量化参数。
  • 纵向预测控制

    • 调整纵向预测器的参数,优化预测性能。
  • Slice Header的作用

    Slice Header用于定义解码顺序和分片信息,具体包括:

  • 解码顺序

    • Slice Header中定义了当前分片的解码顺序和位置。
  • 颜色分量信息

    • Separate_color_plane_flag用于标识颜色分量的分离。
    • Color_plane_id用于指定当前分片的颜色分量。
  • 场编码信息

    • Field_pic_flag和Bottom_field_flag用于标识场编码信息。
  • IDR帧信息

    • Idr_pic_id用于标识独立决断帧。
  • H264的编解码框架

    H264的编解码框架包括以下主要步骤:

    编码流程

  • 帧内预测(Intra prediction)

    • 对于I帧,使用帧内纵向预测生成预测块。
  • 残差编码

    • 计算当前帧与参考帧之间的残差。
  • 变换和量化

    • 对残差进行变换编码,量化并生成量化表。
  • 熵编码

    • 对量化表和其他信息进行熵编码。
  • NALU编码

    • 将编码数据组织为NALU(Network Abstraction Layer Unit)单元。
  • 解码流程

  • 熵解码

    • 解码生成的量化表和其他信息。
  • 逆量化

    • 根据量化表恢复原始残差。
  • 变换反转换

    • 进行逆变换,恢复原始图像数据。
  • 帧重构

    • 结合预测和残差,恢复原始帧并进行滤波处理。
  • H264的码流结构

    H264的码流结构基于NALU单元,主要包括以下组成部分:

  • NALU Header

    • 1字节的NALU Header,包含重要性标志位和NALU类型。
  • NALU Body

    • 包含RBSP数据。
    • RBSP数据通过SODB(Sparse Transform of Bytes)存储,通常以1字节的填充位和多个0结尾形成RBSP。
  • Slice Header

    • 定义解码顺序、颜色分量信息等。
  • Slice Data

    • 包含宏块数据,包括宏块类型、预测信息和残差值。
  • PPI与DPI的定义

    • PPI(Pixels per Inch):表示屏幕每英寸上的像素数量。

    • DPI(Dots per Inch):表示屏幕每英寸上的点数,通常用于打印和显示设备。

    • 300 PPI:表示屏幕像素密度达到视网膜水平,能够提供视觉舒适的显示效果。

    转载地址:http://rucc.baihongyu.com/

    你可能感兴趣的文章
    MySQL 有什么优点?
    查看>>
    mysql 权限整理记录
    查看>>
    mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
    查看>>
    MYSQL 查看最大连接数和修改最大连接数
    查看>>
    MySQL 查看有哪些表
    查看>>
    mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
    查看>>
    MySql 查询以逗号分隔的字符串的方法(正则)
    查看>>
    MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
    查看>>
    mysql 查询数据库所有表的字段信息
    查看>>
    【Java基础】什么是面向对象?
    查看>>
    mysql 查询,正数降序排序,负数升序排序
    查看>>
    MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
    查看>>
    mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
    查看>>
    mysql 死锁(先delete 后insert)日志分析
    查看>>
    MySQL 死锁了,怎么办?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 添加列,修改列,删除列
    查看>>
    mysql 添加索引
    查看>>
    MySQL 添加索引,删除索引及其用法
    查看>>