How to add album art with ffmpeg?

57.5k Views Asked by At

I've been stuck in adding album art to mp3 files.

I've already researched and Googled this issue but haven't found a solution yet. The ffmpeg documentation recommends this script to add image (album art) to mp3:

ffmpeg -i input.mp3 -i cover.png -c copy -map 0 -map 1 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" out.mp3

But it doesn't work. My console output is:

Unrecognized option 'c'
Failed to set value 'copy' for option 'c'

I looked for another solution and got this:

ffmpeg -i input.mp3 -i cover.png -map 0:0 -map 1:0 -c copy -id3v2_version 3 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" out.mp3

This returns the same output:

Unrecognized option 'c'
Failed to set value 'copy' for option 'c'

Anybody can help me, please?

I am using ubuntu 12.04 and ffmpeg version 0.8.6-4:0.8.6-0.

Thanks.

5

There are 5 best solutions below

4
On

With Recent version,

ffmpeg -i in.mp3 -i test.png -map 0:0 -map 1:0 -c copy -id3v2_version 3 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (front)" out.mp3

Use -map to associate input stream to the output
Use -c copy to directly demux/remux
The -id3v2_version 3 is what is missing in your command line. Note that that wil write an IDV2.3 but you can ask for a 2.4 (-id3v2_version 4)

with the -id3v2_version 3 option the -metadataoption will be well interpreted

Note: the metadata comment is case-sensitive.

0
On

Can't comment but Mahozad's answer did the trick for me, just adding -map 0:a (instead of just "0" or "0:0") and -map 1:0 without anything else:

ffmpeg -i url.m3u8 -i url.jpg -map 0:a -map 1:0 file:output.mp3

0
On

There is an important thing to notice here, that made me loose an hour of work:

ffmpeg -i in.mp3 -i test.jpeg -map 0:0 -map 1:0 -codec copy -id3v2_version 3 \ 
-metadata:s:v title="Album cover" -metadata:s:v comment="Cover (front)" out.mp3

The f in comment="Cover (front)" must be lowercase. If not, the picture type in the ID3 header will not be set !

Another hint that might help somebody: To avoid that a JPEG cover image is converted to png, you have to set -codec copy.

0
On

This is how I converted a different input/source format (in this example video.ts) to MP3 and also added cover art to the result MP3 all in one go (one command):

ffmpeg -ss 5 -to 13 -i video.ts -i logo.png -map 0:a -map 1:0 -c:1 copy -b:a 320k -id3v2_version 3 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (front)" result.mp3

NOTE

If ffmpeg fails with an error, try to omit -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (front)" from the command.

Description of options used in the command:

Option Required? Description
-ss 5 OPTIONAL specifies the start time (in seconds) from the input
-to 13 OPTIONAL specifies the end time (in seconds) from the input
-i video.ts - the first input (file to convert)
-i logo.png - the second input (album/cover art)
-map 0:a - from the input 0 (aka video.ts), selects the audio (a)
-map 1:0 - from the input 1 (aka logo.png), selects the first stream (0)
-c:1 copy OPTIONAL sets the codec for second input (image) to copy (no conversion)
b:a 320k OPTIONAL sets the bitrate for audio stream to 320k; see accepted values in footnote 1

Thanks to konsolebox for this Stack Overflow answer.

1: Valid bitrates for b:a option:
8k|16k|24k|32k|40k|48k|64k|80k|96k|112k|128k|160k|192k|224k|256k|320k

0
On

the problem is that you are not defining what codec you want to copy. In case of the audio should be -c:a copy the cover is recognized as video (go figure!!), so -c:v copy

ffmpeg -i audio-in.mp3 -i picture.png -c:a copy -c:v copy -map 0:0 -map 1:0 -id3v2_version 3 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (front)" audio-out.mp3