The Most Misunderstood Concept in Digital Media
When someone says "convert to MP4," they think they are specifying exactly what they want. But MP4 is a container, not a codec. It is like saying "put it in a box" without specifying what kind of packing material to use. The same MP4 file can contain H.264 video (universally compatible) or H.265 video (half the file size, but plays on fewer devices) or AV1 (even smaller, even more limited compatibility).
This distinction between container and codec is the single most important concept in digital media. Misunderstanding it leads to files that will not play, unnecessary quality loss, bloated file sizes, and hours of troubleshooting. Understanding it gives you complete control over how your media files behave.
This guide explains the difference in plain language, shows you why it matters, and gives you practical guidance for choosing the right container-codec combination for any situation.

The Shipping Box Analogy
Think of it this way:
- The container is the shipping box. It is the outer package that holds everything together -- the label with the address (metadata), the packing list (track information), and the actual items inside.
- The codec is how the items inside are packed. Are they wrapped in bubble wrap (high quality, more space), vacuum-sealed (compressed, less space), or just tossed in loose (uncompressed, maximum space)?
- The streams are the actual items: the video track, the audio track, subtitles, chapter markers.
Two boxes (containers) can look identical from the outside but contain completely different packing (codecs) and items (streams) inside. Conversely, the same items can be packed the same way but placed in different boxes.
This is exactly how digital media works. An MP4 file and an MKV file might contain the exact same H.264 video and AAC audio -- the only difference is the outer container. Or two MP4 files might contain completely different codecs (H.264 vs AV1), producing dramatically different file sizes and compatibility profiles.
What Is a Container?
A container (also called a wrapper or format) is a file format that packages multiple data streams into a single file. The container defines:
- How streams are interleaved -- Video and audio samples are woven together so they can be read sequentially
- Metadata storage -- Title, artist, creation date, chapter markers
- Index/seek table -- Enables jumping to any point in the file without reading everything before it
- Subtitle handling -- Whether subtitles are embedded or referenced externally
- Stream identification -- Labels for multiple audio tracks, language tags
Common Video Containers
| Container | Extension | Typical Codecs Inside | Key Feature | Best For |
|---|---|---|---|---|
| MP4 (MPEG-4 Part 14) | .mp4 | H.264, H.265, AV1, AAC | Universal compatibility | Everything (default choice) |
| MKV (Matroska) | .mkv | Almost any codec | Supports unlimited streams | Archiving, media servers |
| WebM | .webm | VP8, VP9, AV1, Vorbis, Opus | Royalty-free, web-native | Web video |
| MOV (QuickTime) | .mov | H.264, H.265, ProRes, AAC | Apple ecosystem integration | Apple workflows, editing |
| AVI | .avi | Various (limited metadata) | Legacy compatibility | Nothing modern (avoid) |
| TS (Transport Stream) | .ts | H.264, H.265, MPEG-2 | Error resilience | Broadcasting, streaming |
| FLV (Flash Video) | .flv | H.264, VP6, MP3 | Legacy Flash | Nothing (obsolete) |
| OGG | .ogg, .ogv | Theora, Vorbis | Fully open-source | Open-source projects |
Common Audio Containers
| Container | Extension | Typical Codecs | Notes |
|---|---|---|---|
| MP3 | .mp3 | MPEG-1 Audio Layer III | Container and codec are the same |
| M4A | .m4a | AAC, ALAC | MP4 container with audio only |
| OGG | .ogg | Vorbis, Opus, FLAC | Open-source container |
| FLAC | .flac | FLAC | Container and codec are the same |
| WAV | .wav | PCM (uncompressed) | Microsoft/IBM standard |
| AIFF | .aiff | PCM (uncompressed) | Apple standard |
| WebM | .webm | Vorbis, Opus | Same container as video WebM |
Note that some formats blur the line between container and codec. MP3 and FLAC are both a container and a codec -- the file format and the compression algorithm are the same thing. This is the exception, not the rule.
What Is a Codec?
A codec (coder-decoder) is an algorithm that compresses and decompresses media data. The codec determines:
- Compression efficiency -- How small the file can be at a given quality
- Visual/audio quality -- How good the output looks or sounds
- Encoding speed -- How long compression takes
- Decoding requirements -- How much CPU/GPU power is needed for playback
- Feature support -- HDR, high bit depth, alpha channels, spatial audio
Video Codecs Compared
For a comprehensive codec comparison, the video codecs explained guide covers each codec in depth. Here is the quick version:
- H.264 (AVC) -- The universal standard. Plays everywhere. Good compression. The safe choice.
- H.265 (HEVC) -- 50% smaller files than H.264 at the same quality. Limited browser support. Licensing complexity.
- VP9 -- Google's codec. Good compression, royalty-free. WebM container.
- AV1 -- The newest, best compression. Royalty-free. Slow to encode. Growing hardware support.
For the H.264 vs H.265 vs AV1 debate, see the detailed comparison.
Audio Codecs
- AAC -- The modern standard for lossy audio. Better than MP3 at the same bitrate.
- MP3 -- The legacy standard. Universal compatibility.
- Opus -- The best lossy codec available. Excellent at low bitrates.
- Vorbis -- Open-source predecessor to Opus.
- FLAC -- Lossless compression. Half the size of WAV.
- ALAC -- Apple's lossless codec. Equivalent to FLAC for Apple devices.
- PCM -- Uncompressed audio (used in WAV and AIFF).
Why the Distinction Matters
Scenario 1: "My MP4 Won't Play on My TV"
You download an MP4 file. Your TV supports MP4. But it will not play. Why?
The MP4 container holds H.265 (HEVC) video, and your TV only has an H.264 decoder. The container is compatible, but the codec inside is not. The fix is to re-encode the video from H.265 to H.264 while keeping the MP4 container:
ffmpeg -i input_h265.mp4 -c:v libx264 -crf 22 -c:a copy output_h264.mp4
Use the MP4 converter for this conversion online.
Scenario 2: "My MKV File Is Huge but My MP4 Is Tiny"
You have a 10 GB MKV file. You "convert it to MP4" using an online tool and get a 500 MB file. You think the conversion was amazing, but actually the tool re-encoded from high-quality H.264 (or lossless) to low-quality H.264, destroying significant visual quality. The size reduction came from quality loss, not from a better format.
If you had used -c copy (remux), you would have gotten a 10 GB MP4 with identical quality. If you wanted to reduce size while preserving quality, you should have re-encoded at a specific CRF value. The quality preservation guide covers the right approach.
Scenario 3: "My Web Video Looks Good in Chrome but Not Safari"
You encode your video as WebM with VP9. Chrome plays it perfectly. Safari shows nothing. The issue is that Safari (prior to version 14) did not support the VP9 codec or the WebM container.
The fix is to provide multiple sources with fallbacks. The browser format support guide has the complete compatibility matrix.

How to Check What Is Inside a File
Using FFprobe (Recommended)
ffprobe -v quiet -show_format -show_streams -print_format json input.mp4
This outputs detailed information about the container, codecs, resolution, bitrate, and audio channels.
Simplified output:
ffprobe input.mp4 2>&1 | grep -E "Stream|Duration|Input"
Example output:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
Duration: 00:05:32.18
Stream #0:0: Video: h264 (High), yuv420p, 1920x1080, 8000 kb/s, 30 fps
Stream #0:1: Audio: aac (LC), 48000 Hz, stereo, 192 kb/s
This tells you:
- Container: MP4 (mov,mp4,m4a,3gp...)
- Video codec: H.264 (High profile)
- Audio codec: AAC (Low Complexity)
- Resolution: 1920x1080
- Video bitrate: 8000 kb/s
- Audio: 48 kHz stereo at 192 kb/s
Using MediaInfo
MediaInfo is a free GUI application that displays the same information in a user-friendly format. Available for Windows, macOS, and Linux.
Using VLC
Open VLC, play the file, then go to Tools > Codec Information (or Window > Media Information on macOS). This shows the container, codecs, resolution, and bitrate.
Choosing the Right Container-Codec Combination
For Universal Sharing
MP4 + H.264 + AAC -- Plays on every device, browser, and platform. This is the "it just works" combination.
ffmpeg -i input.mov -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4
Convert any video to this combination with the MP4 converter.
For Minimum File Size
MP4 + AV1 + Opus -- The smallest files at a given quality level, but limited hardware support in 2026.
ffmpeg -i input.mov -c:v libaom-av1 -crf 30 -cpu-used 6 -c:a libopus -b:a 128k output.mp4
For Web Video
WebM + VP9 + Opus (primary) with MP4 + H.264 + AAC (fallback):
<video>
<source src="video.webm" type="video/webm" />
<source src="video.mp4" type="video/mp4" />
</video>
Use the WebM converter for VP9 encoding.
For Archiving (Maximum Quality and Flexibility)
MKV + H.264/H.265 + FLAC -- MKV supports virtually any codec and unlimited tracks. FLAC audio preserves perfect audio quality.
ffmpeg -i input.mov -c:v libx264 -crf 17 -c:a flac output.mkv
For Apple Devices
MOV + H.264 or H.265 + AAC -- Native Apple format with excellent compatibility across Apple's ecosystem.
Convert to Apple-friendly format with the MOV converter.
Pro Tip: When someone asks for "the best format," the answer is almost always MP4 + H.264 + AAC. It is not the most efficient codec (AV1 beats it), not the most flexible container (MKV beats it), and not the highest quality option (lossless codecs beat it). But it is the only combination that works everywhere, which makes it the most practical choice 95% of the time.

Container Capabilities Compared
Not all containers can hold all codecs. Here is what each container supports:
| Feature | MP4 | MKV | WebM | MOV | AVI |
|---|---|---|---|---|---|
| H.264 | Yes | Yes | No | Yes | Yes |
| H.265 | Yes | Yes | No | Yes | No |
| VP9 | Unofficial | Yes | Yes | No | No |
| AV1 | Yes | Yes | Yes | No | No |
| AAC | Yes | Yes | No | Yes | Yes |
| Opus | Yes (experimental) | Yes | Yes | No | No |
| Multiple audio tracks | Yes | Yes (unlimited) | Yes | Yes | Limited |
| Subtitles | Yes (limited) | Yes (all types) | WebVTT | Yes | No |
| Chapter markers | Yes | Yes | Yes | Yes | No |
| Streaming support | Yes (faststart) | Limited | Yes | Yes | No |
Remuxing: Changing the Container Without Quality Loss
When you only need to change the container (not the codec), remuxing is the answer. Remuxing copies the encoded streams from one container to another without re-encoding. It is:
- Instant -- No encoding/decoding processing
- Lossless -- Bit-for-bit identical quality
- Small output -- Same size as input (or very close)
# MKV to MP4 (remux -- lossless, instant)
ffmpeg -i input.mkv -c copy output.mp4
# MOV to MP4 (remux)
ffmpeg -i input.mov -c copy output.mp4
# MP4 to MKV (remux)
ffmpeg -i input.mp4 -c copy output.mkv
Remuxing only works when the target container supports the codecs in the source file. For example, you cannot remux a VP9 video into an MP4 container (officially), or put AAC audio into a WebM container.
Pro Tip: Before re-encoding any video file, always try remuxing first (-c copy). If it works, you get an instant, lossless conversion. If FFmpeg throws an error about incompatible codecs, then you know re-encoding is necessary. This two-step approach saves time and preserves quality. The video compressor handles both remuxing and re-encoding automatically, and the video trimmer can cut files without re-encoding when using stream copy mode.
The how to convert MKV to MP4 guide covers remuxing scenarios in detail.
Related Resources
- Video Codecs Explained: H.264, H.265, VP9, AV1 -- Deep dive into codecs
- H.265 vs H.264 vs AV1 -- Codec comparison
- Best Video Formats for 2024 -- Format recommendations
- Lossless vs Lossy Compression -- Compression fundamentals
- How to Preserve Quality During Conversion -- Quality preservation tips
Summary
The container is the box; the codec is how things are packed inside. Understanding this distinction solves most "why won't my file play?" problems and prevents unnecessary quality loss during conversion. When converting, always check whether you need to change the container, the codec, or both. If only the container needs to change, remux with -c copy for lossless, instant conversion. If the codec needs to change, re-encode with appropriate quality settings. And when in doubt, MP4 + H.264 + AAC is the combination that works everywhere.



