[Bug]: Embedding metadata into original file just does not work. #1693

Open
opened 2026-04-24 23:55:17 +02:00 by adam · 10 comments
Owner

Originally created by @iamfree139 on GitHub (Jan 26, 2024).

Describe the issue

First of all, I wanted to fix the metadata of an audiobook. So, I matched the book, which did most of the job. Then, I chose a cover that I liked. After that, I wanted to embed the now-corrected metadata into the original file, so I clicked on 'Tools' and then pressed 'Quick Embed'. However, after completion, when I opened the file in Finder, nothing appeared to have changed.

I expected the cover art to have been changed.

So, then I tried with another book. This time, I matched the book, but there was a delay when I clicked on a chapter and it began to play. This issue was fixed by using the 'shift times' feature, which I set to -3. After this adjustment, it played perfectly. Then, I pressed 'Quick Embed' again. After completion, when I opened the file in Finder, nothing appeared to have changed.

I expected the cover art and chapter times to have been changed.

I wanted to change the metadata of my audiobooks, but I couldn't find any fully open-source app with a GUI and the ability to import data from Audible automatically. That's why I am trying Audiobookshelf.

Steps to reproduce the issue

  1. Match the audiobook.
  2. Choose new cover art.
  3. Embed corrected metadata using the 'Quick Embed' feature.

Audiobookshelf version

2.7.2

How are you running audiobookshelf?

Docker

Originally created by @iamfree139 on GitHub (Jan 26, 2024). ### Describe the issue First of all, I wanted to fix the metadata of an audiobook. So, I matched the book, which did most of the job. Then, I chose a cover that I liked. After that, I wanted to embed the now-corrected metadata into the original file, so I clicked on 'Tools' and then pressed 'Quick Embed'. However, after completion, when I opened the file in Finder, nothing appeared to have changed. I expected the cover art to have been changed. So, then I tried with another book. This time, I matched the book, but there was a delay when I clicked on a chapter and it began to play. This issue was fixed by using the 'shift times' feature, which I set to -3. After this adjustment, it played perfectly. Then, I pressed 'Quick Embed' again. After completion, when I opened the file in Finder, nothing appeared to have changed. I expected the cover art and chapter times to have been changed. I wanted to change the metadata of my audiobooks, but I couldn't find any fully open-source app with a GUI and the ability to import data from Audible automatically. That's why I am trying Audiobookshelf. ### Steps to reproduce the issue 1. Match the audiobook. 2. Choose new cover art. 3. Embed corrected metadata using the 'Quick Embed' feature. ### Audiobookshelf version 2.7.2 ### How are you running audiobookshelf? Docker
adam added the bugwaitingunable to reproduce labels 2026-04-24 23:55:17 +02:00
Author
Owner

@iamfree139 commented on GitHub (Jan 26, 2024):

Audiobook 1 in audiobookshelf app
Screenshot 2024-01-26 at 3 38 34 PM
Audiobook 1 in FInder
Screenshot 2024-01-26 at 3 38 54 PM

Audiobook 2 corrected chapter after assigning shift times
Screenshot 2024-01-26 at 3 41 44 PM
Audiobook 2 Chapter in FInder
Screenshot 2024-01-26 at 3 43 52 PM
Audiobook 2 Cover in Finder
Screenshot 2024-01-26 at 3 44 41 PM

@iamfree139 commented on GitHub (Jan 26, 2024): Audiobook 1 in audiobookshelf app <img width="234" alt="Screenshot 2024-01-26 at 3 38 34 PM" src="https://github.com/advplyr/audiobookshelf/assets/135931740/716bffc0-602d-40e6-be1e-6a90714c5bb5"> Audiobook 1 in FInder <img width="143" alt="Screenshot 2024-01-26 at 3 38 54 PM" src="https://github.com/advplyr/audiobookshelf/assets/135931740/a520eeb5-a6c5-450f-9e68-041a4a21fd90"> Audiobook 2 corrected chapter after assigning shift times <img width="1346" alt="Screenshot 2024-01-26 at 3 41 44 PM" src="https://github.com/advplyr/audiobookshelf/assets/135931740/3fce5dc5-7d70-47fd-86f5-aaa3342d79c2"> Audiobook 2 Chapter in FInder <img width="364" alt="Screenshot 2024-01-26 at 3 43 52 PM" src="https://github.com/advplyr/audiobookshelf/assets/135931740/fac8341d-17ae-4507-b07f-b392bb0505d4"> Audiobook 2 Cover in Finder <img width="121" alt="Screenshot 2024-01-26 at 3 44 41 PM" src="https://github.com/advplyr/audiobookshelf/assets/135931740/954c9dab-2010-4ee9-8a7f-776828d42ac9">
Author
Owner

@advplyr commented on GitHub (Jan 26, 2024):

This is a known issue with specific m4b files. It hasn't been investigated since Tone will be replaced with ffmpeg soon.

@advplyr commented on GitHub (Jan 26, 2024): This is a known issue with specific m4b files. It hasn't been investigated since Tone will be replaced with ffmpeg soon.
Author
Owner

@iamfree139 commented on GitHub (Jan 27, 2024):

Thank you for replying, i guess my Audiobook journey has to wait.

@iamfree139 commented on GitHub (Jan 27, 2024): Thank you for replying, i guess my Audiobook journey has to wait.
Author
Owner

@sbrjct commented on GitHub (Feb 18, 2024):

I've merged several .mp3 files into a single .mp3 for an audiobook (to avoid transcoding artifacts). I tried embedding the metadata into the .mp3 but, as above, it doesn't stick. No chapters or cover art changes noted in Files or other apps. Is this also a bug with Tone? I made sure it wasn't a permissions issue.

@sbrjct commented on GitHub (Feb 18, 2024): I've merged several .mp3 files into a single .mp3 for an audiobook (to avoid transcoding artifacts). I tried embedding the metadata into the .mp3 but, as above, it doesn't stick. No chapters or cover art changes noted in Files or other apps. Is this also a bug with Tone? I made sure it wasn't a permissions issue.
Author
Owner

@Indemnity83 commented on GitHub (Feb 25, 2024):

This is a known issue with specific m4b files. It hasn't been investigated since Tone will be replaced with ffmpeg soon.

Any ETA on "soon"? I just started to clean up my audiobook library using this great tool, but if I can't fix the metadata then I probably need to wait like @iamfree139. Is there a nightly build with ffmpeg already?

@Indemnity83 commented on GitHub (Feb 25, 2024): > This is a known issue with specific m4b files. It hasn't been investigated since Tone will be replaced with ffmpeg soon. Any ETA on "soon"? I just started to clean up my audiobook library using this great tool, but if I can't fix the metadata then I probably need to wait like @iamfree139. Is there a nightly build with ffmpeg already?
Author
Owner

@iamfree139 commented on GitHub (Feb 26, 2024):

@Indemnity83 if you must i suggest using ffmpeg directly, You can use it the cmd below

How to Edit Audiobook metadata using FFMPEG
To Embed a Cover Art
ffmpeg -i "input.m4b" -i "cover.png" -map 0:a -map 1:v -c:a copy -c:v copy -disposition:v attached_pic -metadata:s:v title="Album cover" -id3v2_version 3 "output.m4b"

To Embed Author name
ffmpeg -i "input.m4b" -c copy -metadata artist="Walter Isaacson" "output.m4b"

To Embed Book name
ffmpeg -i "input.m4b" -c copy -metadata album="The Innovators" "output.m4b"

To Add chapters Metadata
First Remove Chapter Metadata before adding
ffmpeg -i "input.m4b" -c copy -map_chapters -1 "output.m4b"
Then Add Chapter Metadata
ffmpeg -i input.m4b -i chapters.txt -map_metadata 1 -codec copy output.m4b

Misc
To Remove First 2.05 second
ffmpeg -i input.m4b -ss 00:00:02.05 -c copy output.m4b

@iamfree139 commented on GitHub (Feb 26, 2024): @Indemnity83 if you must i suggest using ffmpeg directly, You can use it the cmd below How to Edit Audiobook metadata using FFMPEG To Embed a Cover Art ffmpeg -i "input.m4b" -i "cover.png" -map 0:a -map 1:v -c:a copy -c:v copy -disposition:v attached_pic -metadata:s:v title="Album cover" -id3v2_version 3 "output.m4b" To Embed Author name ffmpeg -i "input.m4b" -c copy -metadata artist="Walter Isaacson" "output.m4b" To Embed Book name ffmpeg -i "input.m4b" -c copy -metadata album="The Innovators" "output.m4b" To Add chapters Metadata First Remove Chapter Metadata before adding ffmpeg -i "input.m4b" -c copy -map_chapters -1 "output.m4b" Then Add Chapter Metadata ffmpeg -i input.m4b -i chapters.txt -map_metadata 1 -codec copy output.m4b Misc To Remove First 2.05 second ffmpeg -i input.m4b -ss 00:00:02.05 -c copy output.m4b
Author
Owner

@thedavidthomas commented on GitHub (Apr 2, 2024):

Same here, seems to just refuse to embed the metadata in some .m4b files randomly.

Also tried with Tone directly and it might be a bug with them since running tone commands manually also don't seem to embed anything.

Am mostly looking to embed chapters. The metadata.json files from audiobookshelf have the correct data (I have these saving alongside the .m4b file) is there anyway to generate a .chapters.txt file from the metadata.json?

I was able to use mp4chaps util from the MP4v2 Library to make txt files for each of my books so was thinking if audiobookshelf could edit these somehow or I could run a script to update them from the metadata.json files could use those to embed back.

@thedavidthomas commented on GitHub (Apr 2, 2024): Same here, seems to just refuse to embed the metadata in some .m4b files randomly. Also tried with Tone directly and it might be a bug with them since running tone commands manually also don't seem to embed anything. Am mostly looking to embed chapters. The `metadata.json` files from audiobookshelf have the correct data (I have these saving alongside the .m4b file) is there anyway to generate a `.chapters.txt` file from the metadata.json? I was able to use mp4chaps util from the MP4v2 Library to make txt files for each of my books so was thinking if audiobookshelf could edit these somehow or I could run a script to update them from the metadata.json files could use those to embed back.
Author
Owner

@Enissay commented on GitHub (May 7, 2024):

@Indemnity83 if you must i suggest using ffmpeg directly, You can use it the cmd below

How to Edit Audiobook metadata using FFMPEG To Embed a Cover Art ffmpeg -i "input.m4b" -i "cover.png" -map 0:a -map 1:v -c:a copy -c:v copy -disposition:v attached_pic -metadata:s:v title="Album cover" -id3v2_version 3 "output.m4b"

To Embed Author name ffmpeg -i "input.m4b" -c copy -metadata artist="Walter Isaacson" "output.m4b"

To Embed Book name ffmpeg -i "input.m4b" -c copy -metadata album="The Innovators" "output.m4b"

To Add chapters Metadata First Remove Chapter Metadata before adding ffmpeg -i "input.m4b" -c copy -map_chapters -1 "output.m4b" Then Add Chapter Metadata ffmpeg -i input.m4b -i chapters.txt -map_metadata 1 -codec copy output.m4b

Misc To Remove First 2.05 second ffmpeg -i input.m4b -ss 00:00:02.05 -c copy output.m4b

A similar issue drove me nuts since it seems to happen only with some files randomly!

It would be nice to generalize this and create a bash/python script that would read everything from the metadata.json and embed it into the corresponding file... This would be used only on these divergent files while awaiting for an official fix on ABS.

Edit:
I will give it a try soon, but the tricky part is to make sure the new metadata is stored the same way as the old to ensure all files are the same. From what I saw so far, ABS creates custom metadata names so it will be tricky to find them all and map them... Any help would be welcome...

@Enissay commented on GitHub (May 7, 2024): > @Indemnity83 if you must i suggest using ffmpeg directly, You can use it the cmd below > > How to Edit Audiobook metadata using FFMPEG To Embed a Cover Art ffmpeg -i "input.m4b" -i "cover.png" -map 0:a -map 1:v -c:a copy -c:v copy -disposition:v attached_pic -metadata:s:v title="Album cover" -id3v2_version 3 "output.m4b" > > To Embed Author name ffmpeg -i "input.m4b" -c copy -metadata artist="Walter Isaacson" "output.m4b" > > To Embed Book name ffmpeg -i "input.m4b" -c copy -metadata album="The Innovators" "output.m4b" > > To Add chapters Metadata First Remove Chapter Metadata before adding ffmpeg -i "input.m4b" -c copy -map_chapters -1 "output.m4b" Then Add Chapter Metadata ffmpeg -i input.m4b -i chapters.txt -map_metadata 1 -codec copy output.m4b > > Misc To Remove First 2.05 second ffmpeg -i input.m4b -ss 00:00:02.05 -c copy output.m4b A similar issue drove me nuts since it seems to happen only with some files randomly! It would be nice to generalize this and create a bash/python script that would read everything from the `metadata.json` and embed it into the corresponding file... This would be used only on these `divergent` files while awaiting for an official fix on ABS. Edit: I will give it a try soon, but the tricky part is to make sure the new metadata is stored the same way as the old to ensure all files are the same. From what I saw so far, ABS creates custom metadata names so it will be tricky to find them all and map them... Any help would be welcome...
Author
Owner

@BrianAker commented on GitHub (Sep 19, 2024):

This may be the answer, $var in the following case is m4b file, $metadata_file is where you will dump the data:

ffmpeg -nostdin -loglevel quiet -i "$var" -f ffmetadata "$metadata_file"

Now check to make sure major_brand is correct:
grep -q '^major_brand=M4A' "$metadata_file"

If not, this is my suggested fix:

sed -i 's/^major_brand=./major_brand=M4A/' "$metadata_file"
sed -i 's/^compatible_brands=.
/compatible_brands=M4A isomiso2/' "$metadata_file"

And then:

ffmpeg -nostdin -loglevel quiet -i "$tmp_file" -i "$metadata_file" -map_metadata 1 -c copy "$var"

I can post my entire script, but the above is the basics. I have found that when major_brand is broken, normally compatible_brands is as well.

I hope this is useful for others, keep in mind, I could be wrong about the above, but it does fix things for me.

@BrianAker commented on GitHub (Sep 19, 2024): This may be the answer, $var in the following case is m4b file, $metadata_file is where you will dump the data: ffmpeg -nostdin -loglevel quiet -i "$var" -f ffmetadata "$metadata_file" Now check to make sure major_brand is correct: grep -q '^major_brand=M4A' "$metadata_file" If not, this is my suggested fix: sed -i 's/^major_brand=.*/major_brand=M4A/' "$metadata_file" sed -i 's/^compatible_brands=.*/compatible_brands=M4A isomiso2/' "$metadata_file" And then: ffmpeg -nostdin -loglevel quiet -i "$tmp_file" -i "$metadata_file" -map_metadata 1 -c copy "$var" I can post my entire script, but the above is the basics. I have found that when major_brand is broken, normally compatible_brands is as well. I hope this is useful for others, keep in mind, I could be wrong about the above, but it does fix things for me.
Author
Owner

@advplyr commented on GitHub (May 18, 2025):

Tone was replaced with ffmpeg a while ago. Is this still an issue?

@advplyr commented on GitHub (May 18, 2025): Tone was replaced with ffmpeg a while ago. Is this still an issue?
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/audiobookshelf#1693