Keep MP3 if your player already handles your chapter tracks or reads the markers in your MP3. Choose a chaptered M4B if you want one file with named jumps inside it and your player can read those markers. You can make either from audio you already have. Start with one book before converting a whole library.
Compare files, chapters and metadata
MP3 is the MPEG Audio Layer III audio format. M4B is an audiobook extension for an MPEG-4 container; the audio inside it can use different codecs or codec profiles. The recipe below uses AAC-LC. See the LAME MP3 project and FFmpeg's MPEG-4 muxer.
| Feature | MP3 | M4B |
|---|---|---|
| Chapters | Use separate tracks, or embed chapters in one MP3 with the ID3 CHAP and CTOC frames . The player must read those frames to show jumps within a single file. | One file can hold a named chapter list with timestamps. The markers need to be written into the file and recognized by the player. |
| Cover art | An ID3 APIC frame can carry a front cover. Repeating the same cover in every track repeats the image data. | An MPEG-4 container can carry embedded artwork , so one book file can carry its cover with it. |
| Player support | Widely supported for playback. A playlist can navigate separate files even if the app cannot read embedded MP3 chapters. | Check that the app accepts M4B, decodes the audio and exposes the chapter list. Those are three separate checks. |
| File size | Depends on duration and average audio bitrate, plus tags and any artwork across the files. | At the same duration and average bitrate, the audio takes about the same space. Container data, chapter metadata and artwork add overhead. |
For either format, one hour at an average 128 kbps is about 57.6 MB of audio before tags and artwork (128,000 bits per second × 3,600 ÷ 8). Re-encoding at a lower bitrate can reduce size but can also change how the narration sounds. Changing the extension alone changes neither.
A chapter marker is a jump point in the book. A resume position is where the player remembers you stopped; a bookmark is a point you save yourself. Check both player features separately, especially if you are moving a book to a different app.
Check support on your listening device
iPhone: Apple Books and BookPlayer
Apple documents importing MP3 audiobooks through Books on Mac → File → Import, syncing audiobooks to iPhone with Finder, and opening the track list in the iPhone Books player. Those instructions do not specify which embedded MP3 chapter tags survive import and sync.
If the files are already on your iPhone, BookPlayer imports from Files and documents playback of DRM-free MP3 and M4B. Open a chaptered M4B and check the chapter list. With separate MP3s, Combine into Volume groups the tracks as chapters inside BookPlayer; it does not produce a new M4B to share.
Android: Voice Audiobook Player
Android's format table lists MP3 and AAC-LC in MPEG-4. That describes decoding support, not whether a particular app accepts .m4b files or shows chapters. Voice Audiobook Player lists both MP3 and M4B and offers chapter navigation. Add the book folder; Voice's folder rules explain how it orders separate tracks by name. The reviewed Voice parser explicitly checks M4B for MP4 chapters. For one long MP3, check your chapter list before relying on embedded ID3 markers.
VLC on desktop
VideoLAN lists MP3, AAC and MP4 playback support, and VLC 3.0's audio file list includes M4B. While playing an AAC M4B, look for Chapter in the Playback menu. It can jump between chapters VLC recognizes. For a set of MP3s, open the tracks in order in a playlist and switch tracks. MP3 playback alone does not tell you whether VLC will show an MP3's embedded chapter list.
Audiobookshelf
Put the M4B or the numbered MP3s in a book folder and scan the library. Audiobookshelf's scanner uses chapters it reads from a single M4B and can build chapters from separate tracks when there are no embedded markers. Check the chapter list after scanning. If the MP3 order is wrong, open Manage Tracks on the book's details page; Audiobookshelf can order by both filenames and tags. Library and track rules.
The server FAQ notes seeking issues in very long MP3s. It also says that servers using FFmpeg 7 or earlier cannot scan M4B files encoded with xHE-AAC. A file can therefore have a familiar suffix and still fail at the scan or playback step.
Choose a format for sharing and storage
Keep MP3 chapters together in one folder if you want to replace or share individual tracks. Use a ZIP to transfer the folder if needed, then unpack it unless your player explicitly imports ZIPs. Use one M4B if you want to move the whole book and its chapter list as a single file. Keep the originals, and check that you have permission before sharing someone else's narration or audio licensed for personal use.
Before moving a library, import one book in the app you plan to use. Check the cover, select a later chapter and listen for its opening, then close and reopen the app to check resume. If you need bookmarks or offline listening, test those separately with the book saved locally.
Convert only when it solves a real problem
Use FFmpeg and ffprobe for the examples below. Run the commands in a folder with copies of your files. Renaming .mp3 to .m4b cannot add chapters or convert the audio.
Keep one MP3 per chapter
If the files are already split, put one book in one folder. Name the tracks in order, for example 01-opening.mp3 and 02-chapter-two.mp3. If your player sorts by tags, use a shared album name and matching track numbers in a tag editor. Import the folder or play it as a playlist and check the displayed order. This requires no audio conversion.
If you have one long MP3, listen and write down the chapter starts. With a second chapter beginning at 30 seconds, the first command takes the opening 30 seconds and the second takes the rest. For more chapters, set -ss to each chapter's start and -t to its length (next start minus current start). Update the title, track number and filename each time.
ffmpeg -n -ss 0 -i "book.mp3" -t 30 -map 0:a:0 -map_chapters -1 -c:a copy -metadata album="Example Book" -metadata title="Opening" -metadata track=1 "01-opening.mp3"
ffmpeg -n -ss 30 -i "book.mp3" -map 0:a:0 -map_chapters -1 -c:a copy -metadata album="Example Book" -metadata title="Chapter Two" -metadata track=2 "02-chapter-two.mp3"
-c:a copy avoids re-encoding. Cuts can land slightly off the requested time because FFmpeg seeks to available points and copies whole audio packets. Listen to both sides of each cut for repeated or missing words. If the cut needs to be precise, trim by ear in an audio editor before exporting the chapter. FFmpeg's seeking and stream copy options.
Make one M4B with embedded chapters
1. List the chapter boundaries. For a single book.mp3, note the chapter starts as you listen. Use ffprobe -v error -show_entries format=duration -of default=nw=1:nk=1 "book.mp3" to check the total duration in seconds. For separate MP3s, start with their cumulative durations in playback order and verify the joins in the output; encoder padding can affect the estimate.
2. Save chapters.txt as plain UTF-8 text without a byte order mark. In this example, chapter two starts at 30 seconds and the book ends at 75 seconds. With TIMEBASE=1/1000, the times are whole milliseconds. Replace the titles and times with yours. End each chapter at the next chapter's start and the last at the end of the book. FFmpeg metadata syntax.
;FFMETADATA1
title=Example Book
artist=Example Author
[CHAPTER]
TIMEBASE=1/1000
START=0
END=30000
title=Opening
[CHAPTER]
TIMEBASE=1/1000
START=30000
END=75000
title=Chapter Two
3. Encode the audio and copy in the chapter list. The first input is the audio; the second supplies the book metadata and chapters. The example encodes AAC-LC at 96 kbps. FFmpeg's metadata and chapter mapping.
ffmpeg -n -i "book.mp3" -f ffmetadata -i "chapters.txt" -map 0:a:0 -map_metadata 1 -map_chapters 1 -c:a aac -profile:a aac_low -b:a 96k "book.m4b"
For separate MP3s, save this example as tracks.ffconcat (also plain UTF-8 without a byte order mark), with your filenames in order. In the command above, replace -i "book.mp3" with -f concat -i "tracks.ffconcat". Use matching audio streams (codec, sample rate and channel layout). If your files have incompatible streams, join them in an editor, export one WAV and use that as the first input instead. FFmpeg concat requirements.
ffconcat version 1.0
file 01-opening.mp3
file 02-chapter-two.mp3
4. Check what the file contains. Run ffprobe's chapter inspection and check that the titles and start/end times match your list. For this example, you should see Opening at 0 seconds and Chapter Two at 30 seconds. Then try those jumps in your actual player. The example commands map audio only, so they do not copy the original cover; keep it separately. Audiobookshelf can use a cover image from the book folder.
ffprobe -v error -show_chapters "book.m4b"
Starting from a PDF? The PDF workspace exports chapter MP3 files when generation is available. See the iPhone export guide or Android export guide for device workflows, and the Audiobookshelf guide to keep a PDF or EPUB with its audio.
The FFmpeg steps were checked with locally generated test audio. The split produced two numbered MP3s, and both the single MP3 and the MP3 track list produced an AAC-LC M4B with the expected chapter titles and times. Player behavior is based on the linked documentation and source code. Device imports, listening quality and bookmark transfers were not tested.