如何使用ffmpeg添加专辑封面?

50

我一直卡在给MP3文件添加专辑封面的问题上。

我已经进行了研究和Google搜索,但还没有找到解决方案。 ffmpeg文档推荐使用以下脚本来添加图像(专辑封面)到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

但是它并没有起作用。我的控制台输出结果为:

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

我寻找了另一种解决方案,并找到了这个

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

这将返回相同的输出:

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

有人可以帮我吗?

我正在使用Ubuntu 12.04和FFmpeg版本0.8.6-4:0.8.6-0。

谢谢。


关于 -c 问题?你尝试过使用“-acodec copy”吗?因为你使用的是旧版本...建议升级! - alexbuisson
我已经尝试使用“-codec”替换“-c”,但输出的返回值相同: 无法识别选项“codec” 无法为选项“codec”设置值“copy” - Adi Ricky k
2
您正在使用一個舊的、假的ffmpeg版本,該版本不被在線文檔支持。請參閱誰能告訴我ffmpeg、libav和avconv之間的區別和關係?。您可以通過遵循逐步指南編譯ffmpeg,或者只需使用Linux版本的ffmpeg來獲取最新的真實ffmpeg。 - llogan
5个回答

62

最近版本的内容:

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
使用-map将输入流与输出关联
使用-c copy直接进行复用/解复用
你的命令行中缺少-id3v2_version 3。请注意,这将写入一个IDV2.3,但你可以要求2.4(-id3v2_version 4
使用-id3v2_version 3选项时,-metadata选项将被正确解释
注意:元数据注释区分大小写。

1
一个“-metadata:s:v”选项缺少了“-”。这导致出现错误“[NULL @ 0x7ffd7400fa00] Unable to find a suitable output format for 'metadata:s:v' || metadata:s:v: Invalid argument”。我在答案中进行了更正。 - Jim DeLaHunt
1
comment="封面(前)" - IvanM
1
我必须说,不应该跳过“-id3v2_version 3”参数。没有它,封面将在Mac上可见,但在Windows上不可见。 - Andres
使用这种方法,专辑封面可以在某些程序中显示(如vlc和totem),但在其他程序中却不能显示(如rhythmbox和nautilus),后者通常会为mp3文件显示专辑封面。 - SuprMan

24

这里有一件重要的事情需要注意,让我浪费了一个小时的工作时间:

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

comment="封面(前)"中的f必须小写,否则ID3标头中的图片类型将无法设置!

另一个可能有帮助的提示:为了避免JPEG封面图像被转换为PNG,您必须设置-codec copy


6

以下是我如何将不同的输入/来源格式(在本例中为video.ts)转换为MP3,并同时向结果MP3添加封面艺术品的方式(只需一条命令):

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

注意

如果FFmpeg出现错误,请尝试从命令中省略-metadata:s:v title="Album cover" -metadata:s:v comment="Cover (front)"

命令中使用选项的说明:

选项 是否必需? 说明
-ss 5 可选 指定输入中开始时间(以秒为单位)
-to 13 可选 指定输入中的结束时间(以秒为单位)
-i video.ts - 第一个输入(要转换的文件)
-i logo.png - 第二个输入(专辑/封面艺术)
-map 0:a - 从输入0(也就是video.ts),选择音频(a)
-map 1:0 - 从输入1(也就是logo.png),选择第一个流(0)
-c:1 copy 可选 设置第二个输入(图像)的编解码器为copy(无需转换)
b:a 320k 可选 将音频流的比特率设置为320k; 参见脚注1中接受的值

感谢konsoleboxStack Overflow答案中提供的帮助。

1: b:a 选项有效的比特率如下:
8k|16k|24k|32k|40k|48k|64k|80k|96k|112k|128k|160k|192k|224k|256k|320k


3

问题在于你没有定义要复制哪种编解码器。对于音频,应该使用-c:a copy,但封面则被识别为视频(难以想象!!),因此使用-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

0

无法评论,但Mahozad的答案对我很有帮助,只需添加-map 0:a(而不是仅“0”或“0:0”)和-map 1:0而没有其他内容:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接