Weboberfläche: Cover bei OggOpus, OggVorbis und flac-Dateien

Ich habe das Problem, dass sämtliche Coverbilder von OggOpus, OggVorbis und flac Dateien in der Weboberfläche nicht angezeigt werden („no cover image for SD-card audio“). Von allen mir bekannten Audio-Playern auf Linux und Android werden sie aber korrekt angezeigt. Die Coverbilder werden immer (bei flac, OggVorbis und OggOpus) per Stream #0:1: Video: mjpeg (Progressive oder Baseline) eingebunden, Audio liegt auf Stream #0:0. Bei OggOpus kann das Coverbild auch alternativ eingebunden werden, was jedoch auch kein anderes Ergebnis zeigt.

Es gab bereits eine ähnliche Fehlermeldung: Problem bei OGG-Dateien mit Coverbild

Anbei die Testdateien und die Logs.

OggVorbis:


OggOpus (Achtung: die Dateiendung .mp3 muss durch .opus ersetzt werden; kann hier mit .opus nicht hochgeladen werden):


flac (Achtung: die Dateiendung .mp3 muss durch .flac ersetzt werden; kann hier mit .flac nicht hochgeladen werden):

OggOpus Datei ohne Cover, spielt einwandfrei, Ausgabe des Logs:

N [164685] Ende der Playlist erreicht.
D [168654] Gebe Speicher der alten Playlist frei (Freier Speicher: 73156 Bytes)
D [168654] Freier Speicher nach Aufräumen: 73156 Bytes
D [168674] Freier Speicher: 68768 Bytes
N [168674] Playlist-Generierung
I [168675] Dateimodus erkannt.
N [168675] Modus: Einzelner Track
N [168693] Neue Playlist mit 1 Titel(n) empfangen
D [168693] Free heap: 73916
I [168703] info        : buffers freed, free Heap: 77788 bytes
I [168703] info        : Reading file: "/a-ogg/testneu/oggopus-nocover.opus"
I [168731] info        : OPUSDecoder has been initialized, free Heap: 72712 bytes , free stack 2948 DWORDs
N [168734] '/a-ogg/testneu/oggopus-nocover.opus' wird abgespielt (1 von 1)
D [168784] no cover image for SD-card audio
I [168832] info        : stream ready
I [168832] info        : syncword found at pos 0
I [168845] info        : Channels: 2
I [168845] info        : SampleRate: 48000
I [168846] info        : BitsPerSample: 16
I [168846] info        : BitRate: 158923
I [186934] info        : Closing audio file
I [186934] info        : End of file "oggopus-nocover.opus"
I [186934] eof_mp3     : oggopus-nocover.opus

Selbe OggOpus Datei aber mit Cover (per Stream #0:1), spielt einwandfrei ab, cover wird jedoch nicht angezeigt:

D [146338] Gebe Speicher der alten Playlist frei (Freier Speicher: 69136 Bytes)
D [146338] Freier Speicher nach Aufräumen: 69136 Bytes
D [146360] Freier Speicher: 64748 Bytes
N [146360] Playlist-Generierung
I [146360] Dateimodus erkannt.
N [146361] Modus: Einzelner Track
I [146381] info        : Closing audio file
N [146381] Neue Playlist mit 1 Titel(n) empfangen
D [146381] Free heap: 72832
I [146391] info        : buffers freed, free Heap: 77760 bytes
I [146391] info        : Reading file: "/a-ogg/testneu/oggopus-cover.opus"
I [146422] info        : OPUSDecoder has been initialized, free Heap: 70364 bytes , free stack 2948 DWORDs
N [146425] '/a-ogg/testneu/oggopus-cover.opus' wird abgespielt (1 von 1)
D [146466] no cover image for SD-card audio
I [146543] info        : stream ready
I [146544] info        : syncword found at pos 0
I [146548] info        : OPUS decode error -5 : SILK MODE UNSUPPORTED
I [146549] info        : syncword found at pos 18
I [146560] info        : syncword found at pos 0
I [146562] info        : OPUS decode error -5 : SILK MODE UNSUPPORTED
I [146563] info        : syncword found at pos 103
I [146574] info        : syncword found at pos 0
I [146584] info        : Channels: 2
I [146584] info        : SampleRate: 48000
I [146585] info        : BitsPerSample: 16
I [146585] info        : BitRate: 163161
I [164674] info        : Closing audio file
I [164674] info        : End of file "oggopus-cover.opus"
I [164674] eof_mp3     : oggopus-cover.opus

Selbe OggOpus Datei aber mit alternativ eingebundenem Cover, braucht ca. 1.5s zusätzlich bis er abspielt, spielt dann aber einwandfrei ab, cover wird jedoch nicht angezeigt:

D [137152] Gebe Speicher der alten Playlist frei (Freier Speicher: 72972 Bytes)
D [137153] Freier Speicher nach Aufräumen: 72972 Bytes
D [137174] Freier Speicher: 68748 Bytes
N [137174] Playlist-Generierung
I [137175] Dateimodus erkannt.
N [137175] Modus: Einzelner Track
N [137188] Neue Playlist mit 1 Titel(n) empfangen
D [137189] Free heap: 73904
I [137198] info        : buffers freed, free Heap: 71580 bytes
I [137198] info        : Reading file: "/a-ogg/testneu/oggopus-cover-alternate.opus"
I [137230] info        : OPUSDecoder has been initialized, free Heap: 72692 bytes , free stack 2948 DWORDs
N [137234] '/a-ogg/testneu/oggopus-cover-alternate.opus' wird abgespielt (1 von 1)
D [137321] no cover image for SD-card audio
I [137352] info        : stream ready
I [137352] info        : syncword found at pos 0
I [137355] info        : OPUS decode error -4 : ERR_UNKNOWN
I [137372] info        : syncword found at pos 843
I [137373] info        : syncword found at pos 0
I [137375] info        : OPUS decode error -6 : HYBRID MODE UNSUPPORTED
I [137402] info        : syncword found at pos 879
I [137403] info        : syncword found at pos 0
I [137405] info        : OPUS decode error -5 : SILK MODE UNSUPPORTED
I [137432] info        : syncword found at pos 879
I [137433] info        : syncword found at pos 0
I [137435] info        : OPUS decode error -6 : HYBRID MODE UNSUPPORTED
I [137462] info        : syncword found at pos 879
I [137463] info        : syncword found at pos 0
I [137465] info        : OPUS decode error -6 : HYBRID MODE UNSUPPORTED
I [137492] info        : syncword found at pos 879
I [137493] info        : syncword found at pos 0
I [137495] info        : OPUS decode error -5 : SILK MODE UNSUPPORTED
I [137522] info        : syncword found at pos 879
I [137523] info        : syncword found at pos 0
I [137525] info        : OPUS decode error -6 : HYBRID MODE UNSUPPORTED
I [137552] info        : syncword found at pos 879
I [137553] info        : syncword found at pos 0
I [137555] info        : OPUS decode error -5 : SILK MODE UNSUPPORTED
I [137582] info        : syncword found at pos 879
I [137583] info        : syncword found at pos 0
I [137585] info        : OPUS decode error -5 : SILK MODE UNSUPPORTED
I [137605] info        : syncword found at pos 981
I [137606] info        : syncword found at pos 0
I [137617] info        : Channels: 2
I [137618] info        : SampleRate: 48000
I [137618] info        : BitsPerSample: 16
I [137618] info        : BitRate: 158923

OggVorbis Datei ohne Cover, spielt einwandfrei, Ausgabe des Logs:

D [220059] Gebe Speicher der alten Playlist frei (Freier Speicher: 73144 Bytes)
D [220059] Freier Speicher nach Aufräumen: 73144 Bytes
D [220079] Freier Speicher: 68752 Bytes
N [220079] Playlist-Generierung
I [220080] Dateimodus erkannt.
N [220080] Modus: Einzelner Track
N [220098] Neue Playlist mit 1 Titel(n) empfangen
D [220099] Free heap: 73904
I [220108] info        : buffers freed, free Heap: 77788 bytes
I [220109] info        : Reading file: "/a-ogg/testneu/oggvorbis-nocover.ogg"
N [220139] '/a-ogg/testneu/oggvorbis-nocover.ogg' wird abgespielt (1 von 1)
I [220147] info        : VORBISDecoder has been initialized, free Heap: 69456 bytes,  free stack 2948 DWORDs
D [220200] no cover image for SD-card audio
I [220339] info        : stream ready
I [220340] info        : syncword found at pos 0
I [220374] info        : Channels: 2
I [220375] info        : SampleRate: 44100
I [220375] info        : BitsPerSample: 16
I [220375] info        : BitRate: 128000
I [248026] info        : audio file is corrupt --> send EOF
I [248027] info        : Closing audio file
I [248028] info        : End of file "oggvorbis-nocover.ogg"
I [248038] eof_mp3     : oggvorbis-nocover.ogg

Selbe OggVorbis Datei aber mit Cover (per Stream #0:1), spielt einwandfrei ab, cover wird jedoch nicht angezeigt [kein Unterschied in der Log-Ausgabe zu Datei ohne Cover]:

D [189441] Gebe Speicher der alten Playlist frei (Freier Speicher: 73116 Bytes)
D [189441] Freier Speicher nach Aufräumen: 73116 Bytes
D [189461] Freier Speicher: 68728 Bytes
N [189461] Playlist-Generierung
I [189462] Dateimodus erkannt.
N [189462] Modus: Einzelner Track
N [189480] Neue Playlist mit 1 Titel(n) empfangen
D [189480] Free heap: 73876
I [189489] info        : buffers freed, free Heap: 77780 bytes
I [189489] info        : Reading file: "/a-ogg/testneu/oggvorbis-cover.ogg"
N [189518] '/a-ogg/testneu/oggvorbis-cover.ogg' wird abgespielt (1 von 1)
I [189526] info        : VORBISDecoder has been initialized, free Heap: 71804 bytes,  free stack 2948 DWORDs
D [189566] no cover image for SD-card audio
I [189736] info        : stream ready
I [189736] info        : syncword found at pos 0
I [189744] info        : Channels: 2
I [189744] info        : SampleRate: 44100
I [189744] info        : BitsPerSample: 16
I [189744] info        : BitRate: 128000
I [217396] info        : audio file is corrupt --> send EOF
I [217397] info        : Closing audio file
I [217398] info        : End of file "oggvorbis-cover.ogg"
I [217408] eof_mp3     : oggvorbis-cover.ogg

Flac Datei mit Cover, spielt einwandfrei ab, cover wird jedoch nicht angezeigt:

D [112337] Gebe Speicher der alten Playlist frei (Freier Speicher: 49772 Bytes)
D [112337] Freier Speicher nach Aufräumen: 49772 Bytes
D [112358] Freier Speicher: 45388 Bytes
N [112358] Playlist-Generierung
I [112358] Dateimodus erkannt.
N [112359] Modus: Einzelner Track
N [112374] Neue Playlist mit 1 Titel(n) empfangen
D [112374] Free heap: 50528
I [112384] info        : buffers freed, free Heap: 77568 bytes
I [112384] info        : Reading file: "/a-ogg/testneu/flac-cover.flac"
I [112417] info        : FLACDecoder has been initialized, free Heap: 73760 bytes , free stack 2948 DWORDs
N [112420] '/a-ogg/testneu/flac-cover.flac' wird abgespielt (1 von 1)
I [112447] info        : Content-Length: 1285364
D [112472] no cover image for SD-card audio
I [112488] info        : FLAC maxBlockSize: 1152
I [112490] info        : FLAC maxFrameSize: 4071
I [112492] info        : FLAC sampleRate: 44100
I [112494] info        : FLAC numChannels: 2
I [112496] info        : FLAC bitsPerSample: 16
I [112507] info        : total samples in stream: 450155
I [112507] info        : audio file duration: 10 seconds
I [112638] id3data     : ARTIST: Santiano-Wellermann
I [112756] info        : Audio-Length: 1256533
I [112890] info        : stream ready
I [112891] info        : syncword found at pos 0
I [112902] info        : Channels: 2
I [112902] info        : SampleRate: 44100
I [112902] info        : BitsPerSample: 16
I [112902] info        : BitRate: 3299243
I [112943] info        : VBR recognized, audioFileDuration is estimated
I [123105] info        : Closing audio file
I [123105] info        : End of file "flac-cover.flac"
I [123105] eof_mp3     : flac-cover.flac

Ist das Problem lösbar? Ich denke die Frage geht hauptsächlich an die Audio-Bibliothek, also @Wolle
Schonmal vielen Dank.

Hi, das Problem hatte ich und konnte es auf die Größe der hinterlegten Coverbilder zurückführen. Sie durften eine bestimmte Auflösung noch überschreiten. Wenn ich das richtig verfolgt habe, wurde an einer Lösung für das Problem schon gearbeitet.

Ich werde meinen vorherigen Thread die Tage mal mit der Lösung (die für mich funktioniert hat) ergänzen.

Danke für deine Rückmeldung. Werden denn die Coverbilder bei dir angezeigt? Und was ist die Auflösungsgrenze?

Das stimmt, bei diesen Dateien werden die eingebetteten Bilder ignoriert. Grundsätzlich sind alle Images base64 kodiert. Bei ogg spielt die Größe der Rahmen eine Rolle. Ein OggS Rahmen kann max 64KB groß sein. Sind die Bilder größer sind müssen sie „ausgewickelt“ werden. FLAC hat ähnlich Beschränkungen.

Vielen Dank für eure Rückmeldungen. Ich bin auf @froido Lösung gespannt.

In der Zwischenzeit habe ich mal ein identisches Coverbild (mjpeg (Progressive), yuvj444p(pc, bt470bg/unknown/unknown), 500x500 [SAR 72:72 DAR 1:1], 90k tbr, 90k tbn, 35,2kB) in mp3, opus, ogg und flac auf dieselbe Art eingebunden. Nur das in mp3 eingebundene Bild wird angezeigt.

Wo wäre denn der Ansatzpunkt bei der Behebung des Problems? In der Audiolib oder in ESPuino?

Bis jetzt habe ich die Coverbilder (falls sie nicht schon standardmäßig in der Datei enthalten waren) über Programme wie EasyTag oder MusicBrainz eingebunden. Ich habe es nun nochmal über das terminal mit ffmpeg versucht.

Das Bild hat eine Größe von 500x500@32 und 35.249 bytes. Zunächst habe ich einen passenden head erstellt, dann das Bild über METADATA_BLOCK_PICTURE base64 kodiert eingetragen:

$ echo -en "\0\0\0\x03\0\0\0\x0aimage/jpeg\0\0\0\x08test.jpg\0\0\x01\xf4\0\0\x01\xf4\0\0\0\x20\0\0\0\0\0\0\x89\xb1" > vorbis.head
$ ffmpeg -i oggopus-nocover.opus -acodec copy -map 0:a -metadata:s:a METADATA_BLOCK_PICTURE="$(cat vorbis.head cover.jpg | base64 --wrap 0)" oggopus-cover.opus

Das scheint auch alles zu passen. ffmpeg -i oggopus-cover.opus sagt dann:

Input #0, ogg, from 'oggopus-cover.opus':
  Duration: 00:00:18.06, start: 0.000000, bitrate: 105 kb/s
  Stream #0:0: Audio: opus, 48000 Hz, stereo, fltp
    Metadata:
      album           : sample 1
      author          : Testfile
      year            : 2023
      encoder         : Lavf59.16.100
  Stream #0:1: Video: mjpeg (Progressive), yuvj444p(pc, bt470bg/unknown/unknown), 500x500 [SAR 72:72 DAR 1:1], 90k tbr, 90k tbn (attached pic)
    Metadata:
      comment         : Cover (front)
      title           : test.jpg

Wieder können alle probierten Audioplayer das Coverbild anzeigen, ohne jegliche Fehlermeldung. Leider geht es in ESPuino immer noch nicht. Obwohl das Bild wie gefordert kleiner 64KB ist und zudem base64 kodiert.
Hat der Opus-Decoder in der Audiobibliothek derzeit überhaupt die prinzipielle Möglichkeit, Cover von opus Dateien zu verarbeiten, oder müsste das noch nachgeholt werden? Also quasi nochmal die Frage von gestern: Wo wäre denn der Ansatzpunkt bei der Behebung des Problems? In der Audiolib oder in ESPuino?
Hier die Audiodatei, die ffmpeg erstellt (Endung mp3 löschen, da man kein .opus hochladen kann):