В моей программе я передаю 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)