How to save album cover art from any audio file — free
- Step 1Open the extractor — Go to /audio-tools/album-art-extractor. It reads any of the audio formats your library uses — MP3, M4A, FLAC, OGG, Opus, plus WAV and video.
- Step 2Drop one track from your library — Free processes one file at a time. Pick the track whose cover you want — the format doesn't matter, the extractor handles all of them the same way.
- Step 3Let FFmpeg find the picture — FFmpeg's demuxer locates the embedded picture (ID3
APIC, MP4covr, FLACPICTURE, or Vorbis-comment image) and re-encodes the first one as JPEG. No options to set. - Step 4Check the preview — The cover renders inline so you can confirm it's the correct artwork for that track before saving — handy when a library has mis-tagged files.
- Step 5Save as <track>-cover.jpg — Download writes
<track>-cover.jpg. Doing this across an album gives youTrack 1-cover.jpg,Track 2-cover.jpg, etc. — usually identical covers, so keep one and delete the rest if you want a single album cover. - Step 6Repeat or batch on Pro — On Pro you can queue up to 10 files. For folder-scale jobs, the @jadapps/runner runs the same extraction locally over many files.
Where each format stores its cover — and what FFmpeg reads
The extractor is format-agnostic because FFmpeg demuxes the embedded picture from each container. Same command for all.
| Format | Cover stored in | Extractor reads it? |
|---|---|---|
| MP3 | ID3v2 APIC frame | Yes |
| M4A / MP4 / AAC | MP4 covr atom | Yes |
| FLAC | PICTURE metadata block | Yes |
| OGG Vorbis | METADATA_BLOCK_PICTURE comment (base64) | Yes |
| Opus | METADATA_BLOCK_PICTURE comment (base64) | Yes |
| WAV | Rarely carries embedded art | Only if a picture stream exists |
Fixed extraction behaviour
No options. The same FFmpeg command runs for every input format.
| Aspect | Behaviour | Note |
|---|---|---|
| Output format | Always JPEG | PNG covers are flattened (no alpha) |
| Resolution | Native dimensions preserved | No scale filter; small covers stay small |
| Pictures extracted | First only (-frames:v 1) | Front cover when multiple are embedded |
| Audio | Discarded (-an) | The source audio file is never modified |
| Filename | <track>-cover.jpg | Extension forced to .jpg |
| No art present | No embedded album art found in this file. | 0-byte output is caught and reported |
Tier limits (audio family)
Per-file caps. A single track is far under these; long mixes may hit the duration limit on Free.
| Tier | Max file size | Max duration | Files at once |
|---|---|---|---|
| Free | 50 MB | 30 min | 1 |
| Pro | 200 MB | 120 min | 10 |
| Pro-media | 100 GB | Unlimited | 100 |
| Developer | 100 GB | Unlimited | 100 |
Cookbook
Mixed-library scenarios across MP3, M4A, FLAC, OGG, and Opus — what the one fixed command returns for each.
M4A purchase (iTunes 'covr' atom)
iTunes-purchased M4A stores its cover in the MP4 covr atom. The extractor reads it just like an MP3, producing a JPEG at native size.
Input: 01 Intro.m4a (covr atom: 1500x1500 JPEG) FFmpeg: -an -vcodec mjpeg -frames:v 1 Output: 01 Intro-cover.jpg (1500x1500 JPEG)
FLAC rip with embedded PICTURE block
A CD ripped to FLAC with cover lookup carries a high-res image in a PICTURE block. The extractor pulls it without touching the lossless audio.
Input: Album/01 - Track.flac (PICTURE: 1400x1400 JPEG) Output: 01 - Track-cover.jpg (1400x1400 JPEG) For a lossless-specific walkthrough, see the FLAC guide.
OGG / Opus with base64-embedded picture
OGG and Opus store the cover as a base64 METADATA_BLOCK_PICTURE Vorbis comment. FFmpeg decodes it transparently — same JPEG output.
Input: track.opus (METADATA_BLOCK_PICTURE: 1000x1000) Output: track-cover.jpg (1000x1000 JPEG)
Album with one cover repeated across 12 tracks
Most albums embed the identical cover in every track. Extracting one track is usually enough — running all 12 just produces 12 copies of the same image.
Track 01..12.m4a each embeds the same 1500x1500 cover → extract 01 only → 01-cover.jpg (no need to run all 12; the covers are identical)
A WAV with no embedded art
WAV rarely carries cover art. When a track has no embedded picture, the tool reports it rather than producing a broken file.
Input: Master.wav (no embedded picture) Result: "No embedded album art found in this file." Tag the cover into a lossy/lossless copy with the ID3 tag editor.
Edge cases and what actually happens
Track carries no embedded art
No artworkAcross any format, if there's no embedded picture FFmpeg writes a 0-byte file and the tool reports No embedded album art found in this file. This is common for WAV masters, voice memos, and untagged rips. Use the ID3 tag editor to embed a cover.
PNG cover in a FLAC or OGG file
Re-encoded to JPEGFLAC and OGG can embed PNG artwork. Because the encoder is fixed to mjpeg, the output is JPEG regardless — same dimensions, but any alpha channel is flattened. There's no option to preserve PNG.
Multiple pictures embedded
First picture onlySome files (especially boxset rips) embed several pictures — front, back, disc, artist. -frames:v 1 returns only the first picture stream FFmpeg encounters. You cannot select a later picture through this tool.
DRM-protected files in the library
Cannot processApple Music / Spotify offline files are DRM-encrypted; FFmpeg can't demux them, so extraction fails. Only DRM-free files yield art. This is a common stumbling block when a library mixes purchases with streaming downloads.
Cover dimensions vary across the library
Preserved as-isDifferent sources embed different resolutions — a 2008 iTunes purchase might be 300×300 while a 2024 Bandcamp download is 1600×1600. The extractor preserves whatever was embedded; it never normalises sizes. Expect a mixed-resolution cover folder unless you re-source low-res ones.
Very long file (DJ mix, full podcast)
Rejected on FreeFree caps duration at 30 minutes. A continuous-mix MP3 or a podcast episode that exceeds that is blocked even though art extraction itself is cheap. Pro raises the cap to 120 minutes; Pro-media removes it.
Same filename across folders
ExpectedMany albums name tracks 01.mp3, 02.mp3. Extracting produces 01-cover.jpg, which will collide if you download covers from several albums into one folder. Rename or download into per-album folders to avoid overwriting.
You wanted the raw embedded bytes
By designThe extractor re-encodes the picture with mjpeg rather than copying the embedded bytes. Dimensions match the original, but the compression is FFmpeg's. For library archival where byte-fidelity matters, that exact-copy behaviour isn't offered here.
Frequently asked questions
Does this work on M4A, FLAC, OGG, and Opus — not just MP3?
Yes. The extractor is format-agnostic: FFmpeg demuxes the embedded picture from MP3 (APIC), M4A (covr atom), FLAC (PICTURE block), and OGG/Opus (METADATA_BLOCK_PICTURE comment) with the same command. Output is always a JPEG named <track>-cover.jpg regardless of input format.
Will the output be the same resolution as the embedded cover?
Yes — the embedded image's pixel dimensions are preserved (no scaling filter is applied). A 1600×1600 Bandcamp cover stays 1600×1600; a 300×300 old iTunes cover stays 300×300. The tool never upscales, so a mixed-format library will give you mixed-resolution covers.
Can I extract art from a whole album folder at once?
The browser tool processes one file at a time on Free and up to 10 at once on Pro. Since most albums embed the identical cover in every track, extracting one track is usually enough. For true folder-scale batch jobs, the @jadapps/runner runs the same extraction locally over many files.
Why is every track's cover identical?
Standard music tagging embeds the same album cover into every track of an album. So extracting all 12 tracks just gives you 12 copies of the same image. Extract one track and keep that single cover unless individual tracks genuinely have different art (rare — usually only compilations or singles).
What format is the output?
Always JPEG. Even if the source embedded a PNG (which FLAC, OGG, and ID3v2.3+ all allow), the fixed mjpeg encoder produces a JPEG. This keeps your cover folder uniform but means PNG transparency is flattened.
Is my library uploaded to a server?
No. Every extraction runs in your browser via FFmpeg WebAssembly. Your tracks — even unreleased or private ones — never leave your device. Only an anonymous usage counter is recorded server-side if you're signed in, with no file content.
What happens when a track has no cover?
You get No embedded album art found in this file. and nothing downloads. This is common for WAV masters and untagged rips. To add a cover, embed one with the ID3 tag editor, then extract if you want a standalone copy.
Can I get the back cover or disc image?
No. Files with multiple embedded pictures return only the first (-frames:v 1), which is conventionally the front cover. Additional pictures aren't accessible through this tool.
Does extracting modify my audio files?
No. The tool is read-only — it decodes the file in memory to pull the picture and writes a new JPEG. Your original tracks are untouched. To change the embedded cover, use the ID3 tag editor.
Why do extracted covers collide in one folder?
The output name is <track>-cover.jpg. If two albums both have a 01.mp3, both produce 01-cover.jpg. Download covers into per-album folders, or rename tracks before extracting, to avoid overwriting.
Can it handle DRM-protected files from streaming services?
No. Apple Music and Spotify offline downloads are DRM-encrypted; FFmpeg cannot open the protected container, so extraction fails. Only DRM-free files in your library will yield art.
What's the size limit for a single track?
Free allows 50 MB / 30 min per file; Pro raises it to 200 MB / 120 min with 10 files at once; Pro-media removes the duration limit and allows up to 100 GB / 100 files. A normal song is well within Free; long mixes may hit the duration cap.
Privacy first
Every JAD Audio tool runs entirely in your browser via FFmpeg (WebAssembly) and RNNoise. Your audio files never leave your device — verified by zero outbound network requests during processing.