What Pretty Good Pretty Good Actually Does

Pretty Good Pretty Good is a utility for batching media file conversions and metadata cleanup. It handles video transcoding, audio track stripping, subtitle embedding, and basic file renaming — all in a single pass. The interface is plain. The backend uses FFmpeg as its core engine and wraps it in a Python script that reads a JSON config file you write by hand or through the included UI editor. I started using it about three years ago when I had a folder of 400+ camera raw reference videos that needed to be transcoded to h.265 for archival storage. I tried several GUI tools before settling on PGPG because it let me script entire folders with preset quality tiers without opening a single window. That matters when you don't want to babysit a process running overnight.

Pretty Good Pretty Good Setup and Basic Usage

Download it from their GitHub releases page. The latest version drops a standalone executable on macOS and Windows, and a Python package if you want to modify the scripts yourself. Unpack it. Run the setup wizard once — it asks for your default output directory and which codecs you want to keep. After that, just drop an input folder onto the app window or paste the path into the config editor. Here is the part most guides skip. PGPG does not auto-detect whether your source files contain multiple audio tracks embedded in a single container. If your MP4 has a main English stream, a commentary track, and a stereo mix, the default behavior will strip everything except the first track. In my case, that meant losing a French audio track on a batch of multilingual release candidates. The workaround was editing the config to include a -map 0:a? flag in the custom FFmpeg args field, which tells the encoder to keep all available audio streams instead of silently dropping them.

Configuration File Breakdown

The JSON config file is where the actual work happens. It looks like this: {
"input_dir": "/path/to/source",
"output_dir": "/path/to/output",
"codec": "libx265",
"crf": 23,
"preset": "medium",
"audio_remap": true,
"subtitle_mode": "burn",
"rename_pattern": "{original_name}_{date}"}
The fields are mostly self-explanatory, but a few require attention. audio_remap controls whether all embedded audio tracks are preserved or reduced to the primary stream. Set it to false only if you are deliberately downmixing. subtitle_mode accepts "burn," "embed," or "strip." Burning works for static SRT files but will fail on PGS or DVD subtitles unless you convert them first, which PGPG does not do automatically.

Get the Full Details

Who Says Pretty Pretty Good
Who Says Pretty Pretty Good

I also learned the hard way that crf values below 18 on visually complex source material can cause encoding times to balloon without visible quality gain. A CRF of 23 to 26 is the sweet spot for most use cases. Going lower than 23 on 4K content usually adds nothing perceptible while tripling your encode time.

Batch Processing Edge Cases

There are three scenarios where PGPG will quietly produce bad output, and none of them are documented in the readme. First, files with variable frame rate sources — especially screen captures or gameplay footage — will produce stuttered output if you do not force a fixed frame rate in the custom args. Add -vf setpts=2.5*PTS (adjust the multiplier to match your source FPS) to the advanced args box. Without it, your output will look fine in a player that compensates for VFR but will break in any other environment. Second, PGPG does not handle filename collisions. If two source files share the same base name across different subdirectories, the second file silently overwrites the first in the output folder. I lost an entire batch of incorrectly named test recordings this way. The fix is enabling the rename pattern with a {folder} placeholder so each output file carries its original directory name as a prefix.

Third, and this is the one nobody mentions, PGPG's progress reporting is broken for files smaller than 50 MB. The progress bar stays at zero percent until the file is completely done, then jumps to 100 percent in one step. If you are processing a folder of short clips, you will have no idea whether the job is stuck or simply moving slowly. My workaround was running it with the --verbose flag and tailing the log file instead of watching the UI.

Pretty, Pretty, Pretty Good | Book by Josh Levine | Official Publisher Page | Simon & Schuster AU
Pretty, Pretty, Pretty Good | Book by Josh Levine | Official Publisher Page | Simon & Schuster AU

When Pretty Good Pretty Good Falls Apart

PGPG is not a universal solution. It struggles with DRM-protected content, Blu-ray structures, and any workflow that requires format conversion beyond straight transcoding. If you need to rip a commercial DVD or convert between fundamentally different container formats, you should use a dedicated ripper alongside it rather than expecting PGPG to handle everything. The tool also does not support GPU acceleration on the Windows build. Encoding runs entirely on CPU, which means a Ryzen 9 will outperform a Core i7, but neither will come close to NVENC or QuickSync speeds. If encode time matters to you, stick to hardware-accelerated alternatives for the heavy lifting and use PGPG only for the metadata and post-processing steps it does well. I still recommend it for batch cleanup tasks where you have hundreds of files with inconsistent naming, stray audio tracks, or burned-in subtitle issues. It is not elegant, the documentation assumes you already know how FFmpeg works, and the UI has not changed in years, but for what it does, it does it reliably once you understand its blind spots.