| This testing framework is initially developed by Intel for convex hull study. | |
| It is contributed to Alliance for Open Media for convex hull study and future AV2 | |
| Common Test Condition (CTC) testing. | |
| For questions and technical support, please contact ryanlei@meta.com or | |
| maggie.sun@intel.com | |
| This readme file provides a simple introduction of the framework and steps to | |
| use it for different studies. | |
| Prerequisites | |
| 1. Inside ./bin folder, make sure you have executables for all external tools, | |
| such as vmaf(version v2.1.1+), HDRConvert, encoder, decoder, etc. You can get | |
| the pre-build binaries or source code for the following tools that are needed: | |
| vmaf tools: https://github.com/Netflix/vmaf/releases/tag/v2.1.1 | |
| HDRConvert: https://gitlab.com/standards/HDRTools 0.22 branch | |
| libaom research branch encoder/decoder: https://gitlab.com/AOMediaCodec/avm | |
| SVT AV1 encoder: https://github.com/OpenVisualCloud/SVT-AV1 | |
| Please always follow the manual of these tools to update the command | |
| parameters used in the script. | |
| when EnableTimingInfo is enabled, ptime utility is used on Windows to capture | |
| the run time information for encode and decode. On Linux, time utility from | |
| Linux system is used to capture run time information. | |
| 2. AV2 CTC has adopted VMAF tool as the reference implementation of all quality | |
| metrics required. Using the versioned '--aom_ctc v1.0' at the command line | |
| will generate all quality metrics for AV2 CTC. | |
| 3. HDRConvert is used to perform downscale and upscale operation. It requires | |
| a template config file (HDRConvScalerY4MFile.cfg). It is also located under | |
| the ./bin folder. Test framework will generate individual config file based | |
| on this template. | |
| 4. VBA macro binary file (vbaProject-AV2.bin) for bdrate calculation is also | |
| stored under ./bin folder, which is needed for BDRATE calculation inside the | |
| excel file. | |
| 5. Test framework is implemented in python 3. It requires few extra python | |
| packages, such as xlrd, xlsxwriter, argparse, etc. | |
| Things you need to update to configure the test. | |
| 1. Update the test clips table in AV2CTCVideo.py file following the existing | |
| example to provide the list and classes of video sequences that you want to | |
| test. Currently, only .y4m files are supported. Test script will parse the | |
| y4m file header to get the basic information of the video clip, such as | |
| resolution, frame rate, bit depth and color format, etc. | |
| 2. Update the test configuration list in ./src/Config.py to specify the test | |
| configurations. Currently, supported test configurations include Random Access | |
| (RA), Low Delay (LD), All Intra(AI) and Adaptive Streaming (AS). | |
| 3. Update FrameNum in ./src/Config.py to specify number of frames you want to | |
| process for different test configurations. | |
| 4. Update DnScaleRatio list in ./src/Config.py to provide the list of downscaling | |
| ratios used for adaptive streaming (convex hull) test configuration. | |
| 5. Update DnScalingAlgos and UpScalingAlgos list in ./src/Config.py to specify | |
| downscaling/upscaling filter types that you want to test. The name of the | |
| filter types is that supported by HDRConvert. The size of these two lists | |
| must be the same. Filter types for downscaling and upscaling can be different. | |
| Right now, only the lanczos filter is supported. | |
| 6. Update QPs list in ./src/Config.py to specify the list of QPs you want to | |
| test for different test configurations. QPs must be in the valid QP range for | |
| different coding standards. For example, [0, 63] for AV1, and [0, 255] for AV2. | |
| 7. Update QualityList in ./src/Config.py to specify quality metrics you want to | |
| calculate. Currently, only VMAF is supported for quality metrics calculation. | |
| 8. Update SMOKE_TEST flag, It is used for sanity check purpose, in which only | |
| few frames are processed to reduce the test time. | |
| Sample command lines for running the adaptive streaming (convex hull) test: | |
| "python ConvexHullTest.py [options]" | |
| below is the full command line options in help message: | |
| -h, --help show this help message and exit | |
| -f, --function function to run: clean, scaling, sumscaling, | |
| encode, convexhull, summary | |
| -k, --KeepUpscaleOutput [0|1] in function clean, if keep upscaled yuv | |
| files. It is false by default | |
| -s, --SaveMemory [0|1] save memory mode will delete most files in | |
| intermediate steps and keeps only necessary ones | |
| for RD calculation. It is false by default | |
| -CmdOnly, --LogCmdOnly LogCmdOnly mode will only capture the command | |
| sequences in the command log file instead of | |
| actually run it. It is false by default | |
| -l, --LoggingLevel logging level: 0:No Logging, 1: Critical, 2: Error, | |
| 3:Warning, 4: Info, 5: Debug | |
| -c, --CodecName CodecName: av1, av2 | |
| -m, --EncodeMethod EncodeMethod: aom, svt | |
| -p, --EncodePreset EncodePreset: 0,1,2... for aom and svt | |
| when LogCmdOnly is set to True, the test framework will only capture all process | |
| command sequences into a log file (under ./test/testLogs folder with time stamp) | |
| without actually running it on your system. This feature is to support the use | |
| case in which actual processing tasks need to distributed on to a server cluster | |
| and executed in parallel. | |
| Sample command for typical operations: | |
| 1. python ConvexHullTest.py -f clean | |
| This command will clean up all intermediate files under ./test folder | |
| 2. python ConvexHullTest.py -f scaling | |
| This command will run the standalone downscaling and upscaling tests. | |
| Downscaled YUV files are stored under ./test/downscaledYUVs folder. | |
| Upscaled YUV files are stored under ./test/upscaledYUVs folder. | |
| Quality metrics log files are stored under ./test/qualityLogs folder. | |
| Other processing logs and command logs are stored under ./test/testLogs folder. | |
| For using HDRConvert, individual config files are generated and stored under | |
| ./test/configFiles folder. All intermediate file names indicate the input, | |
| output resolution and filter types that are used. | |
| 3. python ConvexHullTest.py -f sumscaling | |
| This command will summarize the quality metrics for the scaling test into | |
| excel files under ./analysis/scalingresult folder. There are excel files for | |
| each individual test sequence and also excel file that summarizes quality | |
| result for all test sequences based on classes. | |
| 4. python ConvexHullTest.py -f encode -c av2 -m aom -p 1 | |
| This command will run the encoding test. It actually contains downscale | |
| (optional), encode, decode, upscale, quality metrics steps. Right now, only | |
| av2 encoding/decoding with libaom is supported. Downscale step will be skipped | |
| if downscaled yuv files already generated in ./test/downscaledYUVs. Encoded | |
| bitstreams are stored under ./test/bitstreams folder. Decoded YUV files are | |
| stored under ./test/decodedYUVs folder. Decoded and then upscaled YUV files | |
| are stored under ./test/decUpscaledYUVs folder. Quality logs are stored under | |
| ./test/qualityLogs folder. | |
| 5. python ConvexHullTest.py -f convexhull -c av2 -m aom -p 1 | |
| This command will summarize the per sequence quality result based on | |
| different scaling ratios and scaling filter types. | |
| Please make sure the same encoding method/codec name/preset are used as the | |
| previous steps. Output excel files are stored under ./analysis/rdresult | |
| folder. For each sequence and downscaling/upscaling filter type, an excel | |
| sheet is generated that contains the bitrate and quality metric for different | |
| downscaled resolutions. Rate distortion curve for all quality metrics will | |
| be drawn in a scatter plot. Convex hull will be calculated and draw on top | |
| of the rate distortion curve. | |
| In this step, a summary excel file is also generated, which include the | |
| convex hull rate distortion points for all test content and downscaling and | |
| upscaling algorithm pair. This excel file is needed when you want to | |
| calculate bdrate between two encoding runs to evaluate the quality impact on | |
| overall convex hull from a coding tool. | |
| 6. python ConvexHullTest.py -f summary -c av2 -m aom -p 1 | |
| This command will summarize the quality metrics across all test sequences | |
| into an excel file stored under the ./analysis/summary folder. BDRATE between | |
| different resolutions will be calculated. Average result based on content | |
| classes will be calculated. | |
| In order to calculate BDRATE between convex hull from two encoding test runs | |
| with different codec or different encoding preset, ./src/ConvexHullBDRate.py | |
| script is needed. Command line options for this script is as following: | |
| usage: ConvexHullBDRate.py [options] | |
| optional arguments: | |
| -h, --help show this help message and exit | |
| -i1 , --input1 convex hull summary excel file for base mode | |
| -i2 , --input2 convex hull summary excel file for target mode | |
| -o , --output output excel file with BDRATE for base and target modes | |
| To use this script, the convex hull summary excel files for base and target | |
| modes are needed. Script will parse the rate distortion data from the convex hull | |
| for each individual test content, then it will use the bdrate macro to calculate | |
| the bdrate between two convex hulls. | |
| a sample command is: | |
| python ConvexHullBDRate.py -i1 ConvexHullRD_ffmpeg_hevc_medium.xlsx | |
| -i2 ConvexHullRD_ffmpeg_hevc_veryslow.xlsx -o ConvexHullBDRate.xlsm | |
| Sample command lines for running the regular AV2 CTC test for All Intra(AI), | |
| Low Delay(LD) and Random Access (RA) configurations: | |
| "python AV2CTCTest.py [options]" | |
| below is the full command line options in help message: | |
| -h, --help show this help message and exit | |
| -f, --function function to run: clean, encode, summary | |
| -s, --SaveMemory [0|1] save memory mode will delete most files in | |
| intermediate steps and keeps only necessary ones | |
| for RD calculation. It is false by default | |
| -CmdOnly, --LogCmdOnly LogCmdOnly mode will only capture the command | |
| sequences in the command log file instead of | |
| actually run it. It is false by default | |
| -l, --LoggingLevel logging level: 0:No Logging, 1: Critical, 2: Error, | |
| 3:Warning, 4: Info, 5: Debug | |
| -p, --EncodePreset EncodePreset: 0,1,2... for aom | |
| Sample command for typical operations: | |
| 1. python AV2CTCTest.py -f clean | |
| This command will clean up all intermediate files under ./test folder | |
| 2. python AV2CTCTest.py -f encode -p 1 | |
| This command will run the encoding test. It actually contains encode, decode, | |
| and quality metrics steps. Right now, only av2 encoding/decoding with libaom | |
| is supported. Encoded bitstreams are stored under ./test/bitstreams folder. | |
| Decoded YUV files are stored under ./test/decodedYUVs folder. Quality logs | |
| are stored under ./test/qualityLogs folder. Timing information logs are stored | |
| under ./test/perfLogs floder. | |
| 3. python AV2CTCTest.py -f summary -p 1 | |
| This command will summarize the quality metrics across all test sequences | |
| into an csv file stored under the ./analysis/summary folder. | |
| 4. after getting the csv file for two tests (reference and target), content of | |
| the csv files can be directly copied into the excel template | |
| (AV2Template_Vx.xlsm under the bin folder), which can calculate the BDRATE | |
| of the two tests. |