最近在学习JVET下的360Lib测试平台。
不多废话,先把网址贴出来,再谈详细的……
JVET主页:https://jvet.hhi.fraunhofer.de/
JVET测试平台:https://jvet.hhi.fraunhofer.de/svn/svn_HMJEMSoftware/
360Lib测试平台:https://jvet.hhi.fraunhofer.de/svn/svn_360Lib/
JVET与H.266编码技术:http://blog.csdn.net/fan2273/article/details/79527249
下载:https://download.csdn.net/download/fan2273/10281796
首先,简单介绍一下JVET专家组。
了解视频编解码的,应该都知道MPEG专家组。MPEG专家组负责研究、制定、维护业界的视频图像领域标准与规范,沿用至今的许多视频编码格式都是由他们制定。
MPEG专家组下,亦有很多个不同方向的分支小组,分别负责细致领域的研究。其中,HEVC(H.265)便是由MPEG和VCEG的视频组联合开发的项目。
JVET与HEVC很像,他同样是由MPEG和VCEG专家组组成的一个项目、研究小组。HEVC研发维护的是H.265编码技术,而JVET则同时维护研发两套方案和平台。
JVET,全称联合视频探索小组,是未来视频压缩、编解码技术的研究小组。JVET负责研发、维护JEM(H.266)测试平台与360Lib(全景投影)测试平台。
H.266是在H.265基础上发展的新一代视频压缩技术。其压缩率比H.265提高20%,但复杂度亦提升了数倍。像HEVC提供的H.265测试平台HM(HEVC Model)一样,JVET针对H.266提供了JEM测试平台,以供研究者对H.266压缩编解码技术进行测试与研究。
由于重点在于360Lib,因此,关于JVET的JEM平台,这里不做过多展开,相关的介绍可以在项目内文档与官方站点中找到。
360Lib
360Lib是JVET针对全景视频的测试平台(软件)。
360Lib在JVET下由Subversion代码托管维护。使用者需下载Subversion客户端,进行代码下载与版本控制。
360Lib主要完成的是全景视频的投影工作。360Lib可作为插件,集成到HM与JEM之中,亦可单独运行。其中区别主要在于,转换投影后,可直接送入压缩编码而不再产生中间YUV,节省中间段时间。
在介绍360Lib之前,先需要和大家说一下全景视频的整一套采集到显示的流程。
一般全景视频的采集流程为:
采集——拼接——投影——压缩编码——封装
播放流程为:
解码——反投影——显示
360Lib主要完成的是“投影”与“反投影”这一步的工作。而“压缩编码”与“解码”则是由HM(H.265)或JEM平台(H.266)完成。
现在流行广泛的全景视频,基本是ERP(圆柱投影)格式,而在全景视频研究领域,投影格式有上十种之多,其中各有优劣,在这里不过多展开。
关于全景视频投影格式的相关介绍,推荐一下的博客中进行了解:
http://blog.csdn.net/lin453701006/article/category/6526713
由于不同投影格式在压缩比和画质重现上,有各自的优缺点,因此面对不同的使用场景,便出现了不同的选择方案。同时,由于全景视频发展迅速,然而仍未有较为统一的标准制定与产生。
JVET小组,将现行市场广泛运用的ERP投影格式,选作为基本参考投影格式(并非标准)。同时选择了约十种左右的格式为官方参考格式(在16年11月会议中卫7种,17年会议中更新),在360Lib中提供了转换模型。
360Lib使用者需认识到,360Lib测试平台仅作为研究平台使用。同时由于目前主流投影为ERP圆柱投影,因此,大多数播放器并不支持其他投影格式的播放显示。在进行投影格式转换、压缩测试的时候,需注意最终输出投影格式的问题。
360Lib说明文档:
该软件平台的说明文档一共有两份。一份为软件使用说明README,一份为JVET发布的360Lib指导手册。
README在项目根目录下,主要描述了如何build工程与如何进行命令行操作。
注意:请根据360Lib中的README文档,将360Lib的源码按说明,拷贝到JEM或HM的源码工程下目录,用360Lib中的vc工程发布构建。否则,直接使用360Lib的源码构建工程是无法得到纯360Lib APP的。必须需要和JEM或者HM搭配构建,即使你只要投影转换的360LibConvert也是!
manual文件为pdf文件在doc文件夹下,该文档主要介绍了JVET专家组最近一次会议上关于360Lib的参考规范制定与说明。该文档中有较多关于投影格式、评价模型的介绍叙述,适合研究者阅读学习。
360Lib基本操作:
首先,360Lib可以作为插件嵌入HM和JEM平台,也可以单独使用。
嵌入HM和JEM平台的步骤,请参考Subversion节点下的说明文档,选择与360Lib对应版本的HM与JEM,并使用Subversion补丁,进行项目的升级。(具体步骤,在官方文档中比较详细,且暂时未遇到错误与难点,这里不展开了)
若将360Lib与HM或JEM配合使用,请参考README文档中的命令行参数。
关于HM和JEM的配置文件设置与使用手册,推荐雷神的博客:
http://blog.csdn.net/leixiaohua1020/article/category/5974711
这里主要说一下,360Lib单独进行投影转换的使用方法。
README原文如下:
For the standalone application TApp360Convert, the example configuration files are in ./cfg-360Lib/360Lib
./bin/TApp360Convert -c ./cfg-360Lib/360Lib/360convert_ERP_Cubemap3x2.cfg -c ./cfg-360Lib/per-sequence/360/360test_Trolley.cfg -i ./test_seq/Trolley_8192x4096_30fps_8bit_420_erp.yuv -f 1 -o CMP3x2FromERP.yuv
说明:
该部分描述了进行360Lib+HM(JEM)测试的必要步骤
1.一份基于YUV序列的cfg配置参数文件:
该文件格式如下:
#======== File I/O ===============
InputFile : xxxxxxxxx.yuv
InputBitDepth : 8 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 4096 # Input frame width
SourceHeight : 2048 # Input frame height
FramesToBeEncoded : 300 # Number of frames to be coded
Level : 5.2
请将文件名、分辨率、深度、帧数(进行编码的帧数,非总帧数)调整为对应测试序列的相关属性。
官方提供了cfg格式作文参考,在../cfg-360Lib/per-sequence/360中
2.一份转换投影格式的cfg文件
该文件位于../cfg-36Lib/360Lib中,命名方式为360convert_from_to_cfg。具体转换请参考manual文档。
3.测试序列地址
4.转换帧数
360Lib单独使用的时候,在命令行中输入转码的帧数
360Lib+HM(JEM)使用时,在测试序列的配置文件中指定编码帧数
5.输出文件
命令行参数解析如下:
TApp360Convert
-c 360convert_ERP_Cubemap3x2.cfg投影转换cfg
-c 360test_Trolley.cfg序列cfg
-i Trolley.yuv输入序列
-f 1帧数
-o CMP3x2FromERP.yuv 输出序列
推荐,转换前,先使用YUV分析软件,确定YUV序列的色彩空间和总帧数。
命令行打印:
FaceSizeAlignment must be even for chroma 4:2:0 format, it is reset to 2.
CompactCodingFPFormat is automatically disabled for source video because it is only supported for OHP and ISP
CompactCodingFPFormat is automatically disabled for output video because it is only supported for OHP and ISP
Input File : J:\test_seq\Dianying.yuv
Output File : cubemap_3840x2880x8_cf1.yuv
Reference File : NULL
SphFile File : sphere_655362.txt
ViewPortFile File : NULL
DynViewPortFile : NULL
SpherePointsFile File : NULL
Real Format : 3840x2880 30Hz
Internal Format : 3840x2880 30Hz
Frame index : 0 - 1 (2 frames)
Input bit depth : (Y:8, C:8)
Internal bit depth : (Y:8, C:8)
Output bit depth : (Y:8, C:8)
Reference bit depth : (Y:8, C:8)
-----360 Video Parameters----
InputGeometryType: Equirectangular
ChromaFormat:1 Resolution:4096x2048xF1 FPStructure:1x1 | Id_0(R_0) |
CodingGeometryType: Cubemap
ChromaFormat:1 Resolution:960x960xF6 FPStructure:4x3 | Id_2(R_90) Id_6(R_0) Id_7(R_0) Id_8(R_0) | Id_1(R_0) Id_4(R_0) Id_0(R_0) Id_5(R_0) | Id_3(R_270) Id_9(R_0) Id_10(R_0) Id_11(R_0) |
Packed frame resolution: 3840x2880 (Input face resolution:960x960)
Interpolation method for luma: 5, interpolation method for chroma: 4
ChromaSampleLocType: 2
Input ChromaFormatIDC = 4:2:0
Internal ChromaFormatIDC = 4:2:0 ChromaResample: 0
Output ChromaFormatIDC = 4:2:0
Frame#
Frame:0
Frame:1
Total Time: 47.935 sec.
360Lib+HM使用:
首先,如果上面的步骤执行无误,说明你应该知道如何使用subversive代码托管,将360Lib的补丁打进HM平台或
JEM平台中。
关于360Lib结合HM的使用说明,在HM的doc文件夹中。结合使用依然需要参照360Lib中的README手册,并使用
cfg-360Lib文件夹中的配置文件。
首先,这里简单说一下单独使用360Lib和结合HM使用的具体区别。
HM及JEM,是一套编解码测试平台。在博文开头也比较详细的介绍了。
360Lib单独使用,可以将原始帧序列YUV文件在不同的投影格式之间转换,输出的文件依然是YUV,仅投影方式不同。
360Lib+HM使用,则是将ERP投影格式(默认输入投影格式),转换为其余投影格式,紧接着进行编码。
此时,这个转换投影+编码的过程,将不会输出中间YUV文件,而是直接生成编码后的.bin文件。
关于,360Lib+HM使用,能否使用其他投影格式YUV作为输入,暂时未找到解决方案(对HM平台仍在学习中,理论
上是可以直接进行编码的,但可能存在视窗、视点等问题)。
总的来说,360Lib+HM,输入为ERP格式YUV帧序列,进行指定的投影转换(cfg文件决定),输出编码后的.bin码流。
使用目标:
总的来说,360Lib是一个进行投影格式转换的程序或平台。
而360Lib+HM,则更偏向研究工作。
除了完成HM(JEM)的编码压缩工作,平台还将完成各种测试参数的评估(各种PSNR的计算),用以进行研究评估
,以下将放出详细的报表。
360Lib+HM的报表:
用例为1帧数据,WS-PSNR为JVET在JVET-D0040WS-PSNR for360 video objective quality evaluation
中提出关于评估360全景视频的信噪比的标准。
TAppEncoder.exe -c J:\cfg-360Lib\HM-16.14\encoder_randomaccess_main10.cfg -c J:\cfg-360Lib\encoder_360_ERP.cfg -c J:\cfg-360Lib\per-sequence\360\custom\360test_Dianying.cfg -c J:\cfg-360Lib\per-sequence\360\custom\360test_Dianying_DynamicViewports.cfg --SphFile=J:\cfg-360Lib\360Lib\sphere_655362.txt -i J:\test_seq\Dianying.yuv --CodingFaceWidth=2048 --CodingFaceHeight=1024 --IntraPeriod=32 -b HM_test.bin --SEIDecodedPictureHash=1 -o '' -q 27
HM software: Encoder Version [16.15] (including RExt)[Windows][VS 1900][32 bit]
CompactCodingFPFormat is automatically disabled for source video because it is only supported for OHP and ISP
CompactCodingFPFormat is automatically disabled for output video because it is only supported for OHP and ISP
Input File : J:\test_seq\Dianying.yuv
Bitstream File : HM_test.bin
Reconstruction File : ''
Real Format : 2048x1024 30Hz
Internal Format : 2048x1024 30Hz
Sequence PSNR output : Linear average only
Sequence MSE output : Disabled
Frame MSE output : Disabled
Cabac-zero-word-padding : Enabled
Frame/Field : Frame based coding
Frame index : 0 - 0 (1 frames)
Profile : main10
CU size / depth / total-depth : 64 / 4 / 4
RQT trans. size (min / max) : 4 / 32
Max RQT depth inter : 3
Max RQT depth intra : 3
Min PCM size : 8
Motion search range : 256
Intra period : 32
Decoding refresh type : 1
QP : 27
Max dQP signaling depth : 0
Cb QP Offset : 0
Cr QP Offset : 0
QP adaptation : 0 (range=0)
GOP size : 16
Input bit depth : (Y:8, C:8)
MSB-extended bit depth : (Y:8, C:8)
Internal bit depth : (Y:10, C:10)
PCM sample bit depth : (Y:8, C:8)
Intra reference smoothing : Enabled
diff_cu_chroma_qp_offset_depth : -1
extended_precision_processing_flag : Disabled
implicit_rdpcm_enabled_flag : Disabled
explicit_rdpcm_enabled_flag : Disabled
transform_skip_rotation_enabled_flag : Disabled
transform_skip_context_enabled_flag : Disabled
cross_component_prediction_enabled_flag: Disabled
high_precision_offsets_enabled_flag : Disabled
persistent_rice_adaptation_enabled_flag: Disabled
cabac_bypass_alignment_enabled_flag : Disabled
log2_sao_offset_scale_luma : 0
log2_sao_offset_scale_chroma : 0
Cost function: : Lossy coding (default)
RateControl : 0
WPMethod : 0
Max Num Merge Candidates : 5
TOOL CFG: IBD:1 HAD:1 RDQ:1 RDQTS:1 RDpenalty:0 LQP:0 SQP:0 ASR:0 MinSearchWindow:8 RestrictMESampling:0 FEN:1 ECU:0 FDM:1 CFM:0 ESD:0 RQT:1 TransformSkip:1 TransformSkipFast:1 TransformSkipLog2MaxSize:2 Slice: M=0 SliceSegment: M=0 CIP:0 SAO:1 PCM:0 TransQuantBypassEnabled:0 WPP:0 WPB:0 PME:2 WaveFrontSynchro:0 WaveFrontSubstreams:1 ScalingList:0 TMVPMode:1 AQpS:0 SignBitHidingFlag:1 RecalQP:0
-----360Lib software version [2.1]-----
-----360 video parameters----
SphereVideo:1
InputGeometryType: Equirectangular
ChromaFormat:1 Resolution:4096x2048xF1 FPStructure:1x1 | Id_0(R_0) |
Compact type: 0
CodingGeometryType: Equirectangular
ChromaFormat:1 Resolution:2048x1024xF1 FPStructure:1x1 | Id_0(R_0) |
Compact type: 0
Packed frame resolution: 2048x1024 (Input face resolution:2048x1024)
Interpolation method for luma: 5, interpolation method for chroma: 4
ChromaSampleLocType: 2
Input ChromaFormatIDC: 1; Internal ChromaFormatIDC: 1, ChromaResample: 0; Output ChromaFormatIDC: 1
Internal bit depth for projection conversion: 10, output bit depth from pejction conversion: 10
End to end S-PSNR-NN is enabled; SphFile file: J:\cfg-360Lib\360Lib\sphere_655362.txt
WS-PSNR is enabled
End to end S-PSNR-I is enabled; SphFile file: J:\cfg-360Lib\360Lib\sphere_655362.txt
End to end CPP-PSNR is enabled
End to end WS-PSNR is enabled
Static ViewPort PSNR calculation is not enabled!
ViewPort parameters for dynamic ViewPort PSNR calculation:
Number of viewports: 2, Resolutoin:856x856
Dyanmic viewport 0, hFOV:75.00, vFOV:75.00
Start viewport setting(POC_0): 75.00 -18.00; End viewport setting(POC_299): 165.00 12.00
Dyanmic viewport 1, hFOV:75.00, vFOV:75.00
Start viewport setting(POC_0): 104.00 -44.00; End viewport setting(POC_299): 194.00 -14.00
Cross-format S-PSNR-NN is enabled; SphFile file: J:\cfg-360Lib\360Lib\sphere_655362.txt
Cross-format S-PSNR-I is enabled; SphFile file: J:\cfg-360Lib\360Lib\sphere_655362.txt
Cross-format CPP-PSNR is enabled
-----360 video parameters----
Non-environment-variable-controlled macros set as follows:
RExt__DECODER_DEBUG_BIT_STATISTICS = 0
RExt__HIGH_BIT_DEPTH_SUPPORT = 0
RExt__HIGH_PRECISION_FORWARD_TRANSFORM = 0
O0043_BEST_EFFORT_DECODING = 0
ME_ENABLE_ROUNDING_OF_MVS = 1
Input ChromaFormatIDC = 4:2:0
Output (internal) ChromaFormatIDC = 4:2:0
POC 0 TId: 0 ( I-SLICE, nQP 24 QP 24 ) 272056 bits [Y 48.2661 dB U 48.7034 dB V 49.8522 dB] [Y-WSPSNR 48.1169 dB U-WSPSNR 48.6066 dB V-WSPSNR 49.8494 dB] [Y-E2ESPSNR_NN 45.9106 dB U-E2ESPSNR_NN 48.3878 dB V-E2ESPSNR_NN 49.7914 dB] [Y-E2ESPSNR_I 46.1230 dB U-E2ESPSNR_I 48.6015 dB V-E2ESPSNR_I 50.0147 dB] [Y-E2ECPPPSNR 46.0824 dB U-E2ECPPPSNR 48.6018 dB V-E2ECPPPSNR 50.0001 dB] [Y-E2EWSPSNR 45.9425 dB U-E2EWSPSNR 48.3623 dB V-E2EWSPSNR 49.7785 dB] [Y-PSNR_DYN_VP0 49.3957 dB U-PSNR_DYN_VP0 50.7293 dB V-PSNR_DYN_VP0 51.8196 dB] [Y-PSNR_DYN_VP1 48.1459 dB U-PSNR_DYN_VP1 51.2552 dB V-PSNR_DYN_VP1 51.9641 dB] [Y-CFSPSNR_NN 41.6981 dB U-CFSPSNR_NN 48.3675 dB V-CFSPSNR_NN 49.7301 dB] [Y-CFSPSNR_I 46.1212 dB U-CFSPSNR_I 48.5947 dB V-CFSPSNR_I 50.0079 dB] [Y-CFCPPPSNR 45.9948 dB U-CFCPPPSNR 48.6128 dB V-CFCPPPSNR 50.0154 dB] [ET 236 ] [L0 ] [L1 ] [MD5:e58ae63a162a697dfdf1542f1cdf6f95,66d439a373c0406470b8caa240f1f6d7,4dc55a15852ccba83ac1ebebf3805bbf]
SUMMARY --------------------------------------------------------
Total Frames | Bitrate Y-PSNR U-PSNR V-PSNR YUV-PSNR Y-WSPSNR U-WSPSNR V-WSPSNR Y-E2ESPSNR_NN U-E2ESPSNR_NN V-E2ESPSNR_NN Y-E2ESPSNR_I U-E2ESPSNR_I V-E2ESPSNR_I Y-E2ECPPPSNR U-E2ECPPPSNR V-E2ECPPPSNR Y-E2EWSPSNR U-E2EWSPSNR V-E2EWSPSNR Y-PSNR_DYN_VP0 U-PSNR_DYN_VP0 V-PSNR_DYN_VP0 Y-PSNR_DYN_VP1 U-PSNR_DYN_VP1 V-PSNR_DYN_VP1 Y-CFSPSNR_NN U-CFSPSNR_NN V-CFSPSNR_NN Y-CFSPSNR_I U-CFSPSNR_I V-CFSPSNR_I Y-CFCPPPSNR U-CFCPPPSNR V-CFCPPPSNR
1 a 8161.6800 48.2661 48.7034 49.8522 48.5671 48.1169 48.6066 49.8494 45.9106 48.3878 49.7914 46.1230 48.6015 50.0147 46.0824 48.6018 50.0001 45.9425 48.3623 49.7785 49.3957 50.7293 51.8196 48.1459 51.2552 51.9641 41.6981 48.3675 49.7301 46.1212 48.5947 50.0079 45.9948 48.6128 50.0154
I Slices--------------------------------------------------------
Total Frames | Bitrate Y-PSNR U-PSNR V-PSNR YUV-PSNR Y-WSPSNR U-WSPSNR V-WSPSNR Y-E2ESPSNR_NN U-E2ESPSNR_NN V-E2ESPSNR_NN Y-E2ESPSNR_I U-E2ESPSNR_I V-E2ESPSNR_I Y-E2ECPPPSNR U-E2ECPPPSNR V-E2ECPPPSNR Y-E2EWSPSNR U-E2EWSPSNR V-E2EWSPSNR Y-PSNR_DYN_VP0 U-PSNR_DYN_VP0 V-PSNR_DYN_VP0 Y-PSNR_DYN_VP1 U-PSNR_DYN_VP1 V-PSNR_DYN_VP1 Y-CFSPSNR_NN U-CFSPSNR_NN V-CFSPSNR_NN Y-CFSPSNR_I U-CFSPSNR_I V-CFSPSNR_I Y-CFCPPPSNR U-CFCPPPSNR V-CFCPPPSNR
1 i 8161.6800 48.2661 48.7034 49.8522 48.5671 48.1169 48.6066 49.8494 45.9106 48.3878 49.7914 46.1230 48.6015 50.0147 46.0824 48.6018 50.0001 45.9425 48.3623 49.7785 49.3957 50.7293 51.8196 48.1459 51.2552 51.9641 41.6981 48.3675 49.7301 46.1212 48.5947 50.0079 45.9948 48.6128 50.0154
P Slices--------------------------------------------------------
Total Frames | Bitrate Y-PSNR U-PSNR V-PSNR YUV-PSNR
0 p -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind)
B Slices--------------------------------------------------------
Total Frames | Bitrate Y-PSNR U-PSNR V-PSNR YUV-PSNR
0 b -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind)
RVM: 0.000
Bytes written to file: 34064 (8175.360 kbps)
Total Time: 446.559 sec.