当前位置: 首页 > news >正文

H264几个参数说明

注:文章来源为我的笔记

sps、pps计算宽高:

// 宽高计算公式
width = (sps->pic_width_in_mbs_minus1+1) * 16;
height = (2 - sps->frame_mbs_only_flag)* (sps->pic_height_in_map_units_minus1 +1) * 16);
// 是否需要进行图像剪切 
if(sps->frame_cropping_flag)
{unsigned int crop_unit_x;unsigned int crop_unit_y;if (0 == sps->chroma_format_idc) // monochrome{crop_unit_x = 1;crop_unit_y = 2 - sps->frame_mbs_only_flag;}else if (1 == sps->chroma_format_idc) // 4:2:0{crop_unit_x = 2;crop_unit_y = 2 * (2 - sps->frame_mbs_only_flag);}else if (2 == sps->chroma_format_idc) // 4:2:2{crop_unit_x = 2;crop_unit_y = 2 - sps->frame_mbs_only_flag;}else // 3 == sps.chroma_format_idc // 4:4:4{crop_unit_x = 1;crop_unit_y = 2 - sps->frame_mbs_only_flag;}width -= crop_unit_x * (sps->frame_crop_left_offset + sps->frame_crop_right_offset);height -= crop_unit_y * (sps->frame_crop_top_offset + sps->frame_crop_bottom_offset);
}

level级别计算:

比如分辨率:1920x1080, 参考帧率:60 的 h264 码流是哪个 level 呢?

H.264 的宏块大小为 16×16,每帧宏块的个数为分辨率除以 16

  • max-fs = ceil( width / 16.0 ) * ceil( height / 16.0 )

计算得:8100

每秒宏块数量为每帧宏块数乘以帧率.

  • max-mbps =max-fs * 参考帧率 (60)

计算得:486000

质量参数控制:

1.QP(Quantization Parameter)量化参数,支持设置最大值和最小值范围,取值(0 ~ 51),QP 值越小,量化误差越小,视频质量越高,码率也会越大;QP 值越大,量化误差越大,视频质量越低,但码率越小。

2.CQP(Constant  Quantization Parameter)恒定量化参数,设置后每一帧都使用相同的 QP 值。使用CQP模式时,设置的最大最小QP值范围无效。

3.CRF(Constant Rate Factor)恒定质量因子(x264编码器提供),通常取值18 ~ 28之间(和QP一样),CRF 模式会根据帧的内容复杂度动态调整 QP 值。例如,对于运动较多的帧,QP 值会增加;对于静止或运动较少的帧,QP 值会减小,从而保持整个视频的主观质量恒定,而不是每帧的质量恒定。使用CRF模式时,设置的最大最小QP值范围仍然有效,并可以更精细的控制QP值调整范围。

4.preset参数(x264编码器提供)

取值(速度由快到慢):ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow and placebo。编码越快,输出图像质量越差。

http://www.dtcms.com/a/360352.html

相关文章:

  • 大话 IOT 技术(4) -- 答疑篇
  • [光学原理与应用-355]:ZEMAX - 设置 - 系统检查与系统测试
  • k8s三阶段项目
  • 物理气相沉积(PVD)技术及应用现状和发展趋势
  • FreeRTOS深入理解
  • 数据库索引abc,请问查询哪些字段能命中索引
  • 平滑滤波器(Smooth Filter)的MATLAB与Verilog仿真设计与实现
  • 关于Ctrl+a不能全选的问题
  • 封装哈希表
  • 机器视觉opencv教程(四):图像颜色识别与颜色替换
  • 【开题答辩全过程】以 基于SpringBoot的流浪猫狗领养系统为例,包含答辩的问题和答案
  • C语言中如何使用NULL
  • 【Linux】系统部分——ELF文件格式与动态库加载
  • Asible管理变量和事实和实施任务控制
  • 科学研究系统性思维的方法体系:研究设计相关模版
  • 【Unity3D实例-功能-切换武器】切换武器(一)动画配置
  • IAR 用JLINK 下载代码设置步骤
  • FLEXPART 拉格朗日粒子扩散模式建模技术及研究大气污染物源-汇关系中的实践
  • 订餐后台管理系统-day06菜品分类模块
  • 工业软件领域SAAS模式为何不能得到普及?
  • 上海交大具身导航中的感知智能、社会智能和运动智能全面综述
  • 网络端口与服务对应表 - 白帽子安全参考指南
  • Android开发-设计规范
  • 安装proteus,并实现stm32仿真
  • 当 AI 开始 “筛选” 信息:算法偏见会加剧认知鸿沟吗?如何构建公平的 AI 生态?
  • 深入解析 Oracle 并发与锁机制:高并发环境下的数据一致性之道
  • Log File Sync等待事件分析
  • linux日志同步
  • strtok()字符串分隔函数
  • OpenStack 01:介绍