VMAF (Video Multi-Method Assessment Fusion)

repository·master·Indexed 26 days ago

https://github.com/netflix/vmaf

A perceptual video quality assessment tool developed by Netflix for evaluating video compression quality. It is available as a C library (libvmaf), a Python library, an FFmpeg filter, and a CLI tool. The tool supports built-in and external .json models and can compute additional metrics such as PSNR, PSNR-HVS, SSIM, MS-SSIM, CIEDE2000, and CAMBI.

Tokens
17.4K
Snippets
45
Records
106
Agent score
90%

What's inside VMAF

  1. Overview of VMAF

    master
    VMAF (Video Multi-Method Assessment Fusion) is a perceptual video quality assessment algorithm developed by Netflix. It is available as a standalone C library (libvmaf) and a Python library. The package also includes implementations for other metrics such as PSNR, PSNR-HVS, SSIM, MS-SSIM, and CIEDE2000.
  2. Overview of VMAF and VDK

    master
    VMAF (Video Multi-Method Assessment Fusion) is a perceptual video quality assessment algorithm developed by Netflix. The VMAF Development Kit (VDK) is the software package used to access the algorithm implementation and includes tools for training and testing custom VMAF models.
  3. Use the `vmaf` CLI tool for video assessment

    master

    vmaf is a command line tool used for VMAF feature extraction and prediction. It compares a reference video against a distorted video using a VMAF model and outputs per-frame and pooled scores.

    Supported input formats:

    • .y4m (contains header information, requires minimal flags)
    • .yuv (raw video, requires explicit dimensions and format flags)

    Supported output formats:

    • .xml (default)
    • .json
    • .csv
    • .sub (subtitle format)
    Usage: vmaf [options]
  4. Use the iCID metric in MATLAB

    master

    The iCID (improved color-image-difference) metric is a MATLAB implementation used to predict the perceived difference between two images.

    Requirements:

    • MATLAB R2010b (Note: The code may not work properly with other MATLAB versions).
    • The colorspace package by Pascal Getreuer.

    Core Files:

    • iCID.m: The main implementation of the metric.
    • Example.m: A provided script demonstrating how to use the metric.
    • ExampleImages/Image1.tif and ExampleImages/Image2.tif: Sample images for testing.
  5. Core VMAF features: VIF, Motion2, and ADM

    master

    The following core features are part of the pre-trained VMAF models:

    • Visual Information Fidelity (VIF): Identifier vif. Measures information fidelity loss across four scales (vif_scale0 through vif_scale3).
    • Motion2: Identifier motion. Measures temporal differences between adjacent frames using average absolute pixel difference for the luminance component. Includes motion and motion2 metrics.
    • ADM: Identifier adm. Formerly known as Detail Loss Metric (DLM). Measures the loss of details affecting content visibility. Includes adm2 and scale-based metrics (adm_scale0 to adm_scale3).
  6. Use the default VMAF model for 1080p HDTV

    master
    The default VMAF model (model/vmaf_v0.6.1.json) is designed to predict the quality of videos displayed on a 1080p HDTV in a living-room environment at a viewing distance of three times the screen height (3H). It uses a continuous scale where 'bad' is approximately 20 and 'excellent' is 100.
  7. Download FFmpeg binaries with libvmaf support

    master

    If you prefer not to compile FFmpeg manually, you can download pre-built binaries that include libvmaf support:

  8. Configure `vmaf` input video parameters

    master

    To run vmaf, you must provide a reference and a distorted video using --reference/-r and --distorted/-d.

    If using .y4m files, no additional metadata is required.

    If using raw .yuv files, you must provide the following flags:

    • --width/-w $unsigned: Video width
    • --height/-h $unsigned: Video height
    • --pixel_format/-p $string: Pixel format (e.g., 420, 422, 444)
    • --bitdepth/-b $unsigned: Bit depth (e.g., 8, 10, 12)
    # .y4m
    --reference ducks.y4m \
    --distorted ducks_dist.y4m \
    
    # .yuv
    --reference ducks.yuv \
    --distorted ducks_dist.yuv \
    --width 1920 --height 1080 --pixel_format 420 --bitdepth 8