A portable Electron app that compresses any video down to a target file size in MB — built primarily for sending clips in Discord, where the free tier caps uploads around 10-20 MB. You drop a video, tell it how big the result should be, and it figures out the bitrate needed to land there, then re-encodes with bundled FFmpeg.
Important
Choose the right download before installing:
VCompress-Fast.zip— fastest NVIDIA GPU encoding, up to 40% faster than Compatible on supported systems. Uses BtbN FFmpeg and requires an NVIDIA driver 610.00 or newer. Best for modern RTX systems.VCompress-Compatible.zip— recommended when the NVIDIA driver is below610.00, or when Fast says NVENC is unavailable. Uses Gyan FFmpeg and supports older NVIDIA driver branches, including many GTX 10xx / GTX 16xx PCs.
GPU codec support still depends on the hardware: AV1 NVENC requires RTX 40-series or newer; GTX 10xx / GTX 16xx use H.264 or H.265.
Drop a video on the card or click to browse. You get one card with all the quick settings:
- Size — target output in megabytes.
- Resolution — output resolution,
Keep Originalkeeps source size. - FPS — output frame rate, or tick
Match Source FPSin Settings to pull it from the loaded file. - Audio —
Removestrips sound,Audio Onlyexports MP3, or pick a bitrate 96–320 kbps. - Compress — starts the job; shows progress and elapsed time while running.
- Save Location — where the result lands, plus
Show in folderafter finish.
Trim a segment before rendering. You can scrub the timeline, drag the range, and:
- Play / Pause and frame-step buttons under the player
- Zoom badge — current zoom level; scroll the mouse wheel over the timeline to zoom in/out
- Ctrl + scroll wheel — step frame-by-frame without moving the cursor
- Trim left / Trim right — snap the selection to the playhead
- Compress on the toolbar renders only the selected range
Fine-grained encoding options for the current run. These are applied to the next compression you start, not as app defaults:
- Encoding Device —
GPUuses your graphics card for speed,CPUis slower but works everywhere. CPU also hits the target size more precisely — its 2-pass encode analyses the video first, then encodes with a tighter bitrate budget than the single-pass GPU path. - Video Codec —
H.264for maximum compatibility,H.265saves more size,AV1gives the best quality per megabyte but encodes slower and needs a modern player (AV1 hardware encoding requires RTX 40-series+). - Quality Bias —
Faster Encode,BalancedorBetter Quality: how much to trade encode time vs picture quality at the same target size. - Audio Mode —
Compressre-encodes sound to your chosen bitrate,Keep Originalpasses it through untouched. - Match Source FPS — read FPS from the loaded video instead of typing it.
- Padding — pads the file with zero bytes to hit exactly the target size
- Size Tolerance MB — acceptable
-/+range around the target; leaveAnyto accept whatever the encoder produces.
Startup defaults for new files. Changes here are saved to compressor_settings.json and used the next time the app opens — while Settings applies only to the current run.
Includes Overwrite Output: off (default) — re-compressing the same video produces name (1).mp4, name (2).mp4… like Explorer copies; on — replaces the previous result in place.
Pick which source audio tracks go into the output. Tracks carry their real names from the file metadata (e.g. System sounds / Microphone for NVIDIA App recordings), so you always know what you're keeping. Uncheck what you don't need.
Everything the encoder says: detected duration, bitrate, probes, retries, final size and full FFmpeg output. Copy Logs copies it for bug reports.
Two ways to use it:
Portable (recommended) — download the release archive, unpack anywhere and run VCompress.exe. FFmpeg is bundled, nothing else is needed.
From source — needs Node.js:
setup.bat :: installs Node.js (if missing) and deps
run.bat :: visible console
run_hidden.vbs :: no console windowBuild release zips yourself (both variants in one run):
build-release.batThis produces dist\VCompress-Fast-win64.zip (BtbN FFmpeg) and
dist\VCompress-Compatible-win64.zip (Gyan FFmpeg) — icon embedded, correct
FFmpeg placed into each automatically. Requires the two binaries to exist
once: put them into ffmpeg\btbn\ffmpeg.exe and ffmpeg\gyan\ffmpeg.exe.
Run with fast or compatible to build a single variant.
Build just an unpacked portable folder (no zip, current ffmpeg\bin\):
npm run build:win
node_modules\rcedit\bin\rcedit-x64.exe dist\win-unpacked\VCompress.exe --set-icon build\icon.ico(The second line embeds the app icon into the .exe so Explorer shows it — electron-builder's own icon step is disabled to avoid its winCodeSign download.)
The output lands in dist\ (an unpacked portable folder with VCompress.exe).
- Windows 10/11
- Node.js (setup.bat installs it via winget if missing) — only for running from source
- FFmpeg binary — bundled in each release. Compatible uses the gyan.dev full build for broader old-driver support. Fast uses a fixed BtbN build and requires NVIDIA driver
610.00+for NVENC. For source builds, putffmpeg.exeintoffmpeg/bin/.
- For Discord's ~20 MB limit, pick
Size = 20andAudio = 96 kbps— the app handles the bitrate math and retries until it fits the size tolerance. - AV1 needs a recent GPU (or
libsvtav1on CPU) — H.265 is a safer pick if you're not sure. - Output never exceeds your target size: if the first encode lands over the limit, the app recalculates bitrate and re-encodes automatically.
- Hardware encoders have a minimum bitrate floor (~0.5 Mbps at 1080p). If your target is very small for a long video, the app warns you in the log before encoding and suggests lowering the resolution or trimming the video.
- Very aggressive targets on damaged recordings (NVIDIA App/ShadowPlay glitches) are detected and reported in the log — trim the broken part in the Clip tab for a clean result.
MIT — see LICENSE.

