[Bug]: Librivox.org m4b cover image not loading #695

Open
opened 2026-04-24 23:17:23 +02:00 by adam · 1 comment
Owner

Originally created by @systematicallyrandom on GitHub (Oct 14, 2022).

Describe the issue

.m4b files downloaded from librivox.org via the Download M4B links (at the bottom of the sidebar) do not show a cover image in audiobookshelf. Other apps and OSes show the cover image fine. For examples, Smart Audiobook Player is able to show the image as is Windows 10 or 11 File Explorer icon view and iTunes. Chapters and other embedded information shows up fine, just not the cover image.

Example book page: https://librivox.org/the-blue-castle-by-lucy-maud-montgomery/
(Direct link to the m4b file: https://archive.org/download/bluecastle_2203_librivox/BlueCastle_librivox.m4b )

Steps to reproduce the issue

  1. Add a librivox .m4b to the library.
  2. Note that the embedded cover does not show.

Audiobookshelf version

v2.2.1

How are you running audiobookshelf?

Docker

Originally created by @systematicallyrandom on GitHub (Oct 14, 2022). ### Describe the issue .m4b files downloaded from librivox.org via the Download M4B links (at the bottom of the sidebar) do not show a cover image in audiobookshelf. Other apps and OSes show the cover image fine. For examples, Smart Audiobook Player is able to show the image as is Windows 10 or 11 File Explorer icon view and iTunes. Chapters and other embedded information shows up fine, just not the cover image. Example book page: https://librivox.org/the-blue-castle-by-lucy-maud-montgomery/ (Direct link to the m4b file: https://archive.org/download/bluecastle_2203_librivox/BlueCastle_librivox.m4b ) ### Steps to reproduce the issue 1. Add a librivox .m4b to the library. 2. Note that the embedded cover does not show. ### Audiobookshelf version v2.2.1 ### How are you running audiobookshelf? Docker
adam added the bug label 2026-04-24 23:17:23 +02:00
Author
Owner

@warnwar commented on GitHub (Jul 18, 2023):

I thought this might be something I could fix, but after looking at it I'm not sure I can do much.

I noticed that ffprobe is not picking up the video stream. This is the data it shows for the file originally mentioned above:

{
index: 0,
codec_name: 'aac',
codec_long_name: 'AAC (Advanced Audio Coding)',
profile: 'LC',
codec_type: 'audio',
codec_time_base: '1/44100',
codec_tag_string: 'mp4a',
codec_tag: '0x6134706d',
sample_fmt: 'fltp',
sample_rate: '44100',
channels: 1,
channel_layout: 'mono',
bits_per_sample: 0,
r_frame_rate: '0/0',
avg_frame_rate: '0/0',
time_base: '1/44100',
start_pts: 0,
start_time: '0.000000',
duration_ts: 1264846848,
duration: '28681.334422',
bit_rate: '62486',
max_bit_rate: '87048',
nb_frames: '1235202',
disposition: {
default: 1,
dub: 0,
original: 0,
comment: 0,
lyrics: 0,
karaoke: 0,
forced: 0,
hearing_impaired: 0,
visual_impaired: 0,
clean_effects: 0,
attached_pic: 0,
timed_thumbnails: 0
},
tags: { creation_time: '2022-03-26T04:53:07.000000Z', language: 'und' }
},
{
index: 1,
codec_name: 'bin_data',
codec_long_name: 'binary data',
codec_type: 'data',
codec_tag_string: 'text',
codec_tag: '0x74786574',
r_frame_rate: '0/0',
avg_frame_rate: '0/0',
time_base: '1/44100',
start_pts: 0,
start_time: '0.000000',
duration_ts: 1264846848,
duration: '28681.334422',
nb_frames: '45',
disposition: {
default: 0,
dub: 0,
original: 0,
comment: 0,
lyrics: 0,
karaoke: 0,
forced: 0,
hearing_impaired: 0,
visual_impaired: 0,
clean_effects: 0,
attached_pic: 0,
timed_thumbnails: 0
},
tags: { creation_time: '2022-03-26T04:53:39.000000Z', language: 'und' }
}

If I open up that .m4b file in mp3tag and save it without changing anything, the cover image will load fine.

Here is the ffprobe data after opening/saving it:

{
index: 0,
codec_name: 'aac',
codec_long_name: 'AAC (Advanced Audio Coding)',
profile: 'LC',
codec_type: 'audio',
codec_time_base: '1/44100',
codec_tag_string: 'mp4a',
codec_tag: '0x6134706d',
sample_fmt: 'fltp',
sample_rate: '44100',
channels: 1,
channel_layout: 'mono',
bits_per_sample: 0,
r_frame_rate: '0/0',
avg_frame_rate: '0/0',
time_base: '1/44100',
start_pts: 0,
start_time: '0.000000',
duration_ts: 1264846848,
duration: '28681.334422',
bit_rate: '62486',
max_bit_rate: '87048',
nb_frames: '1235202',
disposition: {
default: 1,
dub: 0,
original: 0,
comment: 0,
lyrics: 0,
karaoke: 0,
forced: 0,
hearing_impaired: 0,
visual_impaired: 0,
clean_effects: 0,
attached_pic: 0,
timed_thumbnails: 0
},
tags: { creation_time: '2022-03-26T04:53:07.000000Z', language: 'und' }
},
{
index: 1,
codec_name: 'bin_data',
codec_long_name: 'binary data',
codec_type: 'data',
codec_tag_string: 'text',
codec_tag: '0x74786574',
r_frame_rate: '0/0',
avg_frame_rate: '0/0',
time_base: '1/44100',
start_pts: 0,
start_time: '0.000000',
duration_ts: 1264846848,
duration: '28681.334422',
nb_frames: '45',
disposition: {
default: 0,
dub: 0,
original: 0,
comment: 0,
lyrics: 0,
karaoke: 0,
forced: 0,
hearing_impaired: 0,
visual_impaired: 0,
clean_effects: 0,
attached_pic: 0,
timed_thumbnails: 0
},
tags: { creation_time: '2022-03-26T04:53:39.000000Z', language: 'und' }
},
{
index: 2,
codec_name: 'mjpeg',
codec_long_name: 'Motion JPEG',
profile: 'Baseline',
codec_type: 'video',
codec_time_base: '0/1',
codec_tag_string: '[0][0][0][0]',
codec_tag: '0x0000',
width: 300,
height: 300,
coded_width: 300,
coded_height: 300,
closed_captions: 0,
has_b_frames: 0,
sample_aspect_ratio: '1:1',
display_aspect_ratio: '1:1',
pix_fmt: 'yuvj420p',
level: -99,
color_range: 'pc',
color_space: 'bt470bg',
chroma_location: 'center',
refs: 1,
r_frame_rate: '90000/1',
avg_frame_rate: '0/0',
time_base: '1/90000',
start_pts: 0,
start_time: '0.000000',
duration_ts: 2581320098,
duration: '28681.334422',
bits_per_raw_sample: '8',
disposition: {
default: 0,
dub: 0,
original: 0,
comment: 0,
lyrics: 0,
karaoke: 0,
forced: 0,
hearing_impaired: 0,
visual_impaired: 0,
clean_effects: 0,
attached_pic: 1,
timed_thumbnails: 0
}
}

From what I've seen on other issues, it seems like when ffprobe isn't returning the data then there isn't much that can be done (anyone feel free to correct me if I'm wrong). At least it's a pretty easy workaround to open and then save the file in another application before adding it to a library.

@warnwar commented on GitHub (Jul 18, 2023): I thought this might be something I could fix, but after looking at it I'm not sure I can do much. I noticed that ffprobe is not picking up the video stream. This is the data it shows for the file originally mentioned [above](https://archive.org/download/bluecastle_2203_librivox/BlueCastle_librivox.m4b): > { index: 0, codec_name: 'aac', codec_long_name: 'AAC (Advanced Audio Coding)', profile: 'LC', codec_type: 'audio', codec_time_base: '1/44100', codec_tag_string: 'mp4a', codec_tag: '0x6134706d', sample_fmt: 'fltp', sample_rate: '44100', channels: 1, channel_layout: 'mono', bits_per_sample: 0, r_frame_rate: '0/0', avg_frame_rate: '0/0', time_base: '1/44100', start_pts: 0, start_time: '0.000000', duration_ts: 1264846848, duration: '28681.334422', bit_rate: '62486', max_bit_rate: '87048', nb_frames: '1235202', disposition: { default: 1, dub: 0, original: 0, comment: 0, lyrics: 0, karaoke: 0, forced: 0, hearing_impaired: 0, visual_impaired: 0, clean_effects: 0, attached_pic: 0, timed_thumbnails: 0 }, tags: { creation_time: '2022-03-26T04:53:07.000000Z', language: 'und' } }, { index: 1, codec_name: 'bin_data', codec_long_name: 'binary data', codec_type: 'data', codec_tag_string: 'text', codec_tag: '0x74786574', r_frame_rate: '0/0', avg_frame_rate: '0/0', time_base: '1/44100', start_pts: 0, start_time: '0.000000', duration_ts: 1264846848, duration: '28681.334422', nb_frames: '45', disposition: { default: 0, dub: 0, original: 0, comment: 0, lyrics: 0, karaoke: 0, forced: 0, hearing_impaired: 0, visual_impaired: 0, clean_effects: 0, attached_pic: 0, timed_thumbnails: 0 }, tags: { creation_time: '2022-03-26T04:53:39.000000Z', language: 'und' } } If I open up that .m4b file in mp3tag and save it without changing anything, the cover image will load fine. Here is the ffprobe data after opening/saving it: > { index: 0, codec_name: 'aac', codec_long_name: 'AAC (Advanced Audio Coding)', profile: 'LC', codec_type: 'audio', codec_time_base: '1/44100', codec_tag_string: 'mp4a', codec_tag: '0x6134706d', sample_fmt: 'fltp', sample_rate: '44100', channels: 1, channel_layout: 'mono', bits_per_sample: 0, r_frame_rate: '0/0', avg_frame_rate: '0/0', time_base: '1/44100', start_pts: 0, start_time: '0.000000', duration_ts: 1264846848, duration: '28681.334422', bit_rate: '62486', max_bit_rate: '87048', nb_frames: '1235202', disposition: { default: 1, dub: 0, original: 0, comment: 0, lyrics: 0, karaoke: 0, forced: 0, hearing_impaired: 0, visual_impaired: 0, clean_effects: 0, attached_pic: 0, timed_thumbnails: 0 }, tags: { creation_time: '2022-03-26T04:53:07.000000Z', language: 'und' } }, { index: 1, codec_name: 'bin_data', codec_long_name: 'binary data', codec_type: 'data', codec_tag_string: 'text', codec_tag: '0x74786574', r_frame_rate: '0/0', avg_frame_rate: '0/0', time_base: '1/44100', start_pts: 0, start_time: '0.000000', duration_ts: 1264846848, duration: '28681.334422', nb_frames: '45', disposition: { default: 0, dub: 0, original: 0, comment: 0, lyrics: 0, karaoke: 0, forced: 0, hearing_impaired: 0, visual_impaired: 0, clean_effects: 0, attached_pic: 0, timed_thumbnails: 0 }, tags: { creation_time: '2022-03-26T04:53:39.000000Z', language: 'und' } }, { index: 2, codec_name: 'mjpeg', codec_long_name: 'Motion JPEG', profile: 'Baseline', codec_type: 'video', codec_time_base: '0/1', codec_tag_string: '[0][0][0][0]', codec_tag: '0x0000', width: 300, height: 300, coded_width: 300, coded_height: 300, closed_captions: 0, has_b_frames: 0, sample_aspect_ratio: '1:1', display_aspect_ratio: '1:1', pix_fmt: 'yuvj420p', level: -99, color_range: 'pc', color_space: 'bt470bg', chroma_location: 'center', refs: 1, r_frame_rate: '90000/1', avg_frame_rate: '0/0', time_base: '1/90000', start_pts: 0, start_time: '0.000000', duration_ts: 2581320098, duration: '28681.334422', bits_per_raw_sample: '8', disposition: { default: 0, dub: 0, original: 0, comment: 0, lyrics: 0, karaoke: 0, forced: 0, hearing_impaired: 0, visual_impaired: 0, clean_effects: 0, attached_pic: 1, timed_thumbnails: 0 } } From what I've seen on other issues, it seems like when ffprobe isn't returning the data then there isn't much that can be done (anyone feel free to correct me if I'm wrong). At least it's a pretty easy workaround to open and then save the file in another application before adding it to a library.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/audiobookshelf#695