When Transcoding Makes Files Bigger: The Efficiency Truth
"Transcode = smaller" is the most common assumption in video work. Transcoding changes how a video is encoded, not its size — with the wrong settings, a bigger output is a perfectly normal result.
Cause one: the source was more aggressive than you
CRF-style parameters decide how many bytes each frame gets. If the source was encoded at CRF 20 (high quality, generous bytes) and you re-encode at CRF 28 (frugal), the file shrinks. Reverse it — a CRF 30 source re-encoded at CRF 22 — and the encoder receives a bigger byte budget, so the output grows, with zero quality gain.
This is the other face of "transcoding is lossy": lost information never returns, but the byte budget can expand. A bigger file with no quality improvement is pure wasted space.
Causes two and three: encoder efficiency and re-encode scope
Encoder efficiency also moves size: H.265 theoretically saves 30-50% over H.264, but that is an equal-quality comparison — an H.264 source that was already conservatively encoded can end up larger than an H.265 re-encode at CRF 26. Efficiency gains only cash out when settings align.
Re-encode scope is the hidden variable: the video stream gets a more efficient codec but the audio gets re-encoded upward (a 96k source track ballooned to 192k), inflating the audio half for nothing. Container overhead is usually tiny, though MKV and MP4 index structures differ slightly at the margins — pure remuxing is the operation that keeps size nearly constant.
Diagnosis and fixes
Inspect parameters before concluding anything: compare source and output codec, bitrate, resolution, frame rate and audio bitrate with an inspection tool. Output bitrate above source at unchanged resolution means conservative settings — re-encode with CRF matched to the source bitrate. Output bitrate below source but a bigger file means the audio got upgraded — pin it.
To reliably shrink: CRF from 26, audio set to keep-original or an explicit target bitrate, resolution untouched. To reliably keep size: remux instead of re-encode. Transcoding is "re-allocating bytes toward a quality target" — set the target right and size becomes a result, not a gamble.