This repository provides a lightweight command-line toolkit for running video quality metrics and related utilities. vqcheck offers an easy way to build and run several recent full-reference and no-reference models while providing a unified output format (JSON).
To install the included tools run the following on either Linux or macOS:
git clone https://github.com/benjaminherb/VQTools
cd VQTools
chmod +x ./install.sh
./install.shThis installs the tools in ~/.local/share/vqtools.
An ffmpeg/ffprobe installation with libvmaf support is required for VMAF modes.
Run a no-reference model on a single video:
vqcheck -m dover -d distorted.mp4Run a full-reference model on a set of videos and save the results:
vqcheck -m lpips -d /path/to/distorted -r /path/to/references/ -o ./results/-d, --distorted(required) — Distorted video file or folder-r, --reference— Reference video file or folder (required for FR modes)-m, --mode— Which metric/mode to run (see table below).-o, --output— Optional: save output files (one*.method.jsonper video). If-ois passed without an argument, the output is written next to the distorted files.-q, --quiet— Reduce console output--rebuild- Delete and rebuild the selected model if applicable--tempdir- Specify temporary directory to use (eg for transcoding)
- If
--referenceis a folder, the script uses the closest filename match. - If
psnris calculated, the script also returns whether the file and reference are a perfect match (e.g., to check for lossless errors). - When running a method for the first time, its code and required files are pulled and built.
- MaxVQA seems to have issues with ffmpeg 8 but works with ffmpeg 7.
- The script tries to use GPU backends where available (MPS/Vulkan/CUDA), but will fall back to CPU
- For full-reference metrics the distorted files are scaled to the reference size (if they are smaller)
Encode image sequences (png, jpeg, tiff) located in subfolders under a root directory into MKV files using ffmpeg.
Options:
root_dir(positional) — root directory containing folders with image sequences--fps— output framerate (default: 60)--scale— optional W:H scale (defaults to3840:2160when provided without value)--ffvhuff— useffvhuffcodec instead of H.265 (lossless)--pix-fmt— explicit pixel format to pass to ffmpeg--output-dir— output directory (default:<root_dir>/mkv)--dryrun— do not run ffmpeg; just show commands--overwrite— overwrite existing output files
Example:
seq2mkv /path/to/sequences --scale 3840:2160 --ffvhuff --output-dir ./mkvTranscode all video files in a directory to a standardized MKV (lossless) using either ffvhuff (for playback) or h265 (for storage).
Options:
-i/--input— input directory containing video files (required)-o/--output— output directory for converted files (required)--codec— one offfvhufforh265(default:h265)--scale- scale videos to specified WIDTH and HEIGHT (e.g., --scale 1920 1080)--overwrite— overwrite existing files in the output directory--dryrun— show ffmpeg commands without executing them
Example:
transcode -i ./videos -o ./converted --codec ffvhuffCalculate spatial/temporal complexity features with VCA (Video Complexity Analyzer). Videos are decoded with ffmpeg and piped to VCA as Y4M. Results are stored in a *.vca.json file per video: mean values, per-frame features and detected shots.
Options:
-i/--input— input video file or directory (required)-o/--output— output directory (required)--pix-fmt— pixel format passed to VCA (default:yuv420p, 8-bit for comparable values across sources)--block-size— DCT block size8,16or32(default: 32)--threads— VCA threads per video (default: 0 = autodetect)--workers— number of parallel videos (default: 0 = serial)--overwrite— overwrite existing files--rebuild— delete and rebuild VCA
Example:
vca -i ./videos -o ./vca --workers 4Consolidate multiple metric JSON files into a single JSON report. The script scans a directory tree for *.method.json files and groups them by base video name.
Options:
--metrics-dir, -m— directory containing individual metric JSON files (required)--output-file, -o— path to write consolidated JSON (required)--existing-json, -e— optional existing combined JSON to update/merge
Example:
aggmet -m ./metrics -o consolidated.jsonExtract metadata from video files using ffprobe. The info is stored in a *.meta.json file.
Options
--input_dir, -i- Input folder with media files--output_dir, -o- Output folder to write per-file metadata JSON--recursive, -r- Recurse into subdirectories
Example:
metaex -i ./pvs -o ./metaSee each linked repository for license and citation details — this project provides only integration code.
