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

【HEVC视频流可视化分析工具】画出视频中每帧的CTU块的形状与深度——v1.0

文章目录

    • 一、介绍
    • 二、使用说明
      • 1、日志代码示例
    • 三、使用样例:
    • 四、后续功能展望

一、介绍

该【HEVC视频流可视化分析工具】的效果如下:可以画出一帧中CTU的形状或者说是深度信息,根据这附图我们可以更清晰的分析我们当前的算法对于深度的影响情况。

二、使用说明

  • 该【HEVC视频流可视化分析工具】的第一版,需要配合日志使用,配备了完整的日志解析方法;

  • 在使用时需要使用命令行指定日志文件,自动分析日志,提取CTU深度信息,然后生成可视化图片;

  • 日志格式要求如下:

    x265[debug]:MODEAll:poc0,ctu7,All4x4 partition depth values:3333333333333333333333333333333322222222222222223333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
    • MODEAll:为匹配模式,可以使用 -p 指定
    • “poc 0, ctu 7, All 4x4 partition depth values:”:该格式必须要有,其他没有限制

1、日志代码示例

如果只是为了看一下最终编码的CTU形状,我们可以在 source/encoder/frameencoder.cpp 中添加如下代码:

if(m_param->bCTUInfoLog){std::stringstream depthStr;intdepthCnt[4]={0};for(uint32_ti=0;i<m_param->num4x4Partitions;i++){intdepth=ctu->m_cuDepth[i];depthCnt[depth]++;if(i>0){depthStr<<" ";// 非首个元素前加空格分隔}depthStr<<depth;}x265_log(NULL,X265_LOG_DEBUG,"MODE: poc %d, ctu %d, depthCnt %d, %d, %d, %d\n",m_frame[layer]->m_poc,ctu->m_cuAddr,depthCnt[0],depthCnt[1],depthCnt[2],depthCnt[3]);x265_log(NULL,X265_LOG_DEBUG,"MODEAll: poc %d, ctu %d, All 4x4 partition depth values: %s\n",m_frame[layer]->m_poc,ctu->m_cuAddr,depthStr.str().c_str());}

样例:
下文样例使用x265编码器,更多的x265源码解析可以参考我的另一篇文章:【X265编码器】源代码分析——第一章 编码器主干部分
compressCTU() 为压缩一个CTU,计算完成后,直接将深度depth信息输出即可;

voidFrameEncoder::processRowEncoder(intintRow,ThreadLocalData&tld,intlayer){......// Does all the CU analysis, returns best top level mode decisionMode&best=tld.analysis.compressCTU(*ctu,*m_frame[layer],m_cuGeoms[m_ctuGeomMap[cuAddr]],rowCoder);if(m_param->bCTUInfoLog){std::stringstream depthStr;intdepthCnt[4]={0};for(uint32_ti=0;i<m_param->num4x4Partitions;i++){intdepth=ctu->m_cuDepth[i];depthCnt[depth]++;if(i>0){depthStr<<" ";// 非首个元素前加空格分隔}depthStr<<depth;}x265_log(NULL,X265_LOG_DEBUG,"MODE: poc %d, ctu %d, depthCnt %d, %d, %d, %d\n",m_frame[layer]->m_poc,ctu->m_cuAddr,depthCnt[0],depthCnt[1],depthCnt[2],depthCnt[3]);x265_log(NULL,X265_LOG_DEBUG,"MODEAll: poc %d, ctu %d, All 4x4 partition depth values: %s\n",m_frame[layer]->m_poc,ctu->m_cuAddr,depthStr.str().c_str());}......}

三、使用样例:

python3 analysis_draw_ctu copy.py-v blue_sky_360p25-crf-new-26.ts-f blue_sky_360p25-crf-new-26.log-o output-p MODEAll
用法:analysis_draw_ctu.py-v<视频路径>-f<日志路径>[-o<输出目录>][-p<匹配模式>]选项:-v,--video:视频文件路径(必需)-f,--file:日志文件路径(必需)-o,--output:输出目录(默认:output)-p,--pattern:日志匹配模式(默认:MODEAll)

四、后续功能展望

  • 画出PU形状
  • 画出运动矢量方向,如下:
  • CU分布比例
  • 欢迎大家补充…

关注文末公众号《码流之上》,回复关键词 “HEVC可视化工具”,即可获取该工具使用分析,其中还提供了编译好的x265编码器来配套使用,欢迎大家使用测试,有特殊需求可以反馈修改~

若本文对您有所帮助,欢迎​点赞收藏​,并​关注文末公众号​!后续将在公众号持续分享​​ 音视频核心技术🎬​~

http://www.jsqmd.com/news/447212/

相关文章:

  • 力扣2615. 等值距离和
  • 使用python编程贪吃蛇单机小游戏(超详细讲解)
  • 倒立摆系统控制器设计报告
  • FTP服务器部署(vsftpd)
  • 贝叶斯分类
  • uniapp token过期的几种常见处理方案
  • ubuntu+windows双系统恢复
  • 7.28 进制交换|迭代器模式|map|子集按位或|带参递归
  • Elasticsearch-SQL终极指南:如何用SQL轻松查询Elasticsearch日志数据
  • 扫码枪写入案例。关于js原生聚焦以及扫码枪原理
  • 中医药方剂大模型开发方案
  • Qt/C++运行报错:exited with code -1073741819
  • iOS分页标签栏终极性能优化:快速解决XLPagerTabStrip滚动卡顿问题
  • 基于新型群智能优化算法的BP神经网络初始权值与偏置优化
  • 科研智能体平台设计与实现:社科类研究支持系统
  • RT-Thread ESP-Hosted
  • durable_rules模式匹配技术:DFA编译如何实现纳秒级字符串处理
  • local-web-server性能优化指南:让你的开发服务器飞起来
  • Flutter响应式管理面板AI功能集成:智能分析与自动化操作终极指南
  • 生产车间班组长绩效考核方案优化与绩效提升策略
  • 记录踩过的坑-金蝶云·苍穹平台-页面开发
  • 自平衡摩托车控制系统设计:Python实现方案
  • Ease高级特性:动态更新targetValue实现实时动画轨迹调整
  • 如何用Jspreadsheet CE快速创建动态数据表格:从数组到JSON的实战指南
  • REINFORCE、Remax、GRPO、DR.GRPO、DAPO、REINFORCE++、GPG、OPO、GSPO、SAPO、CLIP-COV、VC-PPO、VAPO对比
  • 微信小程序单元测试与集成测试完整指南:从入门到实战
  • (算法题)N个数求和
  • Flutter响应式管理面板终极容器化部署指南:Docker与Kubernetes实践
  • Clojure-lsp完全指南:从安装到精通的10个核心步骤
  • 终极指南:5个BackstopJS测试报告定制技巧与品牌化实战