使用 ffmpeg 将 mp3 转换为 mkv 时,如何才能包含可能的多个嵌入封面艺术?

使用 ffmpeg 将 mp3 转换为 mkv 时,如何才能包含可能的多个嵌入封面艺术?

我希望在将 mp3 文件转换为 mkv(vorbis)时包含嵌入的封面艺术。

ffmpeg -i input.mp3 output.mkv

将渲染一个可以播放的文件(在 mpv 中)并显示一个图像,但当我尝试寻找时,奇怪的事情开始发生。

ffprobe input.mp3

告诉我

...
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 160 kb/s
Stream #0:1: Video: mjpeg (Progressive), yuvj444p(pc, bt470bg/unknown/unknown), 600x595 [SAR 1:1 DAR 120:119], 90k tbr, 90k tbn, 90k tbc (attached pic)
Metadata:
  title           : cover.jpg
  comment         : Cover (front)

尽管

ffprobe output.mkv

告诉我

...
Stream #0:0: Video: h264, none(pc, progressive), 600x595, SAR 1:1 DAR 120:119, 1k tbr, 1k tbn, 2k tbc (default)
...
Stream #0:1: Audio: vorbis, 44100 Hz, stereo, fltp (default)

显然,ffmpeg 将图像转换为 h264,这不是我想要的,我想要一张嵌入的图片。

我怎样才能告诉 ffmpeg 仅复制嵌入的图片而不是将其转换为 h264?

答案1

为了在将 mp3 转换为 mkv 文件时包含嵌入的封面,我使用以下命令。在这种情况下,音频保留在输出文件中,设置与输入 mp3 相同。

更多详细信息请参阅此 Stack Overflow 线程:如何使用 ffmpeg 添加专辑封面?

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

如果您想附加未嵌入 mp3 文件中的图像,可以按照以下方法操作:

ffmpeg -i "input_sample.mp3" -attach "image_cover.jpg" -map 0 -c:v copy -metadata:s:t mimetype="image/jpg" -metadata:s:t:0 filename="cover.jpg" "output_sample.mkv"

输出ffprobe input_sample.mp3

Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 320 kb/s
Stream #0:1: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 1018x1023 [SAR 72:72 DAR 1018:1023], 90k tbr, 90k tbn (attached pic)
Metadata:
  title           : Album cover
  comment         : Cover (front)

输出ffprobe output_sample.mkv

Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 320 kb/s
Stream #0:1: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 1018x1023 [SAR 72:72 DAR 1018:1023], 1k tbr, 1k tbn
Metadata:
  title           : Album cover
  COMMENT         : Cover (front)
Stream #0:2: Attachment: none
Metadata:
  filename        : cover.jpg
  mimetype        : image/jpg  

在输出文件中,流 #0:0、#0:1 被保留,并且流 #0:2 被包含,这是封面艺术流。

输出的音频保持与输入相同的设置。如果您想更改 MKV 格式的音频,请使用-c:a libvorbis -q:a 9、VBR 格式或c:a libvorbis -b:a 320、CBR 格式,但文件将被重新编码。注意:q:a 9相当于 320 kbps VBR。

使用 libvorbis 编码为 MKV 格式时的等效性:

-q:a 4  ~= 128 kbps VBR
-q:a 5  ~= 160 kbps VBR
-q:a 6  ~= 192 kbps VBR
-q:a 7  ~= 224 kbps VBR
-q:a 8  ~= 256 kbps VBR
-q:a 9  ~= 320 kbps VBR
-q:a 10 ~= 500 kbps VBR

请注意顶部发布的第二个命令

我在一些我拥有的 mkv 文件中使用了这里发布的第二个命令,虽然它们附加时没有错误消息,但是当我将带有封面艺术的文件转换为 mp3 时,系统显示图像中出现编解码器错误,并且仅将音频转换为 mp3。

所发生的情况是,mjpeg 编解码器在命令中查找信息,以便它可以正确地对图像进行编码,这些信息位于 mimetype="image/图片“字段。请注意,图片, 它一定要是JPEG格式。正如我发布的命令中所说,该字段是 jpg,编解码器虽然没有给出错误,但只是附加了图像而没有任何编码,导致转换时出现很多问题。

正确的命令是:

ffmpeg -i "without_cover.mkv" -attach "art_cover.jpg" -map 0 -c copy -metadata:s:t mimetype="image/jpeg" -metadata:s:t:0 filename="cover.jpeg" "with_cover.mkv"

谢谢

相关内容