Format Compatibility & Conversion Guide
Complete guide to media format support, codec recommendations, and conversion best practices.
Image Format Support
ImageMagick Formats
Raster Formats (Full Support):
- JPEG (.jpg, .jpeg) - Lossy, universal
- PNG (.png) - Lossless, transparency
- WebP (.webp) - Modern, lossy/lossless
- GIF (.gif) - Animation, limited colors
- TIFF (.tif, .tiff) - Professional, lossless
- BMP (.bmp) - Uncompressed, legacy
- ICO (.ico) - Icons, multi-size
Raw Formats (Read Support):
- CR2, NEF, ARW, DNG (Canon, Nikon, Sony, Adobe RAW)
- Requires dcraw or ufraw-batch
Vector Formats (Limited):
- SVG (.svg) - Read only, converts to raster
- PDF (.pdf) - Read/write, may have policy restrictions
Other Formats:
- HEIC (.heic) - Apple format, requires libheif
- AVIF (.avif) - Next-gen, requires libavif
- PSD (.psd) - Photoshop, basic support
FFmpeg Image Support
Input Formats:
- JPEG, PNG, BMP, TIFF, WebP, GIF
- Image sequences (frame_%04d.png)
Output Formats:
- JPEG, PNG, BMP, TIFF
- Video from images
Video Format Support
Container Formats
Universal Containers:
- MP4 (.mp4) - Most compatible, streaming
- MKV (.mkv) - Feature-rich, flexible
- WebM (.webm) - Web-optimized, open
- AVI (.avi) - Legacy, broad support
- MOV (.mov) - Apple, professional
Streaming Containers:
- TS (.ts) - Transport stream, HLS segments
- M3U8 (.m3u8) - HLS playlist
- MPD (.mpd) - DASH manifest
- FLV (.flv) - Flash (legacy)
Professional Formats:
- ProRes (.mov) - Apple professional
- DNxHD/DNxHR (.mxf, .mov) - Avid professional
- MXF (.mxf) - Broadcast
Video Codecs
Modern Codecs:
- H.264/AVC (libx264) - Universal, excellent balance
- H.265/HEVC (libx265) - Better compression, 4K
- VP9 (libvpx-vp9) - Open, YouTube
- AV1 (libaom-av1, libsvtav1) - Next-gen, best compression
Legacy Codecs:
- MPEG-4 (mpeg4) - Older devices
- MPEG-2 (mpeg2video) - DVD, broadcast
- VP8 (libvpx) - WebM predecessor
Professional Codecs:
- ProRes (prores) - Apple post-production
- DNxHD (dnxhd) - Avid editing
- Uncompressed (rawvideo) - Maximum quality
Audio Codecs
Modern Codecs:
- AAC (aac) - Universal, streaming
- Opus (libopus) - Best low-bitrate
- MP3 (libmp3lame) - Universal compatibility
Lossless Codecs:
- FLAC (flac) - Open, archival
- ALAC (alac) - Apple lossless
- WAV (pcm_s16le) - Uncompressed
Other Codecs:
- Vorbis (libvorbis) - Open, WebM
- AC-3 (ac3) - Dolby Digital, surround
- DTS (dts) - Cinema surround
Format Recommendations
Use Case Matrix
| Use Case |
Image Format |
Video Container |
Video Codec |
Audio Codec |
| Web general |
JPEG 85% |
MP4 |
H.264 |
AAC 128k |
| Web transparency |
PNG |
- |
- |
- |
| Web modern |
WebP |
WebM |
VP9 |
Opus |
| Social media |
JPEG 85% |
MP4 |
H.264 |
AAC 128k |
| 4K streaming |
- |
MP4 |
H.265 |
AAC 192k |
| Archive |
PNG/TIFF |
MKV |
H.265 CRF 18 |
FLAC |
| Email |
JPEG 75% |
- |
- |
- |
| Print |
TIFF/PNG |
- |
- |
- |
| YouTube |
- |
MP4/WebM |
H.264/VP9 |
AAC/Opus |
| Live stream |
- |
FLV |
H.264 |
AAC |
| Editing |
- |
MOV/MXF |
ProRes/DNxHD |
PCM |
Platform Compatibility
Web Browsers (2025):
- Images: JPEG, PNG, WebP, GIF, SVG
- Video: MP4 (H.264), WebM (VP9), MP4 (AV1)
- Audio: AAC, MP3, Opus, Vorbis
Mobile Devices:
- iOS: JPEG, PNG, HEIC, MP4 (H.264/H.265), AAC
- Android: JPEG, PNG, WebP, MP4 (H.264/H.265), AAC
Smart TVs:
- Most: MP4 (H.264), AAC
- Modern: MP4 (H.265), AC-3
Social Media:
- All platforms: JPEG, MP4 (H.264), AAC
Quality vs Size Trade-offs
Image Quality Comparison
JPEG Quality Levels:
- 95-100: ~5-10 MB (large image), minimal artifacts
- 85-94: ~1-3 MB, imperceptible loss
- 75-84: ~500 KB-1 MB, slight artifacts
- 60-74: ~200-500 KB, visible artifacts
- Below 60: <200 KB, poor quality
Format Comparison (Same quality):
- WebP: 25-35% smaller than JPEG
- HEIC: 40-50% smaller than JPEG
- AVIF: 50-60% smaller than JPEG
- PNG: 2-5x larger than JPEG (lossless)
Video Quality Comparison
H.264 CRF Values:
- CRF 18: Visually lossless, ~8-15 Mbps (1080p)
- CRF 23: High quality, ~4-8 Mbps (1080p)
- CRF 28: Medium quality, ~2-4 Mbps (1080p)
Codec Comparison (Same quality):
- H.265: 40-50% smaller than H.264
- VP9: 30-40% smaller than H.264
- AV1: 50-60% smaller than H.264
Audio Quality Comparison
AAC Bitrates:
- 320 kbps: Transparent, archival
- 192 kbps: High quality, music
- 128 kbps: Good quality, streaming
- 96 kbps: Acceptable, low bandwidth
- 64 kbps: Poor, voice only
Codec Efficiency (Same quality):
- Opus: Best at low bitrates (<128k)
- AAC: Best overall balance
- MP3: Less efficient but universal
Conversion Best Practices
Image Conversions
PNG to JPEG:
# Standard conversion
magick input.png -quality 85 -strip output.jpg
# With transparency handling
magick input.png -background white -flatten -quality 85 output.jpg
JPEG to WebP:
# FFmpeg
ffmpeg -i input.jpg -quality 80 output.webp
# ImageMagick
magick input.jpg -quality 80 output.webp
RAW to JPEG:
# Requires dcraw
magick input.CR2 -quality 90 output.jpg
HEIC to JPEG:
# Requires libheif
magick input.heic -quality 85 output.jpg
Video Conversions
MKV to MP4:
# Copy streams (fast)
ffmpeg -i input.mkv -c copy output.mp4
# Re-encode if needed
ffmpeg -i input.mkv -c:v libx264 -crf 23 -c:a aac output.mp4
AVI to MP4:
# Modern codecs
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac output.mp4
MOV to MP4:
# Copy if H.264 already
ffmpeg -i input.mov -c copy output.mp4
# Convert ProRes to H.264
ffmpeg -i input.mov -c:v libx264 -crf 18 -c:a aac output.mp4
Any to WebM:
# VP9 encoding
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm
Audio Conversions
Extract Audio from Video:
# Keep original codec
ffmpeg -i video.mp4 -vn -c:a copy audio.m4a
# Convert to MP3
ffmpeg -i video.mp4 -vn -q:a 0 audio.mp3
# Convert to FLAC (lossless)
ffmpeg -i video.mp4 -vn -c:a flac audio.flac
Audio Format Conversion:
# WAV to MP3
ffmpeg -i input.wav -c:a libmp3lame -b:a 192k output.mp3
# MP3 to AAC
ffmpeg -i input.mp3 -c:a aac -b:a 192k output.m4a
# Any to Opus
ffmpeg -i input.wav -c:a libopus -b:a 128k output.opus
Codec Selection Guide
Choose H.264 When:
- Maximum compatibility needed
- Targeting older devices
- Streaming to unknown devices
- Social media upload
- Fast encoding required
Choose H.265 When:
- 4K video encoding
- Storage space limited
- Modern device targets
- Archival quality needed
- Bandwidth constrained
Choose VP9 When:
- YouTube upload
- Open-source requirement
- Chrome/Firefox primary
- Royalty-free needed
Choose AV1 When:
- Future-proofing content
- Maximum compression needed
- Encoding time not critical
- Modern platform targets
Format Migration Strategies
Archive to Web
# High-res archive -> Web-optimized
for img in archive/*.tif; do
base=$(basename "$img" .tif)
magick "$img" -resize 2000x2000\> -quality 85 -strip "web/${base}.jpg"
magick "$img" -resize 2000x2000\> -quality 85 "web/${base}.webp"
done
Legacy to Modern
# Convert old formats to modern codecs
for video in legacy/*.avi; do
base=$(basename "$video" .avi)
ffmpeg -i "$video" \
-c:v libx264 -crf 23 -preset slow \
-c:a aac -b:a 128k \
"modern/${base}.mp4"
done
Multi-Format Publishing
# Create multiple formats for compatibility
input="source.mp4"
# Modern browsers
ffmpeg -i "$input" -c:v libx264 -crf 23 -c:a aac output.mp4
ffmpeg -i "$input" -c:v libvpx-vp9 -crf 30 -c:a libopus output.webm
# Images
ffmpeg -ss 5 -i "$input" -vframes 1 poster.jpg
magick poster.jpg -quality 80 poster.webp
Troubleshooting
Unsupported Format
# Check FFmpeg formats
ffmpeg -formats
# Check ImageMagick formats
magick identify -list format
# Install missing codec support
sudo apt-get install libx264-dev libx265-dev libvpx-dev
Compatibility Issues
# Force compatible encoding
ffmpeg -i input.mp4 \
-c:v libx264 -profile:v high -level 4.0 \
-pix_fmt yuv420p \
-c:a aac -b:a 128k \
output.mp4
Quality Loss
# Avoid multiple conversions
# Bad: source -> edit -> web -> social
# Good: source -> final (single conversion)
# Use lossless intermediate
ffmpeg -i source.mp4 -c:v ffv1 intermediate.mkv
# Edit intermediate
ffmpeg -i intermediate.mkv -c:v libx264 final.mp4
1---2name: format-compatibility-and-conversion-guide3description: Complete guide to media format support, codec recommendations, and conversion best practices.4---5# Format Compatibility & Conversion Guide67Complete guide to media format support, codec recommendations, and conversion best practices.89## Image Format Support1011### ImageMagick Formats1213**Raster Formats (Full Support):**14- JPEG (.jpg, .jpeg) - Lossy, universal15- PNG (.png) - Lossless, transparency16- WebP (.webp) - Modern, lossy/lossless17- GIF (.gif) - Animation, limited colors18- TIFF (.tif, .tiff) - Professional, lossless19- BMP (.bmp) - Uncompressed, legacy20- ICO (.ico) - Icons, multi-size2122**Raw Formats (Read Support):**23- CR2, NEF, ARW, DNG (Canon, Nikon, Sony, Adobe RAW)24- Requires dcraw or ufraw-batch2526**Vector Formats (Limited):**27- SVG (.svg) - Read only, converts to raster28- PDF (.pdf) - Read/write, may have policy restrictions2930**Other Formats:**31- HEIC (.heic) - Apple format, requires libheif32- AVIF (.avif) - Next-gen, requires libavif33- PSD (.psd) - Photoshop, basic support3435### FFmpeg Image Support3637**Input Formats:**38- JPEG, PNG, BMP, TIFF, WebP, GIF39- Image sequences (frame_%04d.png)4041**Output Formats:**42- JPEG, PNG, BMP, TIFF43- Video from images4445## Video Format Support4647### Container Formats4849**Universal Containers:**50- MP4 (.mp4) - Most compatible, streaming51- MKV (.mkv) - Feature-rich, flexible52- WebM (.webm) - Web-optimized, open53- AVI (.avi) - Legacy, broad support54- MOV (.mov) - Apple, professional5556**Streaming Containers:**57- TS (.ts) - Transport stream, HLS segments58- M3U8 (.m3u8) - HLS playlist59- MPD (.mpd) - DASH manifest60- FLV (.flv) - Flash (legacy)6162**Professional Formats:**63- ProRes (.mov) - Apple professional64- DNxHD/DNxHR (.mxf, .mov) - Avid professional65- MXF (.mxf) - Broadcast6667### Video Codecs6869**Modern Codecs:**70- H.264/AVC (libx264) - Universal, excellent balance71- H.265/HEVC (libx265) - Better compression, 4K72- VP9 (libvpx-vp9) - Open, YouTube73- AV1 (libaom-av1, libsvtav1) - Next-gen, best compression7475**Legacy Codecs:**76- MPEG-4 (mpeg4) - Older devices77- MPEG-2 (mpeg2video) - DVD, broadcast78- VP8 (libvpx) - WebM predecessor7980**Professional Codecs:**81- ProRes (prores) - Apple post-production82- DNxHD (dnxhd) - Avid editing83- Uncompressed (rawvideo) - Maximum quality8485### Audio Codecs8687**Modern Codecs:**88- AAC (aac) - Universal, streaming89- Opus (libopus) - Best low-bitrate90- MP3 (libmp3lame) - Universal compatibility9192**Lossless Codecs:**93- FLAC (flac) - Open, archival94- ALAC (alac) - Apple lossless95- WAV (pcm_s16le) - Uncompressed9697**Other Codecs:**98- Vorbis (libvorbis) - Open, WebM99- AC-3 (ac3) - Dolby Digital, surround100- DTS (dts) - Cinema surround101102## Format Recommendations103104### Use Case Matrix105106| Use Case | Image Format | Video Container | Video Codec | Audio Codec |107|----------|--------------|-----------------|-------------|-------------|108| Web general | JPEG 85% | MP4 | H.264 | AAC 128k |109| Web transparency | PNG | - | - | - |110| Web modern | WebP | WebM | VP9 | Opus |111| Social media | JPEG 85% | MP4 | H.264 | AAC 128k |112| 4K streaming | - | MP4 | H.265 | AAC 192k |113| Archive | PNG/TIFF | MKV | H.265 CRF 18 | FLAC |114| Email | JPEG 75% | - | - | - |115| Print | TIFF/PNG | - | - | - |116| YouTube | - | MP4/WebM | H.264/VP9 | AAC/Opus |117| Live stream | - | FLV | H.264 | AAC |118| Editing | - | MOV/MXF | ProRes/DNxHD | PCM |119120### Platform Compatibility121122**Web Browsers (2025):**123- Images: JPEG, PNG, WebP, GIF, SVG124- Video: MP4 (H.264), WebM (VP9), MP4 (AV1)125- Audio: AAC, MP3, Opus, Vorbis126127**Mobile Devices:**128- iOS: JPEG, PNG, HEIC, MP4 (H.264/H.265), AAC129- Android: JPEG, PNG, WebP, MP4 (H.264/H.265), AAC130131**Smart TVs:**132- Most: MP4 (H.264), AAC133- Modern: MP4 (H.265), AC-3134135**Social Media:**136- All platforms: JPEG, MP4 (H.264), AAC137138## Quality vs Size Trade-offs139140### Image Quality Comparison141142**JPEG Quality Levels:**143- 95-100: ~5-10 MB (large image), minimal artifacts144- 85-94: ~1-3 MB, imperceptible loss145- 75-84: ~500 KB-1 MB, slight artifacts146- 60-74: ~200-500 KB, visible artifacts147- Below 60: <200 KB, poor quality148149**Format Comparison (Same quality):**150- WebP: 25-35% smaller than JPEG151- HEIC: 40-50% smaller than JPEG152- AVIF: 50-60% smaller than JPEG153- PNG: 2-5x larger than JPEG (lossless)154155### Video Quality Comparison156157**H.264 CRF Values:**158- CRF 18: Visually lossless, ~8-15 Mbps (1080p)159- CRF 23: High quality, ~4-8 Mbps (1080p)160- CRF 28: Medium quality, ~2-4 Mbps (1080p)161162**Codec Comparison (Same quality):**163- H.265: 40-50% smaller than H.264164- VP9: 30-40% smaller than H.264165- AV1: 50-60% smaller than H.264166167### Audio Quality Comparison168169**AAC Bitrates:**170- 320 kbps: Transparent, archival171- 192 kbps: High quality, music172- 128 kbps: Good quality, streaming173- 96 kbps: Acceptable, low bandwidth174- 64 kbps: Poor, voice only175176**Codec Efficiency (Same quality):**177- Opus: Best at low bitrates (<128k)178- AAC: Best overall balance179- MP3: Less efficient but universal180181## Conversion Best Practices182183### Image Conversions184185**PNG to JPEG:**186```bash187# Standard conversion188magick input.png -quality 85 -strip output.jpg189190# With transparency handling191magick input.png -background white -flatten -quality 85 output.jpg192```193194**JPEG to WebP:**195```bash196# FFmpeg197ffmpeg -i input.jpg -quality 80 output.webp198199# ImageMagick200magick input.jpg -quality 80 output.webp201```202203**RAW to JPEG:**204```bash205# Requires dcraw206magick input.CR2 -quality 90 output.jpg207```208209**HEIC to JPEG:**210```bash211# Requires libheif212magick input.heic -quality 85 output.jpg213```214215### Video Conversions216217**MKV to MP4:**218```bash219# Copy streams (fast)220ffmpeg -i input.mkv -c copy output.mp4221222# Re-encode if needed223ffmpeg -i input.mkv -c:v libx264 -crf 23 -c:a aac output.mp4224```225226**AVI to MP4:**227```bash228# Modern codecs229ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac output.mp4230```231232**MOV to MP4:**233```bash234# Copy if H.264 already235ffmpeg -i input.mov -c copy output.mp4236237# Convert ProRes to H.264238ffmpeg -i input.mov -c:v libx264 -crf 18 -c:a aac output.mp4239```240241**Any to WebM:**242```bash243# VP9 encoding244ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm245```246247### Audio Conversions248249**Extract Audio from Video:**250```bash251# Keep original codec252ffmpeg -i video.mp4 -vn -c:a copy audio.m4a253254# Convert to MP3255ffmpeg -i video.mp4 -vn -q:a 0 audio.mp3256257# Convert to FLAC (lossless)258ffmpeg -i video.mp4 -vn -c:a flac audio.flac259```260261**Audio Format Conversion:**262```bash263# WAV to MP3264ffmpeg -i input.wav -c:a libmp3lame -b:a 192k output.mp3265266# MP3 to AAC267ffmpeg -i input.mp3 -c:a aac -b:a 192k output.m4a268269# Any to Opus270ffmpeg -i input.wav -c:a libopus -b:a 128k output.opus271```272273## Codec Selection Guide274275### Choose H.264 When:276- Maximum compatibility needed277- Targeting older devices278- Streaming to unknown devices279- Social media upload280- Fast encoding required281282### Choose H.265 When:283- 4K video encoding284- Storage space limited285- Modern device targets286- Archival quality needed287- Bandwidth constrained288289### Choose VP9 When:290- YouTube upload291- Open-source requirement292- Chrome/Firefox primary293- Royalty-free needed294295### Choose AV1 When:296- Future-proofing content297- Maximum compression needed298- Encoding time not critical299- Modern platform targets300301## Format Migration Strategies302303### Archive to Web304305```bash306# High-res archive -> Web-optimized307for img in archive/*.tif; do308 base=$(basename "$img" .tif)309 magick "$img" -resize 2000x2000\> -quality 85 -strip "web/${base}.jpg"310 magick "$img" -resize 2000x2000\> -quality 85 "web/${base}.webp"311done312```313314### Legacy to Modern315316```bash317# Convert old formats to modern codecs318for video in legacy/*.avi; do319 base=$(basename "$video" .avi)320 ffmpeg -i "$video" \321 -c:v libx264 -crf 23 -preset slow \322 -c:a aac -b:a 128k \323 "modern/${base}.mp4"324done325```326327### Multi-Format Publishing328329```bash330# Create multiple formats for compatibility331input="source.mp4"332333# Modern browsers334ffmpeg -i "$input" -c:v libx264 -crf 23 -c:a aac output.mp4335ffmpeg -i "$input" -c:v libvpx-vp9 -crf 30 -c:a libopus output.webm336337# Images338ffmpeg -ss 5 -i "$input" -vframes 1 poster.jpg339magick poster.jpg -quality 80 poster.webp340```341342## Troubleshooting343344### Unsupported Format345346```bash347# Check FFmpeg formats348ffmpeg -formats349350# Check ImageMagick formats351magick identify -list format352353# Install missing codec support354sudo apt-get install libx264-dev libx265-dev libvpx-dev355```356357### Compatibility Issues358359```bash360# Force compatible encoding361ffmpeg -i input.mp4 \362 -c:v libx264 -profile:v high -level 4.0 \363 -pix_fmt yuv420p \364 -c:a aac -b:a 128k \365 output.mp4366```367368### Quality Loss369370```bash371# Avoid multiple conversions372# Bad: source -> edit -> web -> social373# Good: source -> final (single conversion)374375# Use lossless intermediate376ffmpeg -i source.mp4 -c:v ffv1 intermediate.mkv377# Edit intermediate378ffmpeg -i intermediate.mkv -c:v libx264 final.mp4379```