ffmpeg-windows-screen-recording
Date: 2025-11-12
Notes: compressing Windows 11 screen recording with ffmpeg
Recorded a short Windows 11 screen capture using the built-in recorder.
Source file: Screen Recording 2025-11-12 203102.mp4, about 4 MB.
Goal: get a much smaller file for sharing, while keeping UI text readable.
Below are the experiments and their approximate size results.
GPT-4: OUTPUT 1, balanced quality, fast encoding
4 MB -> 400 KB Keeps audio, reasonable quality, good default.
ffmpeg -i "Screen Recording 2025-11-12 203102.mp4" -c:v libvpx-vp9 -b:v 0 -crf 32 -cpu-used 4 -row-mt 1 -c:a libopus -b:a 96k "output1.webm"
GPT-4: OUTPUT 2, higher compression
4 MB -> 300 KB Smaller file, lower video and audio quality, slower encode.
ffmpeg -i "Screen Recording 2025-11-12 203102.mp4" -c:v libvpx-vp9 -b:v 0 -crf 38 -cpu-used 2 -row-mt 1 -c:a libopus -b:a 64k "output2.webm"
GPT-4: OUTPUT 3, prioritize text clarity
4 MB -> 400 KB Upscales slightly with Lanczos and uses lower crf for sharper text.
ffmpeg -i "Screen Recording 2025-11-12 203102.mp4" -vf "scale=1002:-1:flags=lanczos" -c:v libvpx-vp9 -b:v 0 -crf 30 -cpu-used 3 -row-mt 1 -c:a libopus -b:a 96k "output3.webm"
GPT-4: OUTPUT 5, aggressive compression, no audio
4 MB -> 200 KB Very small file, video only, visible quality loss.
ffmpeg -i "Screen Recording 2025-11-12 203102.mp4" -c:v libvpx-vp9 -b:v 0 -crf 45 -cpu-used 5 -row-mt 1 -an "output5.webm"
GPT 5.1 Thinking: OUTPUT1, full width, 15 fps, balanced
4 MB -> 250 KB Keeps original width, reduces frame rate, focuses on text clarity.
ffmpeg -i "Screen Recording 2025-11-12 203102.mp4" -vf "fps=15,scale=1002:-1:flags=lanczos" -c:v libvpx-vp9 -b:v 0 -crf 30 -row-mt 1 -c:a libopus -b:a 64k -ac 2 "Screen Recording 2025-11-12 203102_v1_15fps_1002w_crf30.webm"
GPT 5.1 Thinking: OUTPUT2, 800 px width, 15 fps, smaller size
4 MB -> 200 KB Downscales width to 800, still 15 fps, trades some sharpness for size.
ffmpeg -i "Screen Recording 2025-11-12 203102.mp4" -vf "fps=15,scale=800:-1:flags=lanczos" -c:v libvpx-vp9 -b:v 0 -crf 32 -row-mt 1 -c:a libopus -b:a 64k -ac 2 "Screen Recording 2025-11-12 203102_v2_15fps_800w_crf32.webm"
GPT 5.1 Thinking: OUTPUT4, full width, 10 fps, higher quality text
4 MB -> 250 KB Lowers frame rate to 10 fps, improves crf for cleaner UI text.
ffmpeg -i "Screen Recording 2025-11-12 203102.mp4" -vf "fps=10,scale=1002:-1:flags=lanczos" -c:v libvpx-vp9 -b:v 0 -crf 28 -row-mt 1 -c:a libopus -b:a 64k -ac 2 "Screen Recording 2025-11-12 203102_v4_10fps_1002w_crf28.webm"
GPT 5.1 Thinking: OUTPUT_MERGED, 800 px, 10 fps, no audio
Target: compromise between OUTPUT2 and OUTPUT4, no audio.
ffmpeg -i "Screen Recording 2025-11-12 203102.mp4" -vf "fps=10,scale=800:-1:flags=lanczos" -c:v libvpx-vp9 -b:v 0 -crf 30 -row-mt 1 -an "Screen Recording 2025-11-12 203102_merged_10fps_800w_crf30_noaudio.webm"
GPT 5.1 Instant: simple vp9 with bitrate
4 MB -> 160 KB Uses target bitrate instead of crf, keeps audio at 96 kbps.
ffmpeg -i "Screen Recording 2025-11-12 203102.mp4" -c:v libvpx-vp9 -b:v 1.5M -pix_fmt yuv420p -row-mt 1 -threads 4 -c:a libopus -b:a 96k output1.webm