What Are H.264 Profiles?
The H.264 standard (also called AVC or MPEG-4 Part 10) defines a large set of coding tools — algorithms for compressing video frames into smaller data. Profiles are subsets of this tool set. Each profile enables a specific combination of features, and higher profiles include everything from lower ones plus additional techniques.
Think of profiles as difficulty levels for the decoder. The Baseline profile uses only the simplest tools, so any hardware — even a 2008-era phone — can decode it. The High profile uses every tool available, achieving the best compression but requiring more processing power from the playback device.
The three most common profiles are Baseline, Main, and High. There are others (Extended, High 10, High 4:2:2, High 4:4:4 Predictive), but they serve niche use cases like 10-bit color or professional chroma subsampling. For standard 8-bit video destined for consumer playback, Baseline, Main, and High are the only profiles that matter.
Every H.264 encoder — FFmpeg, HandBrake, Adobe Media Encoder, Apple Compressor — lets you choose a profile. The choice affects three things: compression efficiency (file size at a given quality), encoding speed (how long the encode takes), and decoder compatibility (which devices can play the file).
Baseline Profile
The Baseline profile is the simplest and most restricted subset of H.264. It was designed for low-power devices and real-time applications where decoding latency must be minimal.
Key characteristics of Baseline:
- I and P slices only — the encoder can use intra-coded frames (I-frames, which stand alone) and predictive frames (P-frames, which reference one previous frame). There are no B-frames.
- CAVLC entropy coding — Context-Adaptive Variable-Length Coding is a simpler, faster entropy coder. It compresses the quantized transform coefficients into a bitstream, but it is less efficient than the alternative (CABAC).
- No weighted prediction — the encoder cannot use weighted references for fade-ins, fade-outs, or cross-dissolves, resulting in larger file sizes during transitions.
- 4x4 transforms only — the spatial transform that converts pixel blocks into frequency coefficients is limited to 4x4 blocks.
Because it lacks B-frames and CABAC, Baseline produces the largest files of the three profiles at any given quality target. A typical Baseline encode is 10–20% larger than the same content encoded with High profile at the same CRF value.
When to use Baseline: real-time video conferencing (where B-frame latency is unacceptable), legacy IP cameras, very old Android devices (pre-2011), and embedded systems with limited processing power. In 2026, these use cases are increasingly rare.
ffmpeg -i input.mov -c:v libx264 -profile:v baseline -level 3.0 -crf 23 -c:a aac -b:a 192k -movflags +faststart output.mp4
Main Profile
The Main profile adds two critical features on top of Baseline: B-frames and CABAC entropy coding. These two additions alone account for the majority of Main's compression advantage.
B-frames (Bidirectional predictive frames) can reference both past and future frames simultaneously. This is particularly effective for slow-motion scenes, static backgrounds, and any content where future frames contain useful prediction data. A typical encode uses 2–3 B-frames between each pair of reference frames. The trade-off is a small increase in encoding complexity and a decoding latency of a few frames — imperceptible for file playback but problematic for real-time video calls.
CABAC (Context-Adaptive Binary Arithmetic Coding) replaces CAVLC as the entropy coder. CABAC uses arithmetic coding with context models to compress the bitstream more efficiently. In practice, CABAC saves 10–15% bitrate compared to CAVLC at the same visual quality. The cost is higher CPU usage during both encoding and decoding, but every device made since approximately 2010 handles CABAC without difficulty.
Main profile also enables weighted prediction for P-frames, which improves compression during fades and scene transitions. The combination of B-frames, CABAC, and weighted prediction makes Main roughly 10–12% more efficient than Baseline.
When to use Main: broadcast television (DVB-T uses Main profile), older streaming setups, and scenarios where you want a middle ground between compatibility and compression. However, since High profile is supported by virtually every device that supports Main, there is little practical reason to choose Main over High in 2026.
ffmpeg -i input.mov -c:v libx264 -profile:v main -level 4.0 -crf 23 -c:a aac -b:a 192k -movflags +faststart output.mp4
High Profile
The High profile is the most feature-complete profile used for standard 8-bit video. It adds several tools on top of Main that further improve compression efficiency.
8x8 integer transforms are the biggest addition. While Baseline and Main are limited to 4x4 transform blocks, High profile can use 8x8 blocks for areas with less spatial detail. Larger transform blocks are more efficient for smooth gradients, sky, and low-texture areas because they capture low-frequency information in fewer coefficients. For detailed areas, the encoder still falls back to 4x4 transforms. This adaptive block size selection saves 5–10% bitrate over Main profile.
Quantization scaling matrices allow the encoder to weight different frequency components during quantization. This means the encoder can preserve detail in perceptually important frequencies while compressing less important frequencies more aggressively. It is similar to how JPEG uses different quantization tables for luminance and chrominance.
Separate Cb and Cr quantization control lets the encoder treat the two chroma channels independently, providing finer control over color compression.
High profile is the default profile in FFmpeg’s libx264 encoder. It is also the required profile for Blu-ray Disc, the recommended profile for YouTube and Vimeo uploads, and the standard for all major streaming services. When someone says "H.264" without specifying a profile, they almost certainly mean High profile.
ffmpeg -i input.mov -c:v libx264 -profile:v high -level 4.1 -crf 23 -c:a aac -b:a 192k -movflags +faststart output.mp4
FFmpeg defaults to High profile. If you do not specify -profile:v at all, libx264 automatically uses High profile. In 2026, High profile is supported by virtually every device manufactured since 2012. There is almost never a reason to use Baseline or Main.
Compression Efficiency Comparison
The following table compares the three profiles at the same visual quality (CRF 23). File sizes are relative to High profile, which serves as the 100% baseline. Higher percentages mean larger files for the same quality.
| Profile | Relative File Size | Key Features | B-Frames | CABAC | 8x8 Transform |
|---|---|---|---|---|---|
| Baseline | ~115% | I + P slices only, CAVLC | No | No | No |
| Main | ~105% | + B-frames, CABAC, weighted pred | Yes | Yes | No |
| High | 100% (reference) | + 8x8 transforms, quant matrices | Yes | Yes | Yes |
The numbers above are typical averages across a range of content types (talking head, action footage, screen recordings). The actual difference varies by content: highly detailed footage benefits more from 8x8 transforms (wider gap between Main and High), while fast-action content benefits more from B-frames (wider gap between Baseline and Main).
Compatibility Matrix
In 2026, the compatibility question is largely settled. Every modern device supports High profile. The table below shows exactly which devices support each profile.
| Device / Platform | Baseline | Main | High |
|---|---|---|---|
| iPhone 3GS+ (2009–present) | Yes | Yes | Yes |
| Android 3.0+ (2011–present) | Yes | Yes | Yes |
| All modern browsers (Chrome, Firefox, Safari, Edge) | Yes | Yes | Yes |
| YouTube, Vimeo, Twitch | Yes | Yes | Recommended |
| Smart TVs (2012–present) | Yes | Yes | Yes |
| Blu-ray players | Yes | Yes | Required |
| Legacy webcams, old IP cameras (pre-2010) | Yes | Varies | No |
| Feature phones (pre-smartphone era) | Yes | No | No |
The only devices that cannot play High profile are legacy hardware from before 2010 — old IP cameras, feature phones, and first-generation streaming sticks. If your target audience uses any device purchased in the last 14 years, High profile is safe.
Which Profile Should You Use?
The answer for 2026 is straightforward: use High profile. It is the FFmpeg default, the Blu-ray standard, and the recommended setting for every major streaming platform. You get the best compression efficiency and the smallest files at any given quality level.
The only exceptions are extremely niche:
- Real-time video conferencing on legacy systems — Baseline eliminates B-frame latency, which matters for sub-100ms round-trip communication. Modern WebRTC implementations handle this at the application layer, but some older SIP-based systems require Baseline.
- Security cameras and IoT devices — some budget IP cameras from before 2010 only decode Baseline. If you are feeding video to such a device, you have no choice.
- Regulatory compliance — certain broadcast standards (e.g., some DVB-T configurations) mandate Main profile. Check your specific broadcast specification.
For everything else — web video, social media, file sharing, archival, presentations, email attachments — High profile is the correct choice. Our converter uses High profile automatically when encoding MOV to MP4, ensuring the best balance of quality, file size, and universal compatibility.
A Note on Levels
Profiles define which coding tools are available. Levels define the limits of those tools — maximum resolution, frame rate, bitrate, and reference frames. The most commonly used levels are:
| Level | Max Resolution | Max Frame Rate | Max Bitrate (High) |
|---|---|---|---|
| 3.0 | 720x576 | 25 fps | 12.5 Mbps |
| 3.1 | 1280x720 | 30 fps | 17.5 Mbps |
| 4.0 | 1920x1080 | 30 fps | 25 Mbps |
| 4.1 | 1920x1080 | 30 fps | 62.5 Mbps |
| 4.2 | 1920x1080 | 60 fps | 62.5 Mbps |
| 5.1 | 3840x2160 | 30 fps | 300 Mbps |
For 1080p content, Level 4.1 is the standard choice and what most encoders select automatically. For 4K content, Level 5.1 is required. In most cases, you do not need to set the level manually — FFmpeg's libx264 auto-detects the appropriate level based on your video resolution and frame rate.
FFmpeg Commands for Each Profile
Here are complete FFmpeg commands for encoding with each profile. All three produce the same visual quality (CRF 23) but differ in file size due to the profile's compression efficiency:
# Baseline — largest file, widest legacy compatibility
ffmpeg -i input.mov -c:v libx264 -profile:v baseline -level 3.0 -crf 23 -c:a aac -b:a 192k -movflags +faststart output_baseline.mp4
# Main — ~10% smaller, adds B-frames and CABAC
ffmpeg -i input.mov -c:v libx264 -profile:v main -level 4.0 -crf 23 -c:a aac -b:a 192k -movflags +faststart output_main.mp4
# High — smallest file, best compression (FFmpeg default)
ffmpeg -i input.mov -c:v libx264 -profile:v high -level 4.1 -crf 23 -c:a aac -b:a 192k -movflags +faststart output_high.mp4
To check which profile an existing MP4 uses, run:
ffprobe -v error -select_streams v:0 -show_entries stream=profile input.mp4
This outputs the profile name (Baseline, Main, or High) so you can verify your encode settings or check a file you received from someone else.