【问题标题】:Does Webm support cover art?Webm 是否支持封面艺术?
【发布时间】:2021-01-13 16:20:01
【问题描述】:

我正在将 MP3 转换为 Webm,并且 MP3 文件包含用于封面艺术的视频流。

ffprobe filename.mp3
...
    Stream #0:0: Audio: mp3, 22050 Hz, stereo, fltp, 64 kb/s
    Stream #0:1: Video: mjpeg (Baseline), yuvj444p(pc, bt470bg/unknown/unknown), 300x300, 90k tbr, 90k tbn, 90k tbc (attached pic)

使用ffmpeglibopus 编解码器转换文件会导致VP9 视频流无法正常工作。我注意到:

  1. VLC 播放器不显示时长,播放时进度条不移动。
  2. Android 媒体播放器不显示曲目封面的图片。
ffprobe filename.webm
...
Input #0, matroska,webm, from 'webm_bad/B01___01_Matthew_____ENGWEBN2DA.webm':
...
    Stream #0:0: Video: vp9 (Profile 1), yuv444p(tv, progressive), 300x300, SAR 1:1 DAR 1:1, 1k tbr, 1k tbn, 1k tbc (default)

如果我尝试使用-vcodec copy 选项,则会收到此错误:

[webm @ 0x7fdddf028e00] Only VP8 or VP9 or AV1 video and Vorbis or Opus audio and WebVTT subtitles are supported for WebM.
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:1 --

WebM 是否支持封面艺术?如果是这样,我如何使用 ffmpeg(或其他工具)传输 MP3 封面?

【问题讨论】:

    标签: ffmpeg webm opus


    【解决方案1】:

    不,WebM 不支持封面艺术。

    来自the FAQ

    WebM 文件结构基于 Matroska 媒体容器。

    Matroska 容器中的封面艺术存储在attachment

    Attachment Elements 可用于存储相关的封面艺术,[...]

    WebM 容器不支持attachments

    附件

    WebM Support Element Name Description
    Unsupported Attachments Contain attached files.
    Unsupported AttachedFile An attached file.
    Unsupported FileDescription A human-friendly name for the attached file.
    Unsupported FileName Filename of the attached file.
    Unsupported FileMimeType MIME type of the file.
    Unsupported FileData The data of the file.
    Unsupported FileUID Unique ID representing the file, as random as possible.
    Unsupported FileReferral A binary value that a track/codec can refer to when the attachment is needed.
    Unsupported FileUsedStartTime DivX font extension
    Unsupported FileUsedEndTime DivX font extension

    也许您可以考虑使用不同的容器。 Opus 音频流,如 WebM 容器中的音频流,由其他 containers 支持:

    Opus 最初被指定用于封装在 Ogg 容器中

    如果您仍想使用 WebM,另一种方法是创建带有静止图像的视频流和音频流。 FFmpeg wiki 在 Slideshow page 中涵盖了该主题。结合 this answer,它解释了如何提取 MP3 文件的封面,您可以执行以下操作:

    ffmpeg -i filename.mp3 -an -c:v copy cover.jpeg
    ffmpeg -loop 1 -i cover.jpeg -i filename.mp3 -c:v libvpx-vp9 -c:a libopus -b:a 64k -shortest filename.webm
    

    64k 是您在 ffprobe 的输出中显示的比特率。

    第二个命令的编码可能很慢。 FFmpeg wiki 中的Encode/Youtube page 显示了一个使用-framerate 2 选项创建带有静止图像的视频的示例命令,如下所示:

    ffmpeg -loop 1 -framerate 2 -i cover.jpeg -i filename.mp3 -c:v libvpx-vp9 -c:a libopus -b:a 64k -shortest filename.webm
    

    由于某种我不知道的原因,我的 VLC 无法再现最后一条命令的输出视频,并且播放器崩溃了。 6 是最小的-framerate 不会使我的播放器崩溃,所以要小心。

    【讨论】:

    • 该命令仅适用于 YouTube。很多玩家不喜欢这么低的帧率。
    • 在提取cover.jpeg 时,-map 0:v 优于-an
    • 这个过程有效。我尝试使用 AIMP,但它并没有像使用 mp3 那样在播放器中显示封面。 :-(
    • @hernán-alarcón,如果我尝试使用 .mka(或 .mkv)作为替代容器(Android 支持这些),我将如何将封面艺术从 mp3 复制到附件Matroska 容器?我尝试了循环播放的视频,但它在 .mkv 中不起作用(并且未包含在 .mka 中)。
    • @chrish,检查this answer。它使用 .mkv,但我想它也适用于 .mka。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 2013-06-28
    • 2014-06-18
    • 2013-01-03
    • 2010-09-25
    • 1970-01-01
    相关资源
    最近更新 更多