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
- Extracts 1-7 short segments (scaled by video length) from the middle 80% of the video
- Binary searches through the CRF range, encoding and VMAF-scoring each segment per iteration
- Converges when
crf_max - crf_min <= 1 - 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2804fab649ab4536553029d7d50c1d54dd6f7ba024f209467923e9f9856bde46
|
|
| MD5 |
6862faa034f1537523624ec426781d65
|
|
| BLAKE2b-256 |
48f175c0359e8362c0c2328c9abb84d799bb84489569d17e99d2a850d0168d37
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6357deb7b3fa55495205b1fad66705853154a1a01c1bf80123036647b6d97259
|
|
| MD5 |
5ad3406623d5f3b874c3381c5b883f83
|
|
| BLAKE2b-256 |
ebf41961dd7627d603579620c44ddb18f3e9a0f99c6e7ebdf8c75406fdb36799
|