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

Posted

技术标签:

【中文标题】如何使用 ffmpeg 添加专辑封面?【英文标题】:How to add album art with ffmpeg? 【发布时间】:2013-09-13 16:41:07 【问题描述】:

我一直无法在 mp3 文件中添加专辑封面。

我已经对此问题进行了研究和搜索,但尚未找到解决方案。 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

来源:http://www.ffmpeg.org/ffmpeg-all.html#mp3

但它不起作用。我的控制台输出是:

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

我寻找另一个解决方案并得到了这个:http://trac.ffmpeg.org/ticket/2221:

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'

有人可以帮帮我吗?

nb:我使用的是 ubuntu 12.04 和 ffmpeg 版本 0.8.6-4:0.8.6-0。

谢谢。

【问题讨论】:

只是关于 -c ?您是否在使用旧版本时尝试“-acodec copy”...并尝试更新! 我已经尝试将 -c 替换为 -codec 但返回的输出相同:无法识别的选项 'codec' 无法为选项 'codec' 设置值 'copy' 您使用的是旧的、伪造的 ffmpeg 版本,在线文档不支持该版本。见Who can tell me the difference and relation between ffmpeg, libav, and avconv?。您可以通过关注step-by-step guide to compile ffmpeg 或简单地使用Linux build of ffmpeg 来获取最新的、真正的ffmpeg。 【参考方案1】:

使用最新版本,

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 选项,-metadataoption 将得到很好的解释

注意:元数据注释区分大小写。

【讨论】:

上面的一个“-metadata:s:v”选项缺少“-”。这给了我一个错误“[NULL @ 0x7ffd7400fa00] Unable to find a suitable output format for 'metadata:s:v' || metadata:s:v: Invalid argument”。我在答案中更正了它。 comment="Cover (front)" - 不是 comment="Cover (Front)" 我不得不说不应该跳过“-id3v2_version 3”参数。没有它,封面将在 Mac 上可见,但在 Windows 上不可见。 在某些程序(vlc 和 totem)中使用此方法专辑封面显示,但在通常显示 mp3 文件专辑封面的其他程序(rhythmbox 和 nautilus)中不显示。【参考方案2】:

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

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="Cover (front)" 中的f 必须为小写。如果没有,ID3头中的图片类型将不会被设置!

另一个可能对某人有所帮助的提示:为避免将 JPEG 封面图像转换为 png,您必须设置 -codec copy

【讨论】:

【参考方案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

【讨论】:

以上是关于如何使用 ffmpeg 添加专辑封面?的主要内容,如果未能解决你的问题,请参考以下文章

如何在音频文件中添加艺术品,以显示在专辑封面中?

ChromeCast SDK 专辑封面

将一首歌曲的封面艺术批量复制到另一首(相同的文件名)

在 iOS 设备的锁屏上添加自定义专辑封面

如何在 Win8 C# 应用程序中设置专辑封面?

MPMoviePlayerController 上的专辑封面