我希望在将 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"
谢谢