本文主要是介绍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 压缩图像初体验记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!