VTM 压缩图像初体验记录

2023-10-10 02:10

本文主要是介绍VTM 压缩图像初体验记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

VVC编码程序入门超详细教程——VTM从源码下载到编码CU划分结果可视化_暴躁的豌豆射手的博客-CSDN博客
VTM配置并使用VTM对YUV视频帧进行编解码(基于windows系统)_B gorgeous的博客-CSDN博客
​​​​​​VTM配置并使用VTM对YUV视频帧进行编解码(基于windows系统)_B gorgeous的博客-CSDN博客

 

...其实蛮多的,我随机列几个

POC 时域播放第一帧,

TId(temporal id 时域层序号,一个帧只能参考时域层低于他的帧,不能参考更高层的帧)

27456是整张图像的比特数--总比特数,YUV各自的PSNR值

bpp的话就是这个除以图像大小

第二行Total Frames | 的Bitrate其实就是上面的27456,不过这里是以字节为单位,也就是34.32KB,换成字节再乘以8 就等于 27456

rec.yuv 是编码后的重建帧

str.bin 是编码后的码流

 

使用 ffmpeg 将 yuv 文件转换为 .jpg 文件

 ffmpeg -s 500x333 -pix_fmt yuv444p -i "C:\Program Files\VVCSoftware_VTM-master\VVCSoftware_VTM-master\test\rec.yuv" -vframes 1 "C:\Program Files\VVCSoftware_VTM-master\VVCSoftware_VTM-master\test\dec.jpg"

ffmpeg -s wxh =-pix_fmt yuv444p -i inputfile_path -vframes 1 outputfile_path

使用ffmpeg将原图转换为yuv文件,再使用ffmpeg将其还原会jpg,图像正常 

 

但是,经过vtm压缩后的yuv文件使用ffmpeg没有办法还原回原图

究其原因,在encoder_intra_vtm.cfg文件中,

 那个codec operating bit-depth本来是10位,改成8以后,这件事就解决了。。。

---------------------------

另一个(简单)方法,opencv,cv2.cvtColor(),opencv支持的色彩空间,转换色彩空间只需要一条指令调api

OpenCV: Color Space Conversions

然后新的问题出现了,opencv不支持直接读 yuv文件。。。于是找了半天,大约是按字节文件啥的把YUV格式读进来,然后作为一个数组(图像)输到opencv里去转

这件事实有些麻烦。。。没做

------------文件解释

参照一些vtm压缩blog做的,有一些是写了text.bat文件,然后同时生成了str.bin和recon.yuv

因为参数里包含了解压缩的过程

也看到blog把这两部分分开做,也就是压缩的时候,用EncoderAPP,解压的时候用DecoderAPP 

所以我的文件目录里包括了dec.yuv和rec.yuv

批处理的是用Encoder,然后生成的记录会在enc.txt里

Decoder就会产生decoder对应的文件

总的流程大概是,

1、选择压缩的cfg文件,几种压缩模式,这边是encoder_intra_vtm.cfg

str.bin就是想还原的bitstream的名称,rec.yuv就是重建的,按需更改,不是必要

 最简单的改qp,就是改QP,范围在0-51,数值越大,量化越多,比特率越小,psnr越差。

其余的修改,可能需要更多的编码知识

 还有这个,默认是10。

 在不费脑子的情况下,直接用ffmpeg将yuv转回普通图像格式的话,就把这改回8吧,10的话应该有对应的操作方式,需要进一步的学习

Notes:很多人把测试序列的cfg内容沾到这儿来,实测,不需要

2、压缩序列cfg

在per-sequence里给了一些参考的cfg

我把图像从jpg通过ffmpeg转到了yuv444p下,所以参考的是 Doc_444.cfg

 

如图,把这个复制到那个test的文件夹下,InputFile后面改成待压缩Yuv路径

后面的只用改FramesToBeEncoded(我这里是图像,所以就是1)其他不用动,这个才对应EncoderAPP属性里的内容

3、EncoderAPP 属性

 就是说不用把测试序列里的内容粘到encoder_intra_vtm里面去,粘过去的话,这个属性设置就不适用了

这篇关于VTM 压缩图像初体验记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/177189

相关文章

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

qtcreater配置opencv遇到的坑及实践记录

《qtcreater配置opencv遇到的坑及实践记录》我配置opencv不管是按照网上的教程还是deepseek发现都有些问题,下面是我的配置方法以及实践成功的心得,感兴趣的朋友跟随小编一起看看吧... 目录电脑环境下载环境变量配置qmake加入外部库测试配置我配置opencv不管是按照网上的教程还是de