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

相关文章

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定