Custom fonts in a video API
Find out what happens when a video API cannot find your font. 30 of 46 production jobs asked for a typeface that was not installed and were billed anyway.
The Rendobar Blog
Explore how Rendobar is built. FFmpeg internals, Cloudflare architecture, and the engineering decisions behind a serverless media API.
Find out what happens when a video API cannot find your font. 30 of 46 production jobs asked for a typeface that was not installed and were billed anyway.
Compare Opus, AAC, MP3 and FLAC on one file. Opus at 64k beat AAC at 128k on size, and one codec missed its own nominal bitrate by 16 percent.
Compare H.264, HEVC and AV1 held to an identical byte budget and scored with VMAF. AV1 delivered 84.8 against H.264's 64.3 for the same 146 KB.
Compare four video codecs measured on one file, with encode times, output sizes and cost. SVT-AV1 beat VP9 on every axis, which settles a common argument.
Compare AVIF, WebP, JPEG and PNG encoded from one identical frame. AVIF came out 43 percent smaller than JPEG and 45 percent smaller than WebP.
See what happens when a compression job decides re-encoding would make the file bigger. Three of seventeen cases passed the original through untouched.
Compare constant quality against target bitrate in FFmpeg. ABR overshot its own target by 10 percent, and CRF with a VBV cap produced the smallest file.
Compare FFmpeg CRF from 18 to 32 on one file. Every 3 points of CRF removed about a fifth of the bytes, and the encode time barely moved at all.
Read the failure distribution from 208 failed video jobs. More died on an unreachable input URL than on a bad FFmpeg command, and one message caused 25 of them.
Compare FFmpeg keyframe intervals from every frame to 250. A 1-second GOP cost 35 percent more bytes than the default, and it barely changed encode time.
Compare FFmpeg scaling algorithms on the same downscale. Encode time varied by under 3 percent while output size varied by 66 percent, so the flag is free.
Compare FFmpeg thread counts from 1 to 8, five runs each. Eight threads gave a 3x speedup rather than 8x, and pinning threads made the benchmark reproducible.
Compare all seven x264 -tune values on one clip. zerolatency produced 2.2x the bytes and fastdecode 1.7x, which is not what a performance flag implies.
Probe an uploaded file to confirm it is real media before you pay to encode it. Measured on 213 jobs, including 3 named .mp4 that were not video at all.
Read a video's duration with ffprobe when three fields disagree. Measured across 200 probe jobs, showing which field to trust and where the gap hits 493 ms.
Read what happens when one FFmpeg command runs ten times. Output was byte-identical, encode time varied 2.13x, and one of our own claims did not survive.
Compare NVENC hardware encoding against libx264 on the same clip. The GPU job cost far less and produced a file twice the size, which is the real trade.
Compare SVT-AV1 speed presets 4 to 12, three runs each. Preset 12 was both faster and smaller than preset 10, so one rung of the dial is strictly dominated.
Compare every rung of a 1080p to 240p transcode ladder. The top rung cost more than the other four combined, and on a 720p source it adds nothing.
Read the real latency breakdown from 1,770 completed jobs. The encode ran a median 861 ms while waiting to start took 3,626 ms, which is 57% of total time.
Compare all nine x264 presets on one file with real encode times and output sizes. The slower presets are not monotonically smaller, and one is backwards.
Compare chroma subsampling in FFmpeg. yuv420p was the smallest and the fastest, and the higher formats cost up to 65 percent more encode time for nothing.
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 actually stops you.
Read a media file's metadata with ffprobe, then watch the traps: rotation, HDR, fake image durations, missing channel layouts, and cover art as video.
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.