How we benchmark FFmpeg
Learn how the FFmpeg benchmarks on this blog are run: the source clip, what stays fixed, why sizes are exact and timings are not, and how to rerun a sweep.
The Rendobar Blog
Explore how Rendobar is built. FFmpeg internals, Cloudflare architecture, and the engineering decisions behind a serverless media API.
Learn how the FFmpeg benchmarks on this blog are run: the source clip, what stays fixed, why sizes are exact and timings are not, and how to rerun a sweep.
Learn why a video API renders the wrong font without an error, how a CSS font stack fixes it, and which of 16 writing systems render with no setup.
Compare what Opus, AAC, MP3 and FLAC deliver against the bitrate you ask for. Opus at 64k wrote 29 percent more bytes than requested, AAC within 3 percent.
Compare H.264, HEVC and AV1 held to one 150 KB budget and scored with VMAF. At about 245 kbps for a 720p clip, AV1 scored 84.8, HEVC 76.2 and H.264 64.3.
Compare H.264, HEVC, VP9 and two AV1 encoders at their usual CRF on one clip, by size, encode time and cost, and see why the AV1 encoder mattered.
Compare AVIF, WebP, JPEG and PNG encoded from one frame at each format's usual quality setting. AVIF wrote the smallest file, with quality left unmatched.
See how a compression job spots that re-encoding would grow an efficient file and returns the original, and how it reports a size target it cannot reach.
Compare CRF, target bitrate and VBV-capped modes in FFmpeg on one clip. Single-pass 700k ABR overshot by 13%, and adding a VBV cap landed within 0.2% of target.
Compare FFmpeg CRF 18 to 32 on one clip. Each 3 points of CRF removed about a quarter of the file, while encode time showed no pattern at all.
Find the fix for common FFmpeg errors, from moov atom not found to Invalid argument, and learn why most failed video jobs never reached FFmpeg.
Compare FFmpeg keyframe intervals on one clip: what a shorter GOP adds to the file, what it buys, and the flags that give HLS segments aligned keyframes.
Compare FFmpeg scaling flags on one 720p to 480p downscale. The flag moved output size by 66 percent and encode time by nothing measurable.
Compare FFmpeg libx264 thread counts from 1 to 8 over five runs each. Eight threads was 2.99x faster than one, and pinned threads made the timings repeatable.
Compare all seven x264 -tune values on one clip at CRF 23. zerolatency needed 2.2x the bytes and fastdecode 1.7x. On a capped stream they cost quality.
Probe an uploaded file to confirm it is real media before you encode it, with four checks, a local Node validator and the error a renamed file returns.
Read a video duration with ffprobe when the container and streams disagree. On MP4s with audio the container matched the audio, up to 493 ms past the video.
Learn why one FFmpeg command gave byte-identical output ten times while its encode time swung 2.13x, and how pinning -threads makes the timings repeatable.
Compare NVENC on an NVIDIA L4 against libx264 on one clip. h264_nvenc cost 1.3x to 2.2x less per job and wrote 2.2x the bytes, and speed was inside the noise.
Compare SVT-AV1 presets 4 to 12 over three runs each. Preset 4 took 3.9x as long as preset 12 for a file a fifth smaller, at quality this sweep did not score.
Compare the cost of each rung in a 1080p to 240p transcode ladder. On a 720p source the 1080p rung took 4x the encode time of 720p and added no detail.
Read where the time goes when a short clip is transcoded through a video API. Waiting to start took a median 3.6 s, over four times the FFmpeg encode.
Compare all nine x264 presets at CRF 23 on one clip. ultrafast wrote 6.6x the bytes of veryslow, and the middle presets do not shrink in order of effort.
Compare FFmpeg pixel formats on one clip, check why a video fails in QuickTime or Safari, and fix it with one flag. yuv420p also wrote the smallest file.
Read the measured numbers behind FFmpeg on Vercel. The binary is 76 MB against a 250 MB cap, and the 4.5 MB body limit is what stops you.
Read the ffprobe fields that mislead a parser: rotation, still-image duration, missing channel layout, cover art as video and HDR, with real JSON for each.
Read why ffmpeg.wasm can't run in a standard Cloudflare Worker. workerd blocks runtime WASM compilation, and the 31 MB core barely survives gzip.