The Codec Mess

You record a video on your iPhone. It won't play on your colleague's Windows laptop. It won't upload to Slack. Welcome to the codec mess.

Somewhere in every government office, every law firm, every accounting practice, and every hospital records department, there is a filing cabinet. It was emptied years ago. The contents were scanned — page by page, sometimes thousands of pages — and turned into PDFs. Digital transformation. Progress.

Except the PDFs can’t be searched.

Because a scanned document isn’t text. It’s a photograph of text. Each page is an image — a flat grid of pixels that happens to look like words. The computer sees shapes. Not letters, not sentences, not clauses. Just shapes.

You can’t Command+F a shape. You can’t copy and paste from it. You can’t index it, tag it, or extract a paragraph from page 387 without scrolling through pages 1 through 386 first.

This is the reality of millions of digitised documents worldwide. They exist in a format that looks modern but functions like the original paper. The filing cabinet was replaced by a folder on a hard drive — but the hard drive is just as dumb as the cabinet was. It holds the files. It doesn’t understand them.

Video has an equivalent problem. A file that looks like a video — .mov, .mkv, .avi — is a container, not a format. Inside that container, the video is encoded using a codec: H.264, H.265, ProRes, AV1, VP9. The codec is the compression algorithm that actually stores the frames. And not every player can read every codec. Not every platform accepts every container-codec combination.

This is why a video recorded on an iPhone in HEVC (.mov) won’t play on a Windows machine that doesn’t have the right codec pack installed. It’s why a .mkv file with H.265 content might play locally but won’t upload to a platform that only accepts H.264. The container is readable. The codec isn’t.

The fix has always been transcoding — converting the video from one codec to another. FFmpeg, the command-line tool that handles this, has been able to do it since 1999. But FFmpeg requires a command line. Most people who have a video that won’t play are not people who use command lines.

Modern browser-based transcoding changes this. Running on-device through WebAssembly, the conversion happens locally. No upload. No server. No third party processing your footage. You get a video that plays everywhere, without your file having traveled anywhere.

The codec mess was always a solvable problem. It just needed a tool that met people where they are.