Метаданные в mp3 не работают при передаче из ffmpeg с обложками альбомов - PullRequest
0 голосов
/ 10 февраля 2019

В моей программе я передаю webm из потока в ffmpeg, а затем перенаправляю вывод в запрос http.Частью процесса является добавление метаданных для mp3.Это до сих пор отлично работало.Однако после добавления изображения в качестве обложки альбома оно стало работать неожиданно.

Сначала это командная строка, которую я использую внутри программы:

    val parameters = listOf("ffmpeg",
            "-i", "-",
            "-i", albumImage.absolutePath,
            "-map", "0",
            "-map", "1",
            "-c:v", "copy",
            "-f", "mp3",
            "-id3v2_version", "4",
            "-metadata", "title=${info.title}",
            "-metadata", "album=YouTube",
            "-metadata", "artist=${info.author}",
            "-metadata:s:v", "title=Album Cover",
            "-metadata:s:v", "comment=Cover (front)",
            "-"
    )

Создает действительный файл mp3 иЯ могу найти и метаданные, и изображение в mp3-файле, однако при его воспроизведении ни один из них не отображается ни в VLC, ни где-либо еще.Чтобы протестировать различные конфигурации, я преобразовал его в командную строку.

В первой попытке я сохранил видео и изображение и вообще прекратил использовать каналы, что приводит к следующему:

ffmpeg -i video.webm -i image.jpeg -map 0 -map 1 -c:v copy -f mp3 -id3v2_version 4 -metadata title="Tiësto & KSHMR feat. Vassy - Secrets (Official Music Video)" -metadata album="YouTube" -metadata artist="Spinnin' Records" -metadata:s:v title="Album Cover" -metadata:s:v comment="Cover (front)" output3.mp3

В этом случае все метаданные, включая обложку альбома, отображаются в VLC.

Затем я воссоздал то же самое, что и в моей программе, передавая как видеовход, так и аудиовыход, примерно так:

ffmpeg -i - -i image.jpeg -map 0 -map 1 -c:v copy -f mp3 -id3v2_version 4 -metadata title="Tiësto & KSHMR feat. Vassy - Secrets (Official Music Video)" -metadata album="YouTube" -metadata artist="Spinnin' Records" -metadata:s:v title="Album Cover" -metadata:s:v comment="Cover (front)" - < video.webm > output3.mp3

Этот файл совпадает с выводом моих программ.Ни название, ни альбом, ни изображение альбома не отображаются (однако он может воспроизводить файл)

Чтобы проверить еще несколько параметров, я жестко закодировал выходной файл, но передал входной файл следующим образом:

ffmpeg-i - -i image.jpeg -map 0 -map 1 -c: v copy -f mp3 -id3v2_version 4 -metadata title = "Tiësto & KSHMR feat. Vassy - Secrets (Официальное музыкальное видео)" -metadata album = "YouTube"-metadata artist =" Spinnin 'Records "-metadata: s: v title =" Обложка альбома "-metadata: s: v comment =" Cover (front) "output3.mp3

сейчасметаданные снова работаютПри жестком кодировании входного видео и конвейерном выводе его снова нет.

Итак, подведем итог: при конвейерном выводе ffmpeg метаданные в файле не работают должным образом.Интересно, что вывод stderr в ffmpeg выглядит очень похоже

Закодированный output3.mp3:

ffmpeg version 3.4.4-0ubuntu0.18.04.1 Copyright (c) 2000-2018 the FFmpeg developers
Input #0, matroska,webm, from 'pipe:':
  Metadata:
    encoder         : google/video-file
  Duration: 00:03:39.58, start: -0.007000, bitrate: N/A
    Stream #0:0(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
Input #1, image2, from 'image.jpeg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 1466 kb/s
    Stream #1:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 320x180, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (opus (native) -> mp3 (libmp3lame))
  Stream #1:0 -> #0:1 (copy)
Output #0, mp3, to 'output3.mp3':
  Metadata:
    TPE1            : Spinnin' Records
    TIT2            : Tiësto & KSHMR feat. Vassy - Secrets (Official Music Video)
    TALB            : YouTube
    TSSE            : Lavf57.83.100
    Stream #0:0(eng): Audio: mp3 (libmp3lame), 48000 Hz, stereo, fltp (default)
    Metadata:
      encoder         : Lavc57.107.100 libmp3lame
    Stream #0:1: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 320x180, q=2-31, 25 tbr, 25 tbn, 25 tbc
    Metadata:
      title           : Album Cover
      comment         : Cover (front)

С выводом трубы:

ffmpeg version 3.4.4-0ubuntu0.18.04.1 Copyright (c) 2000-2018 the FFmpeg developers
Input #0, matroska,webm, from 'pipe:':
  Metadata:
    encoder         : google/video-file
  Duration: 00:03:39.58, start: -0.007000, bitrate: N/A
    Stream #0:0(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
Input #1, image2, from 'image.jpeg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 1466 kb/s
    Stream #1:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 320x180, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (opus (native) -> mp3 (libmp3lame))
  Stream #1:0 -> #0:1 (copy)
Output #0, mp3, to 'pipe:':
  Metadata:
    TPE1            : Spinnin' Records
    TIT2            : Tiësto & KSHMR feat. Vassy - Secrets (Official Music Video)
    TALB            : YouTube
    TSSE            : Lavf57.83.100
    Stream #0:0(eng): Audio: mp3 (libmp3lame), 48000 Hz, stereo, fltp (default)
    Metadata:
      encoder         : Lavc57.107.100 libmp3lame
    Stream #0:1: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 320x180, q=2-31, 25 tbr, 25 tbn, 25 tbc
    Metadata:
      title           : Album Cover
      comment         : Cover (front)

1 Ответ

0 голосов
/ 11 февраля 2019

Да, размер заголовка ID3 нельзя заполнить, когда метаданные ID3v2 должны быть записаны в два этапа (например, когда должен быть вставлен пакет изображения), а вывод не доступен для поиска.

Вывсе еще можно обойти это до некоторой степени, сказав ffmpeg не сбрасывать данные быстро.Однако ffmpeg будет сбрасываться, если его буфер превышает 256 кБ.Сделайте небольшой допуск для других частей заголовка ID3, и это даст вам максимальный размер изображения.

ffmpeg -i - -i image.jpeg -map 0 -map 1 -c:v copy -f mp3 -id3v2_version 4 -metadata title="Tiësto & KSHMR feat. Vassy - Secrets (Official Music Video)" -metadata album="YouTube" -metadata artist="Spinnin' Records" -metadata:s:v title="Album Cover" -metadata:s:v comment="Cover (front)" -flush_packets 0 - > output3.mp3 < video.webm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...