Documentation

How it works, end to end

Install it, run your first compression, then go as deep as you like: how the app actually hits a size in megabytes, how Auto mode protects quality, and what to do when something misbehaves.

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

Run the installer and choose how you want it set up:

  • Portable keeps everything in one folder you choose, which can live anywhere writeable, including a USB drive. Nothing is added to your system and nothing outside the folder is changed.
  • System is a standard Windows install with a Start Menu shortcut and an Add or Remove Programs entry.

Your choices are saved in a settings.json file. In a portable install it sits next to the program, so moving the folder moves your configuration with it; a system install keeps it in your Windows user profile (under AppData) instead. Writes are atomic, the file is written to a temporary name and swapped into place, so a crash mid-save cannot corrupt it.

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:

1

Full profile

The app tries the encoder with its complete, high-quality settings.

2

Conservative profile

If that fails, it strips the advanced options an older card may not support and tries again.

3

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. A short FFmpeg window may flash during this check, that is normal.

05Quick start

  1. Click Select Input Video(s), or drag files onto the window.
  2. Check the Output Folder. By default it follows your most recent file; pick a folder explicitly and that choice sticks until you reset it.
  3. Set the Target Size (MB), for example 10.
  4. Leave Auto mode on (recommended).
  5. Pick a Video Encoder. Software (AVC/H.264) is the safe default.
  6. Adjust Leniency if you want, then click Start Compression.

Each result is named <name>_compressed.<ext>. If that name already exists, 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.

1

Measure the source

FFprobe reads the duration, resolution, frame rate and audio. Duration plus your target size gives the total bitrate to aim for.

2

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.

3

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.

4

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.

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; Stop cancels the run and 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 FFMPEG folder (with ffmpeg.exe and ffprobe.exe) next to the program or one level up.
  • "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).
  • 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.

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. 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. Either way, your source videos and compressed outputs are never touched. For licensing details, see the terms and third-party notices.