Поддерживает ли Webm обложку?

Я конвертирую 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)

Использование ffmpeg с кодеком libopus для преобразования файла приводит к тому, что видеопоток VP9 работает неправильно. Я заметил:

  1. VLC Player не показывает продолжительность, а бегунок прогресса не перемещается во время воспроизведения.
  2. Android Media Player не показывает изображение обложки трека.
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 обложку? Если да, то как перенести обложку MP3 с помощью ffmpeg (или другого инструмента)?


person chrish    schedule 13.01.2021    source источник


Ответы (1)


Нет, WebM не поддерживает обложку.

Из часто задаваемых вопросов:

Файловая структура WebM основана на медиаконтейнере Matroska.

Обложка в контейнере Matroska хранится в вложении:

Attachment Elements можно использовать для хранения соответствующих обложек, [...]

Контейнер WebM не поддерживает вложения:

Вложение

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, поддерживаются другими контейнерами:

Изначально Opus был предназначен для инкапсуляции в контейнеры Ogg.

Если вы все еще хотите использовать WebM, альтернативой может быть создание видеопотока с неподвижным изображением вместе со звуковым потоком. Вики FFmpeg освещает эту тему на странице слайд-шоу. Объединив это с этим ответом, в котором объясняется, как извлечь обложку файла 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.

Кодирование может быть медленным со второй командой. На странице Encode/Youtube в вики FFmpeg показан пример команды для создания видео с неподвижным изображением, в котором используется параметр -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, при котором мой плеер не вылетал, так что будьте осторожны.

person Hernán Alarcón    schedule 14.01.2021
comment
Команда предназначалась только для YouTube. Многим игрокам не нравится такая низкая частота кадров. - person llogan; 14.01.2021
comment
-map 0:v предпочтительнее -an при извлечении обложки.jpeg. - person chrish; 28.01.2021
comment
Этот процесс работал. Я пытался использовать AIMP, и он не отображал обложку в плеере, как в mp3. :-( - person chrish; 28.01.2021
comment
@hernán-alarcón, если я попытаюсь использовать .mka (или .mkv) в качестве альтернативного контейнера (они поддерживаются Android), как мне скопировать обложку из mp3 во вложение в контейнере Matroska? Пробовал зацикливать видео - не получилось в .mkv (и не попало в .mka). - person chrish; 28.01.2021
comment
@chrish, проверьте этот ответ. Он использует .mkv, но я думаю, что он также работает с .mka. - person Hernán Alarcón; 31.01.2021