【Audio and Video Technology】Video Quality Evaluation MSU VQMT & Netflix vmaf

Video Quality Evaluation Tool Experimental Documentation

The experimental tools use two tools from the full reference:

  • MSU VQMT
  • NetFlix vmaf

Because psnr is commonly used as a video quality evaluation index, this experiment is mainly for testing and comparison, so only psnr is used as the index of the two tools

the difference:

  • VQMT is a commercial software, the current free version can support HD, FullHD, 4k, 8k resolution and Support for 200+ video & image formats

    Download link: MSU Video Quality Measurement Tool (VMAF, PSNR, VQM, SSIM, NIQE, etc) (compression.ru)

    • The main differences between Free and Pro are as follows: (the pro version is expensive, 1 device 999$, you can choose ProDemo, which is also a free version, but it officially says that it does not guarantee the correct data)
    Features & Components Free ProDemo Pro PREMIUM
    GPU metrics + + +
    HDR + + +
    Windows Console + + +
    Linux Console + + +
    MAC (iOS) support Planned Planned Planned
    Python Interface + + +
    Unlimited installations + + +
    Automatical activation N/A N/A +
    Free updates + + 1 year 1 year
    Correct results (not DEMO) + + +
    Usage in companies + + +
  • vmaf only supports yuv and y4m formats, and also provides several parameters to choose from (psnr, psnr_hvs, ssim, ms-ssim, ciede)

    Download link: Releases Netflix/vmaf (github.com)

Operation method:

  • VQMT has a graphical interface to directly open video files for comparison

    image-20220720104805712

    It also has a variety of parameters that can be used. The optional parameters are as follows: (You can see that there is Netflix VMAF here)

image-20220720103131842

输入原视频及参考视频URL或者打开文件后便可以开始进行分析,在新版本中还会自动保存分析的结果,只是不能进行批处理,需要Pro版本的命令行才能支持批处理工作。
  • vmaf does not have a graphical interface, you need to use command line tools to operate

    Command line usage guide vmaf/README.md at master Netflix/vmaf (github.com)

    • instruction:

      vmaf -r E:\common\tang3.yuv -d E:\common\tang4.yuv -w 960 -h 960 -p 420 -b 8 -o output.log
      
    • Related parameters:

      Reference .y4m or .yuv (-r/--reference) is required
      
      Usage: vmaf [options]
      
      Supported options:
       --reference/-r $path:      path to reference .y4m or .yuv
       --distorted/-d $path:      path to distorted .y4m or .yuv
       --width/-w $unsigned:      width
       --height/-h $unsigned:     height
       --pixel_format/-p: $string pixel format (420/422/444)
       --bitdepth/-b $unsigned:   bitdepth (8/10/12/16)
       --model/-m $params:        model parameters, colon ":" delimited
                                  `path=` path to model file
                                  `version=` built-in model version
                                  `name=` name used in log (optional)
       --output/-o $path:         output file
       --xml:                     write output file as XML (default)
       --json:                    write output file as JSON
       --csv:                     write output file as CSV
       --sub:                     write output file as subtitle
       --threads $unsigned:       number of threads to use
       --feature $string:         additional feature
       
       
      Additional Metrics 其他的可选参数
      psnr, psnr_hvs, ssim, ms-ssim, ciede
      
      A number of addtional metrics are supported. Enable these metrics with the --feature flag.
      
      # psnr, psnr_hvs, ssim, ms-ssim, ciede
      --feature psnr \
      --feature psnr_hvs \
      --feature float_ssim \
      --feature float_ms_ssim
      --feature ciede
      --feature cambi
      
      
       --cpumask: $bitmask        restrict permitted CPU instruction sets
       --frame_cnt $unsigned:     maximum number of frames to process
       --subsample: $unsigned     compute scores only every N frames
       --quiet/-q:                disable FPS meter when run in a TTY
       --no_prediction/-n:        no prediction, extract features only
       --version/-v:              print version and exit
      

output:

  • VQMT

    • Y psnr (signal-to-noise ratio Peak signal-to-noise ratio);

    Convert the picture to YCbCr format, and then only calculate the PSNR of the Y component, which is the brightness component. The typical peak signal-to-noise ratio value in image compression is between 30 and 40dB, the higher the better.

    image-20220720094443585

    • Output report:

      Metric: PSNR
      Color component: Y
      Files: constrait20fps.mp4 compared to: native_video.mp4
      
      #	native_video.mp4
      0	48.089218
      1	48.097214
      2	40.957611
      3	48.148323
      4	47.362122
      ......
      ......
      10837	18.317478
      10838	18.341671
      10839	18.339325
      10840	18.337685
      10841	18.108231
      10842	18.247126
      10843	18.247503
      10844	18.245304
      total psnr	34.472847
      mean	47.133518
      harmonic mean	46.136684
      min. val	16.455748
      max. val	61.386471
      min. frame	3623
      max. frame	389
      std dev	4.385028
      variance	19.228470
      
  • vmaf

    • No features added:
    <VMAF version="2.3.1">
      <params qualityWidth="960" qualityHeight="960" />
      <fyi fps="20.94" />
      <frames>
        <frame frameNum="0" integer_adm2="0.978963" integer_adm_scale0="0.998125" integer_adm_scale1="0.995882" integer_adm_scale2="0.990478" integer_adm_scale3="0.956561" integer_motion2="0.000000" integer_motion="0.000000" integer_vif_scale0="0.549783" integer_vif_scale1="0.619952" integer_vif_scale2="0.648450" integer_vif_scale3="0.675513" vmaf="59.246770" />
        <frame frameNum="1" integer_adm2="0.991671" integer_adm_scale0="0.998279" integer_adm_scale1="0.994878" integer_adm_scale2="0.994040" integer_adm_scale3="0.986643" integer_motion2="0.852844" integer_motion="6.023301" integer_vif_scale0="0.815954" integer_vif_scale1="0.879384" integer_vif_scale2="0.898762" integer_vif_scale3="0.913492" vmaf="85.293165" />
    ......
    ......
     </frames>
      <pooled_metrics>
        <metric name="integer_adm2" min="0.413357" max="0.999776" mean="0.928834" harmonic_mean="0.923530" />
        <metric name="integer_adm_scale0" min="0.720963" max="1.001498" mean="0.978396" harmonic_mean="0.977443" />
        <metric name="integer_adm_scale1" min="0.340115" max="1.003616" mean="0.940059" harmonic_mean="0.933984" />
        <metric name="integer_adm_scale2" min="0.277522" max="0.999417" mean="0.926124" harmonic_mean="0.916255" />
        <metric name="integer_adm_scale3" min="0.325116" max="0.999697" mean="0.911883" harmonic_mean="0.906875" />
        <metric name="integer_motion2" min="0.000000" max="35.799564" mean="6.326431" harmonic_mean="3.413652" />
        <metric name="integer_motion" min="0.000000" max="67.485893" mean="7.641753" harmonic_mean="3.884414" />
        <metric name="integer_vif_scale0" min="0.096378" max="0.978172" mean="0.592144" harmonic_mean="0.571733" />
        <metric name="integer_vif_scale1" min="0.105987" max="0.990578" mean="0.660542" harmonic_mean="0.639917" />
        <metric name="integer_vif_scale2" min="0.104521" max="0.992963" mean="0.687723" harmonic_mean="0.666811" />
        <metric name="integer_vif_scale3" min="0.098240" max="0.995127" mean="0.710630" harmonic_mean="0.689127" />
        <metric name="vmaf" min="0.000000" max="96.823158" mean="63.415244" harmonic_mean="38.980743" />
      </pooled_metrics>
      <aggregate_metrics />
    </VMAF>
    
    • Add psnr:
    <VMAF version="e1d466c">
      <params qualityWidth="576" qualityHeight="324" />
      <fyi fps="41.98" />
      <frames>
        <frame frameNum="0" integer_adm2="0.962084" integer_adm_scale0="0.946338" integer_adm_scale1="0.939006" integer_adm_scale2="0.957474" integer_adm_scale3="0.980887" integer_motion2="0.000000" integer_motion="0.000000" integer_vif_scale0="0.505712" integer_vif_scale1="0.879061" integer_vif_scale2="0.937873" integer_vif_scale3="0.964301" psnr_y="34.760779" psnr_cb="39.229987" psnr_cr="41.349703" vmaf="83.856285" />
        ...
      </frames>
      <pooled_metrics>
        <metric name="integer_adm2" min="0.921008" max="0.962084" mean="0.934506" harmonic_mean="0.934463" />
        ...
        <metric name="psnr_y" min="29.640688" max="34.760779" mean="30.755064" harmonic_mean="30.727905" />
        <metric name="psnr_cb" min="38.019979" max="39.229987" mean="38.449441" harmonic_mean="38.447866" />
        <metric name="psnr_cr" min="40.649266" max="41.353846" mean="40.991910" harmonic_mean="40.991083" />
        <metric name="vmaf" min="71.176557" max="87.181420" mean="76.668905" harmonic_mean="76.510006" />
      </pooled_metrics>
      <aggregate_metrics />
    

in conclusion:

In terms of use, VQMT is simpler than vmaf because it has a graphical interface. In terms of functions, VQMT brought me two surprises. The first point is that it can use vmaf metric, which is equivalent to covering the functions of vmaf. The other point is that it is planned in the future. Stream support and more parameters are provided in the version of , but I don't know if it can be used in the free version.

Stream support

Allows VQMT read and estimate the quality of streamed  video

For video evaluation with original video and reference video, the free version can meet the requirements after testing, and the new free version 14.1 of VQMT can also support high resolution and multiple pixel formats.

From a comprehensive evaluation, vmaf can use the command line to perform batch processing operations, which is one of its advantages, but VQMT is easy to use and powerful, and for the current usage requirements, it does not need to perform batch processing operations, so it is relatively VQMT is currently the best choice for full-reference video quality evaluation.

Guess you like

Origin blog.csdn.net/Daibvly/article/details/125892392