ImageMagick vs FFmpeg vs ConvX: Which CLI Converter Should You Use?
Three tools, three philosophies. ImageMagick dominates image processing. FFmpeg owns video and audio. ConvX covers everything in one command. Here is how they compare, when to use each, and where they overlap.
What each tool does best
These three tools solve different problems. Understanding their core strengths saves you from trying to hammer a screw.
ImageMagick is a command-line image processing powerhouse. It has been around since 1990 and handles over 200 image formats. Beyond simple conversion, it does resizing, cropping, compositing, color adjustment, text rendering, and effects. If you need to add a watermark to 10,000 product photos or generate thumbnails from uploaded images, ImageMagick is the standard tool. Its strength is deep image manipulation. Its weakness is that it does nothing with video, audio, or documents.
FFmpeg is the backbone of nearly every video and audio tool you have ever used. VLC, Handbrake, YouTube, and thousands of other applications use FFmpeg under the hood. It handles encoding, decoding, transcoding, muxing, demuxing, streaming, filtering, and playback for virtually every video and audio format in existence. It is incredibly powerful. It is also incredibly complex. A single FFmpeg command can have 20+ flags, and the documentation assumes you already understand codec internals. FFmpeg does not handle images beyond basic frame extraction, and it has no document support.
ConvX takes a different approach. Instead of deep specialization in one media category, it covers 46 formats across images, video, audio, and documents with a single, consistent command syntax. It wraps battle-tested libraries (including FFmpeg for media) and adds a unified interface, automatic codec detection, batch processing, watch mode, presets, and an MCP server for AI agents. The trade-off: it does not offer the deep manipulation features of ImageMagick or the granular codec control of raw FFmpeg.
Installation comparison
Getting a tool installed is the first friction point. Here is what each requires.
ImageMagick installation varies by platform. On macOS, brew install imagemagick works. On Ubuntu, sudo apt install imagemagick. On Windows, you download a binary installer from the official site. The catch: ImageMagick has a security policy file (policy.xml) that restricts certain operations by default. PDF processing, for example, is disabled out of the box on many Linux distributions due to a historical Ghostscript vulnerability. You have to manually edit the policy file to enable it. Delegate libraries (Ghostscript for PDF, librsvg for SVG, libheif for HEIC) are separate dependencies you may need to install. For full details, see the ImageMagick installation guide.
FFmpeg is straightforward on Linux (sudo apt install ffmpeg) and macOS (brew install ffmpeg). On Windows, you download a static build and add it to your PATH manually. The complexity comes from build options: the default package may not include certain codecs (libx265, libfdk-aac) due to licensing restrictions. You may need to compile from source or find a "full" build. The FFmpeg download page lists all official options.
ConvX ships as a single binary with all dependencies bundled. Download the installer for your platform, and everything works. No codec packs, no policy files, no build flags. The CLI is available after installation without additional PATH configuration on macOS and Windows. On Linux, the AppImage or .deb package handles it.
| Platform | ImageMagick | FFmpeg | ConvX |
|---|---|---|---|
| macOS | brew install imagemagick | brew install ffmpeg | DMG installer or brew install convx |
| Windows | Binary installer + PATH setup | Static build + manual PATH | MSI installer (auto PATH) |
| Linux (Debian/Ubuntu) | apt install imagemagick | apt install ffmpeg | .deb package or AppImage |
| Extra dependencies | Ghostscript, librsvg, libheif (optional) | Codec-specific libs (varies by build) | None (all bundled) |
Command syntax comparison
The day-to-day experience of using a tool comes down to how its commands look and feel. Let us compare equivalent operations.
Convert a single image
Convert a PNG to JPEG at quality 85:
# ImageMagick
magick input.png -quality 85 output.jpg
# FFmpeg
ffmpeg -i input.png -q:v 2 output.jpg
# ConvX
convx convert input.png --to jpeg -q 85ImageMagick's syntax is clean for images. FFmpeg's -q:v 2 flag is non-obvious (it maps to a JPEG quality scale where lower is better, inverse of the 0-100 scale most people expect). ConvX uses a consistent 0-100 quality scale across all formats.
Convert a video
Convert MOV to MP4 with H.264:
# ImageMagick
# Not possible. ImageMagick does not handle video.
# FFmpeg
ffmpeg -i input.mov -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4
# ConvX
convx convert input.mov --to mp4 -q 75FFmpeg gives you granular control: codec selection, CRF value, audio bitrate. ConvX abstracts this into a quality number and picks sensible defaults. For most users, the ConvX command is sufficient. For broadcast professionals who need specific encoding parameters, FFmpeg's granularity is essential.
Resize an image
# ImageMagick
magick input.jpg -resize 800x600 output.jpg
# FFmpeg
ffmpeg -i input.jpg -vf scale=800:600 output.jpg
# ConvX
convx convert input.jpg --to jpeg --width 800 --height 600ImageMagick shines here. Its resize options include dozens of resampling filters (Lanczos, Mitchell, Catrom), gravity-based cropping, aspect ratio preservation modes, and percentage-based scaling. FFmpeg can resize but its filter syntax is verbose. ConvX handles basic resizing but does not match ImageMagick's depth.
Extract audio from video
# ImageMagick
# Not possible.
# FFmpeg
ffmpeg -i video.mp4 -vn -c:a libmp3lame -b:a 192k audio.mp3
# ConvX
convx convert video.mp4 --to mp3Batch convert a folder of images
# ImageMagick
magick mogrify -format jpg -quality 85 *.png
# FFmpeg (requires a shell loop)
for f in *.png; do ffmpeg -i "$f" -q:v 2 "${f%.png}.jpg"; done
# ConvX
convx convert "*.png" --to jpeg -q 85 -j 4ImageMagick's mogrify is elegant for batch image work. FFmpeg needs a shell loop because it processes one file at a time. ConvX handles globs natively and adds parallel processing with the -j flag. For the full batch processing syntax, see the ConvX CLI reference.
The big comparison table
Here is a comprehensive feature-by-feature breakdown of all three tools.
| Feature | ImageMagick | FFmpeg | ConvX |
|---|---|---|---|
| Image formats | 200+ (PNG, JPEG, TIFF, WebP, AVIF, HEIC, SVG, RAW, PSD, EXR, and many more) | Limited (PNG, JPEG, WebP, BMP, TIFF) | 20+ (PNG, JPEG, WebP, AVIF, HEIC, TIFF, SVG, BMP, ICO, GIF, RAW formats) |
| Video formats | None | Virtually all (MP4, MOV, MKV, AVI, WebM, ProRes, and hundreds more) | 8+ (MP4, MOV, MKV, AVI, WebM, GIF) |
| Audio formats | None | Virtually all (MP3, AAC, FLAC, WAV, OGG, Opus, AC-3, and hundreds more) | 8+ (MP3, AAC, FLAC, WAV, OGG, M4A) |
| Document formats | PDF (via Ghostscript delegate), EPS, PS | None | 10+ (PDF, DOCX, XLSX, PPTX, EPUB, HTML, Markdown, CSV, JSON, YAML) |
| Learning curve | Moderate (intuitive for basic tasks, complex for advanced operations) | Steep (codec knowledge required, cryptic flags) | Low (consistent syntax, automatic defaults) |
| Installation | Package manager + optional delegates | Package manager + optional codec builds | Single installer, all dependencies bundled |
| Syntax complexity | Moderate (command differs by operation: convert, mogrify, identify) | High (flags vary by codec, format, and operation) | Low (one command: convx convert) |
| Batch processing | Yes (mogrify for in-place, convert with loops) | Manual (shell loops required) | Built-in (glob patterns + parallel jobs with -j) |
| Watch mode | No | No | Yes (convx watch monitors folders) |
| Presets | No (must specify all flags each time) | No (some preset flags like -preset fast for x264) | Yes (save and reuse named conversion profiles) |
| AI integration (MCP) | No | No | Yes (built-in MCP server for AI agents) |
| GUI | No (CLI only) | No (CLI only) | Yes (desktop app + CLI) |
| Pricing | Free (Apache 2.0 license) | Free (LGPL/GPL license) | $20 one-time purchase |
| Platform support | macOS, Windows, Linux, BSD, and more | macOS, Windows, Linux, BSD, and more | macOS, Windows, Linux |
| Image manipulation (crop, rotate, effects) | Extensive (hundreds of operations) | Basic (via filters) | Basic (resize, quality) |
| Video editing (trim, merge, overlay) | None | Extensive (complex filter graphs) | Basic (quality, codec selection) |
| Active development | Yes (since 1990) | Yes (since 2000) | Yes (2025+) |
Performance benchmarks
Raw speed matters when you are processing hundreds or thousands of files. Here are real-world timings on an Apple M2 Pro (12-core) with 32 GB RAM.
Image conversion: 100 PNG files (average 4 MB each) to JPEG at quality 85
| Tool | Command | Time | Notes |
|---|---|---|---|
| ImageMagick | magick mogrify -format jpg -quality 85 *.png | ~12 seconds | Single-threaded by default |
| FFmpeg | Shell loop with ffmpeg | ~18 seconds | Single-threaded, one file at a time |
| ConvX | convx convert "*.png" --to jpeg -q 85 -j 8 | ~4 seconds | 8 parallel jobs |
ConvX wins on batch throughput because of built-in parallelism. ImageMagick's mogrify processes files sequentially. You can parallelize ImageMagick with GNU Parallel or xargs, but that requires extra scripting. FFmpeg's single-file design means you always need a wrapper for batch operations.
Video conversion: 1 GB MOV (H.264) to MP4
| Tool | Command | Time | Notes |
|---|---|---|---|
| ImageMagick | N/A | N/A | Cannot process video |
| FFmpeg | ffmpeg -i input.mov -c copy output.mp4 | ~3 seconds | Remux (stream copy) |
| ConvX | convx convert input.mov --to mp4 | ~3 seconds | Auto-detects remux |
For video remuxing, both FFmpeg and ConvX are equally fast because the operation is I/O-bound, not CPU-bound. ConvX uses FFmpeg under the hood for media operations, so the raw encoding speed is identical. The difference is in the interface, not the engine.
Video re-encoding: 1 GB MOV (ProRes) to MP4 H.264 at quality 75
| Tool | Command | Time | Notes |
|---|---|---|---|
| FFmpeg | ffmpeg -i input.mov -c:v libx264 -crf 23 output.mp4 | ~45 seconds | Full CPU utilization |
| ConvX | convx convert input.mov --to mp4 -q 75 | ~45 seconds | Same encoder, same speed |
Encoding speed is determined by the underlying codec library, not the wrapper. Both use libx264, so performance is identical. The advantage of ConvX is not speed; it is the simpler command.
When to use ImageMagick
ImageMagick is the right choice when you need deep image processing capabilities that go beyond format conversion.
- Complex image manipulation: Compositing layers, adding text overlays, applying convolution filters, morphological operations, color space conversions with ICC profiles.
- Server-side image processing: Generating thumbnails, resizing user uploads, creating image variants for responsive designs. ImageMagick is the standard library behind most web frameworks' image processing (Ruby's MiniMagick, PHP's Imagick, Node's sharp uses libvips but ImageMagick remains common).
- Scripting with advanced filters: Gaussian blur, unsharp mask, edge detection, dithering, quantization. ImageMagick's operator model lets you chain dozens of transformations in a single command.
- Working with obscure image formats: If you need to read a 1990s SGI format, a Kodak PhotoCD, or a DPX film scan, ImageMagick probably supports it.
ImageMagick is free and open source. For organizations already invested in ImageMagick pipelines, there is no reason to switch for image-only workflows. The ImageMagick command-line documentation is comprehensive and well-maintained.
When to use FFmpeg
FFmpeg is the right choice when you need precise control over video and audio encoding parameters.
- Broadcast and streaming: Encoding for HLS/DASH adaptive bitrate streaming, generating multiple renditions, configuring keyframe intervals, setting B-frame patterns.
- Professional video editing pipelines: Concatenating clips with complex filter graphs, overlaying watermarks, burning in subtitles, applying color LUTs, mixing audio tracks.
- Codec-specific tuning: When you need
-tune film,-profile:v high,-level 4.1, or any of the hundreds of encoder-specific parameters that affect visual quality at the bitrate level. - Protocol support: Capturing from RTMP, RTSP, or HLS streams. Pushing to streaming servers. Reading from network sources.
- Niche format support: If you need to decode a 2003 RealMedia file or encode to Theora, FFmpeg has you covered.
FFmpeg is free and open source. It is the foundation of the video industry. For a quick reference of common operations, see the FFmpeg main documentation.
When to use ConvX
ConvX is the right choice when you want one tool for everything, with minimal learning overhead.
- Cross-format workflows: Your job involves images, video, audio, and documents. You do not want to remember three different tools with three different syntaxes. One command handles it all.
- Batch operations with parallelism: ConvX's built-in
-jflag and glob support mean you can convert 500 files in one command with multi-core processing. No shell scripting required. - Watch mode: Drop files into a folder and have them automatically converted. Useful for photographers importing cards, editors receiving dailies, or teams with shared upload folders.
- AI agent integration: ConvX's built-in MCP server lets AI assistants (Claude, GPT, Copilot) trigger file conversions. No other converter offers this natively.
- Team standardization: Presets let you define a conversion profile once ("web-ready images: JPEG, quality 85, max width 2000px") and share it. Every team member gets identical output without memorizing flags.
- Desktop and CLI: Some tasks are easier with a drag-and-drop GUI. Others need scripting. ConvX provides both in one package.
Can you combine them?
Yes. The tools are not mutually exclusive. Many developers use all three.
A common setup: ImageMagick for server-side image processing in a web application. FFmpeg for video encoding pipelines and streaming infrastructure. ConvX for ad-hoc conversions, batch processing miscellaneous files, and AI agent workflows.
ConvX uses FFmpeg internally for media operations. If you already have FFmpeg installed, ConvX does not conflict with it. They are independent tools that happen to use the same encoding libraries.
One practical combination: use ImageMagick for complex image manipulations (compositing, effects), then pipe the output to ConvX for format conversion with specific quality targets. Or use ConvX's watch mode to automatically convert incoming files, then use FFmpeg for final encoding with broadcast-specific parameters.
Document and data format support
This is where ConvX stands apart entirely. Neither ImageMagick nor FFmpeg handles document or data conversions.
| Format Category | ImageMagick | FFmpeg | ConvX |
|---|---|---|---|
| PDF to DOCX | No (can rasterize PDF to images) | No | Yes |
| EPUB to PDF | No | No | Yes |
| Markdown to HTML | No | No | Yes |
| CSV to JSON | No | No | Yes |
| XLSX to CSV | No | No | Yes |
| YAML to JSON | No | No | Yes |
If you work with documents and data files alongside media, ConvX eliminates the need to install separate tools like Pandoc, LibreOffice CLI, or csvkit. One tool handles the whole pipeline.
Learning curve and documentation
ImageMagick's documentation is extensive but scattered. The official site covers every operator, but real-world usage often requires Fred Weinhaus's ImageMagick scripts or Stack Overflow. The command syntax has changed between major versions (version 7 uses magick instead of convert), which creates confusion when following older tutorials.
FFmpeg's documentation is thorough but assumes significant background knowledge. Phrases like "libx264 CRF 23 with veryfast preset, B-frames 3, ref 4, me_method hex" are common. The FFmpeg Wiki has practical guides, but the gap between "basic usage" and "production encoding" is large.
ConvX's documentation is simpler by design. There is one command (convx convert), one quality scale (0-100), and automatic format detection. The trade-off is fewer options. If you need -tune animation or -vf "select=eq(pict_type,I)", you need FFmpeg directly.
Pricing and licensing
ImageMagick uses the Apache 2.0 license. Free for any use, including commercial. No restrictions.
FFmpeg uses LGPL by default, or GPL if compiled with certain codecs (libx264, libx265). Free for any use, but linking restrictions apply in some commercial scenarios. Most users are unaffected.
ConvX costs $20 as a one-time purchase. No subscription, no per-machine licensing, no feature tiers. One payment covers macOS, Windows, and Linux. For individual developers and small teams, this is trivial. For enterprises deploying to thousands of machines, the economics differ. Contact the ConvX team for volume licensing.
Troubleshooting
ImageMagick: "not authorized" error when converting PDFs
This is the most common ImageMagick issue. The security policy file (/etc/ImageMagick-7/policy.xml on Linux) disables PDF operations by default. You need to edit the policy file and change the PDF line from rights="none" to rights="read|write". You also need Ghostscript installed. On macOS with Homebrew, brew install ghostscript resolves it.
FFmpeg: "Unknown encoder" error
Your FFmpeg build was compiled without the codec you are requesting. Run ffmpeg -encoders to see what is available. If libx265 is missing, you need a build that includes it. On macOS: brew install ffmpeg --with-fdk-aac (check current Homebrew options). On Ubuntu: install ffmpeg from the official PPA rather than the default repository, which may be outdated.
FFmpeg: output quality is terrible
The default CRF for libx264 is 23, which is fine for most content. But if you are using -b:v (bitrate mode) instead of -crf (quality mode), FFmpeg defaults to a very low bitrate. Always use CRF mode unless you have a specific bitrate target. For libx264, CRF 18 is visually lossless. CRF 23 is good quality. CRF 28 is noticeable compression.
ConvX: conversion fails with "unsupported format"
Check that you are using a supported format pair. ConvX supports 46 formats with 400+ conversion paths, but not every combination is valid. Run convx formats to see the full list. If you need a format that is not supported, file a feature request or fall back to ImageMagick or FFmpeg for that specific conversion.
All tools: file permissions error on output
Make sure the output directory exists and is writable. On macOS, files downloaded from the internet may have quarantine attributes that prevent some tools from reading them. Run xattr -cr file.ext to clear quarantine flags.
The bottom line
There is no single "best" tool. The right answer depends on your workflow.
- You work mostly with images and need advanced manipulation: ImageMagick. It has 35 years of battle-testing and the deepest image processing feature set available.
- You work with video/audio and need granular codec control: FFmpeg. Nothing else comes close for professional video encoding.
- You work across multiple format types and want simplicity: ConvX. One command, one quality scale, 46 formats, no memorizing flags.
- You use AI agents that need to convert files: ConvX. It is the only option with a built-in MCP server.
- Budget is the primary constraint: ImageMagick and FFmpeg are free. ConvX is $20.
For many developers, the practical answer is: install all three. Use ImageMagick for image-heavy server pipelines, FFmpeg for video encoding infrastructure, and ConvX for everything else. They coexist without conflict.