FFmpeg,如何将封面艺术(图像)嵌入到 .m4a

Posted

技术标签:

【中文标题】FFmpeg,如何将封面艺术(图像)嵌入到 .m4a【英文标题】:FFmpeg, how to embed cover art (image) to .m4a 【发布时间】:2013-07-21 20:17:04 【问题描述】:

有没有办法将封面艺术嵌入m4a 文件?

这个适用于mp3,但不适用于m4a

ffmpeg -i tests/in.m4a -i cover.jpg -map 0:0 -map 1:0 -acodec copy \
  -id3v2_version 3 tests/out.m4a

【问题讨论】:

为什么在 MPEG4 文件中使用 ID3 格式。它们彼此不兼容。 【参考方案1】:

mp4art from mp4v2 也可以这样做:

mp4art --add cover.jpg track.m4a

我试过mp4art,添加封面后,FFmpeg的信息是这样的:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fce82011400] stream 0, timescale not set
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '01 - Welcome To New York.m4a':
  Metadata:
    major_brand     : M4A
    minor_version   : 512
    compatible_brands: isomiso2
    title           : Welcome To New York
    artist          : Taylor Swift
    album           : 1989 (Deluxe)
    date            : 2014
    encoder         : Lavf55.48.100
    genre           : Country & Folk
    track           : 1
    disc            : 1
  Duration: 00:03:32.65, start: 0.046444, bitrate: 250 kb/s
    Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 238 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
    Stream #0:1: Video: mjpeg, yuvj444p(pc, bt470bg), 1400x1400 [SAR 72:72 DAR 1:1], 90k tbr, 90k tbn, 90k tbc
Input #1, image2, from 'Album Cover.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
    Stream #1:0: Video: mjpeg, yuvj444p(pc, bt470bg), 1400x1400 [SAR 72:72 DAR 1:1], 25 tbr, 25 tbn, 25 tbc

似乎1个文件有2种输入格式(1个m4a,1个image2),我认为ffmpeg应该能够自己做同样的事情,而不是使用单独的工具添加封面图像,但我没有想到怎么做。

【讨论】:

【参考方案2】:

通过 -disposition 参数在图像源上指定 attached_pic 属性可以使用 ffmpeg。

ffmpeg -i input.m4a -i image.jpg -map 0 -map 1 -c copy -disposition:v:1 attached_pic output.m4a 

用 ffmpeg 4.2.2 测试。

ffmpeg docs 中也给出了类似的命令作为示例,但请注意,该示例是为 videos 添加封面而不是音频文件。如果选择了错误的流,-disposition 参数会静默失败。

【讨论】:

failure: [ipod @ 0x7fd692008200] 在流 #1 中找不到编解码器 png 的标签,容器当前不支持编解码器 无法为输出文件 #0 写入标头(编解码器参数不正确?):无效参数 初始化输出流 0:1 时出错 -- 流映射:流 #0:0 -> #0:0(复制)流 #1:0 -> #0:1(复制)最后一条消息重复 1 次 添加 -id3v2_version 3 似乎在 ffmpeg 4.4 上起作用【参考方案3】:

FFmpeg 在这个功能上有一个open issue。与此同时,封面 可以使用TagEditor project 添加。添加:

tageditor -s cover=ju.jpg --max-padding 100000 -f ki.m4a

删除:

tageditor -s cover= --max-padding 100000 -f ki.m4a

【讨论】:

它的图形用户界面也不错:-)【参考方案4】:

使用atomicparsley 嵌入专辑封面的一点扩展版本。在 Mac OS X 上测试。假设当前目录中有folder.jpg 文件。 AtomicParsley 在同一文件夹中创建带有嵌入媒体的临时文件。有一个标志--overWrite 应该改变这种行为,但由于某种原因这对我不起作用。所以我们之后需要删除原始文件。请注意,该脚本将删除 all 文件名中不包含 temp 的文件。所以要小心(或修改脚本)。最后,脚本重命名新创建的文件以从文件名中删除 -temp- 部分。

for f in *.m4a
do
    atomicparsley "$f" --artwork folder.jpg
done
rm !(*temp*)
for f in *.m4a
do
    g=$f//-temp*./.
    mv "$f" "$g"
done

【讨论】:

以上是关于FFmpeg,如何将封面艺术(图像)嵌入到 .m4a的主要内容,如果未能解决你的问题,请参考以下文章

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

壁画获得嵌入式封面艺术

如何使用`ffmpeg`将视频转换为`m4v`?

Spotify API,预加载封面艺术

libspotify API:如何使用 libspotify API 检索封面艺术?

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