Video bitrate real test - run: 2026-10-25 11:14 UTC host: Linux 6.8.0-139-generic x86_64 ffmpeg: ffmpeg version 6.1.1-3ubuntu5 Copyright (c) 2000-2023 the FFmpeg developers === 1. source clip (Wikimedia Commons, CC BY 4.0) === $ ffprobe -v error -show_entries format=duration,size,bit_rate -show_entries stream=codec_name,codec_type,width,height,r_frame_rate -of default=noprint_wrappers=1 '/home/ubuntu/rt/bit/source.webm' codec_name=vp8 codec_type=video width=1280 height=720 r_frame_rate=30000/1001 codec_name=vorbis codec_type=audio r_frame_rate=0/0 duration=38.272000 size=4469695 bit_rate=934300 exit=0 === 2. our 10 second working file, one source, constant frame rate === $ ffmpeg -v error -t 10 -i '/home/ubuntu/rt/bit/source.webm' -vf 'fps=30' -c:v libx264 -crf 22 -preset medium -an source10.mp4 -y exit=0 $ ffprobe -v error -show_entries format=duration,size,bit_rate -show_entries stream=codec_name,width,height,r_frame_rate,nb_frames -of default=noprint_wrappers=1 source10.mp4 codec_name=h264 width=1280 height=720 r_frame_rate=30/1 nb_frames=300 duration=10.000000 size=1576669 bit_rate=1261335 exit=0 === 3. encode the same file eight ways === $ ffmpeg -v error -i source10.mp4 -c:v libx264 -crf 18 -preset medium -an crf18.mp4 -y exit=0 $ ffmpeg -v error -i source10.mp4 -c:v libx264 -crf 22 -preset medium -an crf22.mp4 -y exit=0 $ ffmpeg -v error -i source10.mp4 -c:v libx264 -crf 28 -preset medium -an crf28.mp4 -y exit=0 $ ffmpeg -v error -i source10.mp4 -c:v libx264 -b:v 500k -maxrate 500k -bufsize 1000k -preset medium -an br500.mp4 -y exit=0 $ ffmpeg -v error -i source10.mp4 -c:v libx264 -b:v 1000k -maxrate 1000k -bufsize 2000k -preset medium -an br1000.mp4 -y exit=0 $ ffmpeg -v error -i source10.mp4 -c:v libx264 -b:v 2000k -maxrate 2000k -bufsize 4000k -preset medium -an br2000.mp4 -y exit=0 $ ffmpeg -v error -i source10.mp4 -c:v libx264 -b:v 4000k -maxrate 4000k -bufsize 8000k -preset medium -an br4000.mp4 -y exit=0 === 4. what each encode actually came out as === file seconds bytes container bit_rate measured avg bps busiest second bps avg Mbps crf18.mp4 10.000 1,995,894 1,596,715 1,596,715 2,473,832 1.597 crf22.mp4 10.000 1,426,160 1,140,928 1,140,928 1,654,840 1.141 crf28.mp4 10.000 688,983 551,186 551,186 801,936 0.551 br500.mp4 10.000 541,433 433,146 433,146 827,440 0.433 br1000.mp4 10.000 1,061,836 849,468 849,469 1,613,056 0.849 br2000.mp4 10.000 2,088,645 1,670,916 1,670,916 2,625,568 1.671 br4000.mp4 10.000 4,064,647 3,251,717 3,251,718 4,964,992 3.252 Formula check: size in bytes = bitrate in bits per second x seconds / 8 crf18.mp4 predicted 1,995,894 bytes actual 1,995,894 bytes difference +0.00% crf22.mp4 predicted 1,426,160 bytes actual 1,426,160 bytes difference +0.00% crf28.mp4 predicted 688,982 bytes actual 688,983 bytes difference +0.00% br500.mp4 predicted 541,432 bytes actual 541,433 bytes difference +0.00% br1000.mp4 predicted 1,061,835 bytes actual 1,061,836 bytes difference +0.00% br2000.mp4 predicted 2,088,645 bytes actual 2,088,645 bytes difference +0.00% br4000.mp4 predicted 4,064,646 bytes actual 4,064,647 bytes difference +0.00% === 5. the file we ship === -rw-rw-r-- 1 ubuntu ubuntu 1061836 Oct 25 11:15 br1000.mp4 -rw-rw-r-- 1 ubuntu ubuntu 1426160 Oct 25 11:15 crf22.mp4 -rw-rw-r-- 1 ubuntu ubuntu 1576669 Oct 25 11:15 source10.mp4 === done === === 6. the site's own video bitrate calculator on the same numbers (production site, headless Chromium) === $ node scenario-calc.cjs https://koldflux.com/tools/calculators/video-bitrate 1 10 128 TARGET FILE SIZE (MB) 1 | DURATION (s) 10 | AUDIO BITRATE (kbps) 128 TOTAL BITRATE BUDGET 839 kbps VIDEO BITRATE TO SET 711 kbps VIDEO BITRATE IN MBPS 0.71 Mbps page formula: video kbps = (target MB x 1048576 x 8 / seconds / 1000) - audio kbps no console or page errors $ ffmpeg -i source10.mp4 -c:v libx264 -b:v 711k -maxrate 711k -bufsize 1422k -preset medium -c:a aac -b:a 128k -ar 44100 -ac 2 tool-711k.mp4 tool-711k.mp4: h264 1280x720, video bit_rate 608585, duration 10.000000 s, size 765165 bytes = 0.730 MB The file is 27.03% under the 1.000 MB target: the encoder spends less than the budget it is given.