Skip to main content

CLI tool for encoding videos with ffmpeg and scoring quality with VMAF

Project description

ffvm

A CLI tool for encoding videos with ffmpeg and scoring quality with VMAF. Supports single files, batch processing, and automatic CRF sweeping to hit a target VMAF score.

Installation

Requires ffmpeg (built with libvmaf) and ffprobe in PATH.

pip install ffvm

Commands

encode

Encode a single video file.

ffvm encode input.mp4 output.mp4 --vcodec libx265 --crf 28

Options:

  • --vcodec — Video codec: copy, libx264, libx265, libsvtav1 (default: libx264)
  • --crf — Constant Rate Factor (default: 23)
  • --acodec — Audio codec: copy, aac, libopus (default: copy)
  • --ab — Audio bitrate, e.g. 160k
  • --resolution — Output resolution, e.g. 1920x1080
  • --compare — Run VMAF comparison after encoding

batch

Encode all videos in a directory.

ffvm batch ./videos --vcodec libsvtav1 --crf 30 --compare

Output files are named {original}_{codec}_{crf}.{ext}. Additional options:

  • --output-dir — Write encoded files to a different directory
  • --recursive — Search subdirectories for videos
  • --overwrite — Skip overwrite confirmations
  • --compare — Run VMAF on each encode and display a results table

sweep

Find the optimal CRF for a video using binary search against a VMAF target. Extracts representative segments, tests CRF values, and encodes the full video at the best CRF found.

ffvm sweep input.mp4 output.mp4 --target-vmaf 95.0 --crf-min 20 --crf-max 35

Options:

  • --target-vmaf — Target VMAF score (default: 93.0)
  • --crf-min — Lower bound of CRF search range (default: 23)
  • --crf-max — Upper bound of CRF search range (default: 32)

batch-sweep

Run CRF sweep on every video in a directory. Each video gets its own optimal CRF.

ffvm batch-sweep ./videos --vcodec libsvtav1 --target-vmaf 95.0

How sweep works

  1. Extracts 1-7 short segments (scaled by video length) from the middle 80% of the video
  2. Binary searches through the CRF range, encoding and VMAF-scoring each segment per iteration
  3. Converges when crf_max - crf_min <= 1
  4. Encodes the full video at the resulting CRF

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ffvm-0.1.0.tar.gz (17.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ffvm-0.1.0-py3-none-any.whl (18.2 kB view details)

Uploaded Python 3

File details

Details for the file ffvm-0.1.0.tar.gz.

File metadata

  • Download URL: ffvm-0.1.0.tar.gz
  • Upload date:
  • Size: 17.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for ffvm-0.1.0.tar.gz
Algorithm Hash digest
SHA256 2804fab649ab4536553029d7d50c1d54dd6f7ba024f209467923e9f9856bde46
MD5 6862faa034f1537523624ec426781d65
BLAKE2b-256 48f175c0359e8362c0c2328c9abb84d799bb84489569d17e99d2a850d0168d37

See more details on using hashes here.

File details

Details for the file ffvm-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: ffvm-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 18.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for ffvm-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6357deb7b3fa55495205b1fad66705853154a1a01c1bf80123036647b6d97259
MD5 5ad3406623d5f3b874c3381c5b883f83
BLAKE2b-256 ebf41961dd7627d603579620c44ddb18f3e9a0f99c6e7ebdf8c75406fdb36799

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page