Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add album art with ffmpeg?

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.

like image 225
Adi Ricky k Avatar asked Sep 10 '13 04:09

Adi Ricky k


4 Answers

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.

like image 194
alexbuisson Avatar answered Nov 11 '22 00:11

alexbuisson


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.

like image 34
Lorenz Meyer Avatar answered Nov 11 '22 01:11

Lorenz Meyer


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
like image 3
Mauricio Avatar answered Nov 11 '22 00:11

Mauricio


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 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

like image 1
Mahozad Avatar answered Nov 11 '22 00:11

Mahozad