01What it is
Portable Video Compressor (PVC) makes a video the size you ask for, in megabytes, while keeping quality as high as it reasonably can.
Under the hood it drives FFmpeg, the open-source engine that does the actual re-encoding, and FFprobe, its companion that reads information about a file (how long it is, its resolution, frame rate and audio). Both ship with the app in a folder named FFMPEG; the app looks for it beside PortableVideoCompressor.exe and one level up, so either layout works. It can process one file or a whole batch in a run, and it does everything locally, nothing is uploaded.
02Installing
PVC comes in two downloads; the app inside is the same either way, and both can set up a portable copy.
- Portable (the ZIP) is a folder you unzip anywhere writeable, including a USB drive, then run
PortableVideoCompressor.exeat its root. There is no setup step, and nothing is written outside the folder: no registry entries, no Start Menu shortcut. The root exe is a small stub that starts the app inside theAppfolder, so the folder can be moved or renamed freely; theportable.datmarker at the root is what makes the copy portable. - The setup program asks how you want it set up: for all users (an administrator prompt, Program Files), just for you (no prompt, under your profile), or as a portable copy in a folder you pick, the same result as the ZIP. The two system options get a Start Menu entry, an optional desktop icon, and a normal uninstaller in Windows' installed-apps list.
Your choices are saved in a settings.json file. The portable copy stores it beside portable.dat, so moving the folder moves your configuration with it; an installed copy keeps it in your Windows user profile at %AppData%\PortableVideoCompressor. Writes are atomic, the file is written to a temporary name and swapped into place, so a crash mid-save cannot corrupt it. Either way it is ordinary JSON you can read, back up, or delete to start fresh.
Portable on a read-only spot?
The app still runs, but it cannot save settings there. Put a portable copy somewhere writeable if you want it to remember your setup.
03System requirements
- Operating system
- Windows 10 64-bit, build 19041 (version 2004) or later, including Windows 11
- Disk space
- Room for the source files, the compressed outputs, and temporary attempt files while encoding
- GPU (optional)
- An NVIDIA (NVENC) or AMD (AMF) GPU enables hardware encoding, when the bundled FFmpeg build supports it
04What happens on the first run
Every time the app starts, it quietly checks which encoders actually work on your machine by running a string of one-second test encodes. Only the ones that pass appear in the Video Encoder list, so you never pick an option that is going to fail.
Hardware (GPU) encoders are checked in tiers, from most to least demanding:
Full profile
The app tries the encoder with its complete, high-quality settings.
Conservative profile
If that fails, it strips the advanced options an older card may not support and tries again.
Bare defaults
If needed, it falls back to the encoder's own built-in defaults.
The best tier that works becomes that machine's default for that encoder. The upshot: an older GPU that supports an encoder but not every fancy option still gets a working entry, rather than one that fails every time. No window flashes and no files are written; a healthy check takes a few seconds.
A few other launch behaviors worth knowing: starting a second copy brings the already-running window to the front instead of opening twice; the window follows your Windows light or dark theme and accent color, switching live when Windows does; and it opens at its fitted size, remembering only its position between sessions.
05Quick start
- Click Select Input Video(s), or drag files onto the window.
- Check the Output Folder. By default it follows your most recent file; pick a folder explicitly and that choice sticks until you reset it.
- Set the Target Size (MB), for example 10.
- Leave Auto mode on (recommended).
- Pick a Video Encoder. Software (AVC/H.264) is the safe default.
- Adjust Leniency if you want, then click Start Compression.
Each result is named <name>_compressed.<ext>. If a name is already taken, on disk or by two queued files wanting the same one, you are asked once per run whether to overwrite or auto-rename with a number.
06How it hits a target size
A video file is mostly a stream of data measured in bits per second, its bitrate. Because total size is roughly bitrate multiplied by duration, choosing a size in MB is really choosing a bitrate. The app works backwards from your target.
Measure the source
FFprobe reads the duration, resolution, frame rate and audio. Duration plus your target size gives the total bitrate to aim for.
Split the budget
That bitrate is divided between video and audio. On very tight targets the audio is pinned at a 64 kbps floor so the picture keeps every remaining bit.
Right-size the picture
In Auto mode the app also picks a resolution and frame rate that suit the budget, so bits are not wasted on more pixels than the bitrate can actually support.
Encode, measure, adjust
The first encode rarely lands exactly on the number, so the app measures the result and nudges the bitrate, working out the correction from how far off it was, then tries again. It repeats until the size sits inside your leniency band, always keeping the best attempt and stopping if attempts stop improving.
Two optional steps make that landing more accurate. A sample encode runs a short slice from the middle of the clip first, to calibrate the very first guess. Two-pass (on software encoders) studies the whole clip before deciding where to spend bits. Both trade a little time for a closer, cleaner result.
07Auto mode versus manual
Auto mode (recommended) handles resolution, frame rate and the audio split for you, and turns on two-pass where it is supported. It is the reliable way to hit a small target without thinking about the trade-offs.
Manual mode hands you the Height, Width and FPS fields:
- Set both Height and Width for an exact size. If they do not match the shape of the source, the picture is stretched to fit, so usually you set just one and let the other follow the aspect ratio.
- Leave both blank to keep the source resolution.
- Leave FPS blank to keep the source frame rate exactly (no conversion at all), or enter a whole number to lower it.
Encoders need even dimensions, so any odd Height or Width is rounded down to the nearest even number when you press Start, and the fields update so you can see exactly what will be used.
08Encoders and 2-pass
Two families of encoder are available, whichever your machine can run:
- Software (libx264 for H.264, libx265 for H.265): slower, very consistent, and the only ones that offer two-pass. H.264 is the most compatible choice; H.265 squeezes harder.
- GPU (NVIDIA NVENC and AMD AMF, in H.264 and H.265): much faster because your graphics card does the work, but no two-pass.
Two-pass means exactly that, two passes over the video: the first measures where the complex, bitrate-hungry moments are, and the second spends the budget with that knowledge. The result hits the size more precisely and looks better at it. Your manual two-pass preference is remembered even while a GPU encoder greys the switch out, and it returns the moment you select a software encoder again.
09Encoder tuning and color
The Encoder Tuning page gives each encoder its own profile: a speed-versus-quality preset, a content tuning (film, grain, low latency and so on), rate control, and, on NVENC, multipass. A text box shows the exact FFmpeg options; the pickers and the text stay in sync, so changing a picker rewrites the text and editing the text updates the pickers. Every change saves the instant you make it, and Reset to defaults restores the recommended profile for your machine, including the reduced profile chosen for an older GPU, rather than options the hardware cannot run.
Preserve color is a single switch that applies to every encoder profile. Off (the default) forces a maximum-compatibility color setting (BT.709 / yuv420p) so the result plays correctly everywhere; on leaves the source color description untouched.
10The quality pre-flight
Before a run starts, the app estimates each file's minimum passable size, the point below which the result would look poor, and warns you about any file whose target falls under it.
- In Auto mode, it judges the smallest configuration Auto could fall back to (roughly 480p at 24 fps), and asks "could this file pass at any settings Auto might pick?"
- In manual mode, it judges your actual settings, so pinning a high resolution or frame rate will flag more files, by design, because that is exactly what would be encoded.
When files are flagged, a dialog lists each one with its minimum passable size. From there you can uncheck files to skip just those, change the target size, continue straight to compression, or cancel the run, all before any encoding time is spent.
Quality is not the only pre-run check. Start also validates your fields (odd dimensions are snapped down to even, and the fields update so you see what will be used), skips the run entirely when every file is already at or under its target, warns when the batch's worst case plus a safety margin exceeds the free space on the output drive, and resolves output-name collisions with the single overwrite-or-rename prompt.
11The queue and per-file overrides
The Queue page lists every loaded file in processing order and becomes your live dashboard during a run. Expand any row for per-file overrides, its own target size, audio codec, container, encoder, width, height and FPS, which win over the batch settings for that one file. Clear a single file, or clear every override at once.
Overrides are checked again at the moment of encoding, so a combination that became invalid (say a WAV override after the batch container changed to MP4) fails that one file immediately with a message explaining the fix, before any time is spent on it. While a run is being prepared or is in progress the queue is read-only: rows show live status tints, and editing or dropping files is disabled until it is idle again.
12Status, results and logs
During a run you see a progress bar, elapsed time (which pauses when you pause), and a one-line status such as "Analyzing input video", "Encoding video" or "Retrying with adjusted bitrate". Pause and Resume suspend and resume the FFmpeg process itself at the operating-system level, so no work is lost and nothing re-encodes. Skip File abandons the current file, cleans up its partial work, and moves on. Stop Batch asks for confirmation, tells you how many files remain, and keeps everything already finished; the in-progress file is cleaned up completely, so no half-finished file is ever left pretending to be a result.
On the Queue page, finished rows are tinted by outcome, with a distinct notice tint when a result landed outside your leniency band. Those tints and each row's target figure are frozen at the values used for that run, so changing a setting afterwards never repaints past results. When the batch ends, a summary counts the successes, skips and failures and offers to open the output folder; if anything failed, a PVC_batch_errors text file is written there with the reason for each.
Want smaller files faster?
Lowering the resolution or frame rate shrinks a file far more than chasing the encoder. Smaller audio also leaves more room for the picture.
13Troubleshooting
- "FFmpeg not found". Restore the
FFMPEGfolder (withffmpeg.exeandffprobe.exe) at the root of the application folder, besideApp. - "Impossible target". The target is too small to hold even minimum audio for the clip's length. Raise the target or trim the source.
- "Invalid value". Target size, FPS, Height or Width is not a positive number.
- Output file locked. If the existing output is open in another program, that file is reported as failed and the fresh encode is kept beside it under a temporary name, so the work is not lost.
- GPU encoder missing or reduced. Update your graphics drivers and confirm the FFmpeg build includes NVENC or AMF. On older cards the app may settle on a conservative profile (see first run).
- A file fails only with "Preserve source color" on. Professional 4:2:2 10-bit footage is a format consumer GPU encoders cannot ingest. Use a software encoder for those files, or turn Preserve source color off.
- Unreadable or corrupt input. Each probe is time-limited, so a file that cannot be read fails cleanly with its own message instead of hanging the whole run.
- Results land outside your band. Files that come out under the leniency range, or over target, are tinted amber on the Queue page instead of green; the run still kept the closest attempt. Raising leniency widens what counts as a hit.
14Upgrading the bundled FFmpeg
FFmpeg is a drop-in part you can update yourself. Close the app, replace FFMPEG\ffmpeg.exe and FFMPEG\ffprobe.exe with new 64-bit Windows builds, and start the app again. Encoder detection re-runs at every launch, so the encoder list and per-machine default profiles re-derive against the new build; Reset all settings also re-detects on demand. Run a short test batch before relying on it.
One compatibility note
The default NVENC profiles use an option (-rc vbr_hq) that newer FFmpeg has retired in favor of a newer system. The bundled build accepts it; if a future build drops it, the launch-time tier check falls back to a working profile automatically, and the tuning page lets you adopt the modern options whenever you like.
15Uninstalling
How you remove it depends on how you installed it. A portable copy is gone the moment you delete its folder, since nothing is installed elsewhere. A system install is removed the usual way through Windows, from Add or Remove Programs; your settings folder at %AppData%\PortableVideoCompressor stays behind unless you delete it too. Either way, your source videos and compressed outputs are never touched. For licensing details, see the terms and third-party notices.
16The full manuals, as PDFs
This page is the short version. The three manuals included with the app are also viewable right here in your browser.
- README
- Setup and problem-solving: requirements, both install types, what runs before encoding, troubleshooting, upgrading FFmpeg. PDF, 78 KB
- User's Guide
- Every control and workflow, card by card and page by page. PDF, 89 KB
- Technical Specification
- The internals: the exact pipeline, encoder tiers, the retry math, and every safety check. PDF, 194 KB