Getting Started

m4Bookmaker runs on macOS 13 (Ventura) or later, Windows 10 or later, and Linux. Install from PyPI or GitHub for free (requires Python and ffmpeg), or buy the direct download ($9.99) — self-contained, ffmpeg bundled, no setup required.

Direct download ($9.99)

Everything is bundled — no Python, no Homebrew, no ffmpeg to install.

System requirements: macOS 13 (Ventura) or later on Intel or Apple Silicon, or 64-bit Windows 10 or later. Macs that can’t run macOS 13 — including most models from 2015 and earlier — are not supported by the app; use the free command-line version instead.

Mac

  1. 1Download the Mac DMG from the product page. Open the DMG and drag m4Bookmaker to your Applications folder.
  2. 2Launch from Applications or Spotlight (⌘Space → m4Bookmaker).
  3. 3On first launch, macOS may ask you to confirm opening the app. Click Open.

Windows

  1. 1Download the Windows installer from the product page. Run the installer and follow the prompts.
  2. 2Launch m4Bookmaker from the Start menu or desktop shortcut.
  3. 3On first launch, Windows SmartScreen may show a warning. Click More info → Run anyway.

Update by re-downloading the latest installer from the product page.

GitHub version (free)

The same application, GPL-3.0 licensed, installed from PyPI. You supply Python 3.11 or newer and ffmpeg; everything else is handled for you.

The m4bmaker command is identical on macOS, Windows, and Linux. Only the way you install Python and ffmpeg differs. Pick your platform below and run the four steps in order.

macOS

# 1 — Python 3.11 or newer (the Python macOS ships is 3.9, too old)
brew install python

# 2 — ffmpeg
brew install ffmpeg

# 3 — m4Bookmaker
pip3 install "m4bmaker[gui]"

# 4 — check it worked
m4bmaker --help
Don’t have Homebrew? Install it from brew.sh — one command, about a minute. Or install Python from python.org instead and use a prebuilt ffmpeg.

Windows

# 1 — install Python 3.11 or newer from python.org
#     Tick "Add python.exe to PATH" in the installer.

# 2 — ffmpeg
winget install ffmpeg

# 3 — m4Bookmaker
py -m pip install "m4bmaker[gui]"

# 4 — check it worked
m4bmaker --help
Why py -m pip rather than pip? Windows often has several Python versions installed, and a bare pip can belong to the wrong one — or not be on your PATH at all. The py launcher always resolves to a real Python and installs into it.

Linux

# 1 — Python 3.11 or newer, pip, and ffmpeg
sudo apt install python3 python3-pip ffmpeg    # Debian, Ubuntu
sudo dnf install python3 python3-pip ffmpeg    # Fedora
sudo pacman -S python python-pip ffmpeg        # Arch

# 2 — m4Bookmaker
pip install "m4bmaker[gui]"

# 3 — check it worked
m4bmaker --help

After installing

Launch the graphical app with m4bmaker-gui, or use the command line with m4bmaker. For the command line only — no graphical interface, a much smaller install — drop the [gui] and install plain m4bmaker instead.

“m4bmaker: command not found”? The package installed, but its command isn’t on your PATH. Run it through Python instead — python -m m4bmaker --help on macOS and Linux, or py -m m4bmaker --help on Windows. That always works.

From source

If you want to read the code, modify it, or contribute, the full source is on GitHub under GPL-3.0, with development setup documented in CONTRIBUTING.md. For simply using the app, install from PyPI above — it is the same code and considerably less work.

GUI Guide

Walk through every feature of the m4bmaker interface — from building your first audiobook to editing chapters you've already encoded.

Building an Audiobook

The main window's Convert tab takes a folder of audio tracks and combines them into a single .m4b audiobook with embedded chapters, cover art, and metadata.

Step-by-step

  1. 1 Choose your folder. Click the folder button or drag a folder onto the window. m4bmaker scans it (including subfolders) and lists every supported audio file. The file count and estimated total duration appear immediately.
  2. 2 Review the chapter list. Each audio file becomes one chapter, sorted by track number tag then alphabetically by filename. Click the Chapters tab to rename, reorder, or remove chapters before building. See Chapter Editor for details.
  3. 3 Add cover art. Drag a JPEG or PNG onto the cover area, click to browse your files, or paste an image URL into the URL field. m4bmaker also scans the source folder for common filenames (cover.jpg, folder.jpg, artwork.png, etc.) and offers to use them automatically.
  4. 4 Fill in metadata. Enter the book Title, Author, Narrator, Year, and Genre. These are embedded in the .m4b and shown by every audiobook player. m4bmaker pre-fills any fields it can read from existing ID3/MP4 tags in your audio files.
  5. 5 Set the output path. By default the .m4b is saved next to your source folder in an Author/Title/ subfolder. Click the output field to choose a different location or type any full path.
  6. 6 Choose encoding settings. The defaults are ideal for most audiobooks — 96k bitrate, mono. Increase to 128k for higher-quality sources. Enable Stereo only if the source audio is stereo and that distinction is important to you.
  7. 7 Click Build Audiobook. A progress bar tracks the encode. When it finishes, a system notification appears and the output file is revealed in Finder.
Close-while-running: You can close the window — even quit the app — during encoding. The encode job keeps running in the background. A notification is shown when it completes.

Supported input formats

m4bmaker accepts .mp3, .m4a, .aac, .flac, .wav, and .ogg. You can mix formats freely in a single folder — everything is re-encoded to AAC in the output.

Chapter Editor

The Chapter Editor lets you review and adjust the chapter markers that will be written into the output file. Open it by clicking the Chapters tab in the main window. The table has three columns: # (chapter number, auto-assigned), Time (start time), and Title (editable).

Renaming chapters

Double-click any chapter title to edit it inline. Press Return to confirm or Escape to cancel. Chapter names appear in your audiobook player's chapter navigation menu.

Reordering chapters

Select any chapter row and click the ↑ or ↓ buttons below the table to move it up or down. Chapter numbers are automatically reassigned after every move.

Build mode: reordering also moves the corresponding source file, so the audio is encoded in the new order.

Edit mode: only the chapter-marker timestamps are rearranged — the audio stream in the file is never rewritten. Use this to relabel which portion of audio carries which chapter name.

Removing a chapter or file

Build mode — Remove File: removes the corresponding audio file entirely from the book. It will not appear in the output at all. You need at least two files loaded to remove one.

Edit mode — Remove Chapter: deletes only the chapter marker. The audio plays straight through without a break — nothing is cut from the file. Chapter numbers are reassigned automatically.

Merging chapters

Shift-click a consecutive range of rows to select them, then click Merge. The selected rows collapse into a single chapter using the first row's title. The audio for all merged rows is still present — the merge just removes the intermediate chapter-boundary markers.

Build mode: all source files still encode in full after a merge. After the first merge, the ↑ ↓ and Remove File buttons hide because the file count and chapter count no longer match 1:1. You can continue merging further ranges.

Edit mode: markers are collapsed and the audio stream is untouched, as with all edit-mode operations.

Setting a chapter start time

Chapter start times are normally calculated from the cumulative duration of files before each chapter. To pin a chapter to a precise moment, use the integrated player: seek to the exact spot you want the chapter to begin, select that chapter row in the table, then click ⇥ Insert Time. The start time updates instantly. The change is undoable with ⌘Z.

Bulk-editing chapter titles

Right-click anywhere in the chapter table to open the bulk-edit menu. Operations apply to the selected rows, or to all rows if nothing is selected. Every action is undoable with ⌘Z / Ctrl+Z.

  • Find / Replace… — search and replace text across titles. Supports regex.
  • Remove Numeric Prefixes — strips leading numbers like "01. " or "3 - ".
  • Add Sequential Numeric Prefix — prepends "1. ", "2. ", … to each title.
  • Number as "Chapter X" — replaces titles entirely with "Chapter 1", "Chapter 2", …
  • Add Prefix… / Add Suffix… — prepend or append custom text to every title.
  • Title Case / Sentence Case — change capitalisation.
  • Clear Titles — blanks out all titles so you can start fresh.
Non-destructive: All edits in the Chapter Editor only affect the markers written into the output container. Your original source files are never modified.

Rechaptering an Existing M4B

Already have a .m4b but the chapters are wrong, missing, or poorly named? Edit Mode lets you rewrite chapter metadata without re-encoding the audio at all. The operation is instantaneous relative to encoding and lossless by definition.

  1. 1Click the Edit Mode button in the toolbar, or drag a .m4b file directly onto the window.
  2. 2The existing chapters are loaded into the Chapter Editor.
  3. 3Rename, reorder, merge, or remove chapter markers as needed.
  4. 4Click Save Changes. Only the chapter metadata is rewritten — the audio stream is left completely untouched.
Zero quality loss: Because no audio re-encoding happens, you can rechapter the same file multiple times with no degradation whatsoever.
Audio order is preserved: In Edit Mode, reordering, removing, or merging chapter markers never changes the order of audio in the file. Only the metadata timestamps and titles are rewritten.

Split into Chapters

Explode a single .m4b into individual audio files — one per chapter. Useful for transferring to devices that don't support m4b chapter navigation, or for archiving chapters separately.

  1. 1Click the Split tab, or use File → Split Audiobook.
  2. 2Drag your .m4b file onto the drop zone, or click Browse to select one.
  3. 3Choose an output folder. All chapter files will be written here.
  4. 4Click Split. Each chapter is extracted and named by its chapter title — e.g. 01 - Introduction.m4a, 02 - Part One.m4a, etc.
The split operation re-muxes the audio without re-encoding. It's fast and lossless.

Audio Preview Player

The built-in player lets you audition source files before committing to a full encode — check audio quality, verify ordering, and confirm chapter start points.

Opening the player

Click the waveform icon or the play button next to any file in the chapter list. The player opens at the bottom of the window.

Controls

Play / Pause: Click the play button or press Space.

Seek: Click anywhere on the progress bar, or drag the playhead to any position.

Volume: Drag the volume slider on the right side of the player bar.

Chapter navigation

Click any chapter row in the chapter list to load that source file in the player, positioned at the chapter's start time. This is the fastest way to confirm your files are in the right order and that chapter boundaries land where you expect.

Stamping a chapter start time

Scrub the player to the exact moment you want a chapter to begin, then select that chapter row in the table and click ⇥ Insert Time. The chapter's start time is updated to the current playback position instantly. Changes are undoable with ⌘Z and only affect the chapter metadata written into the output — your source files are never modified.

No re-encoding: The player streams directly from your source files. Playback is instant and nothing is modified.

Batch Queue

The Batch Queue processes multiple audiobooks in sequence. Set everything up, start the queue, and walk away.

Opening the queue

Click the Queue button in the main toolbar, or use Window → Show Queue. The queue panel opens independently alongside the main window.

Adding jobs

Drag one or more book folders into the queue window — each folder becomes one job. You can also add the current main window's setup as a job by clicking Add to Queue instead of Build Audiobook.

Configuring each job

Click any job row to expand its settings panel. You can set the title, author, cover, bitrate, and output path individually per job. Jobs sourced from well-tagged files will often be pre-filled automatically.

Running the queue

Click Start All. Jobs run one at a time, in order from top to bottom. Each job displays its current status:

  • Waiting — queued, not yet started
  • Running — currently encoding
  • Done — completed successfully
  • Error — something went wrong — click to expand the error log
Background processing: Close the queue window (or the entire app) and encoding continues. You'll receive a system notification when each job finishes.

Reordering and removing jobs

Drag job rows to change their execution order. Select a job and press Delete to remove it from the queue. Running jobs cannot be reordered, but waiting jobs can be rearranged at any time.

Multiple Windows

Each m4bmaker window is completely independent — its own source folder, metadata, and encoding job. You can run multiple encodes in parallel without them interfering with each other.

Open a new window with File → New Window (or ⌘N). Set it up however you like — different folder, different bitrate, different output location.

Shared queue: The Batch Queue is shared across all windows. Adding a job from any window puts it into the same queue.

CLI Guide

The command-line interface is scriptable, pipe-friendly, and needs no graphical interface at all. It comes with the free PyPI install on macOS, Windows, and Linux; it is not part of the purchased app bundle.

Installation

The CLI alone — no Qt, a much smaller install than the graphical app. You need Python 3.11 or newer and ffmpeg first; see Getting Started for how to install those on your platform.

# macOS and Linux
pip install m4bmaker

# Windows
py -m pip install m4bmaker

# check it worked
m4bmaker --help
Python version: Requires Python 3.11 or newer. Check with python3 --version (py --version on Windows). Install a current version from python.org, or on macOS with brew install python.

Updating

pip install --upgrade m4bmaker

Basic Syntax

m4bmaker [OPTIONS] [DIRECTORY]

DIRECTORY is the folder containing your audio files. If omitted, the current working directory is used.

Without --no-prompt, m4bmaker asks interactive questions for any missing metadata — title, author, narrator, etc. Supply all values as flags to run fully non-interactively, which is required for scripting.

# Simplest — answer prompts for metadata
m4bmaker ~/Books/Dune

# Fully non-interactive
m4bmaker ~/Books/Dune \
  --title "Dune" \
  --author "Frank Herbert" \
  --no-prompt

Options Reference

Option Short Default Description
DIRECTORY — cwd Folder of audio files to convert. Scanned recursively. Supports .mp3, .m4a, .aac, .flac, .wav, .ogg.
--output PATH -o auto Explicit full path for the output .m4b. Overrides --output-dir and --flat.
--output-dir DIR -O source folder Base directory for auto-generated output. Creates an Author/Title/ subfolder inside it unless --flat is set.
--flat — false Write the .m4b directly into the output directory without creating Author/Title subfolders.
--title TITLE -t from tags Book title. Overrides auto-extracted tags and skips the title prompt.
--author AUTHOR -a from tags Author name. Overrides auto-extracted tags and skips the author prompt.
--narrator NARRATOR -n from tags Narrator name. Stored in the .m4b metadata.
--genre GENRE -g from tags Genre tag embedded in the output file.
--cover IMAGE_OR_URL -c auto-detect Path or HTTP/HTTPS URL to a cover image (JPEG or PNG). Bypasses folder auto-detection.
--bitrate BITRATE -b 96k Audio bitrate passed to ffmpeg's -b:a. Spoken word is fine at 64k. Examples: 64k, 96k, 128k.
--stereo — false Encode in stereo (2 channels). Default is mono, which is standard for spoken-word audio and halves file size.
--chapters-file FILE — none Path to a plain-text chapter list that overrides auto-generated markers. See Chapters File Format.
--no-prompt — false Disable all interactive prompts. Missing required metadata causes an error exit. Required for batch scripting.

For a quick refresher anytime: m4bmaker --help or man m4bmaker.

Chapters File Format

A --chapters-file is a plain UTF-8 text file. Each non-blank line defines one chapter. Lines that begin with # are treated as comments and ignored.

Line format: TIMESTAMP  TITLE — one or more spaces between the timestamp and the title. Timestamps must be MM:SS or H:MM:SS. The first chapter should always start at 00:00.

# chapters.txt — one line per chapter
00:00 Introduction
12:34 Part One — The Desert Planet
45:20 Part Two — Muad'Dib
1:12:05 Epilogue
m4bmaker ~/Books/Dune \
  --chapters-file ~/Books/Dune/chapters.txt \
  --title "Dune" --author "Frank Herbert" --no-prompt
Chapters in the file are used exactly as-is, in order. Auto-detection from filenames is completely bypassed when this flag is present.

Common Recipes

Simple — convert a folder, answer prompts

m4bmaker ~/Books/Dune

Fully non-interactive

m4bmaker ~/Books/Dune \
  --title "Dune" \
  --author "Frank Herbert" \
  --narrator "Scott Brick" \
  --cover ~/Books/Dune/cover.jpg \
  --bitrate 128k \
  --stereo \
  --no-prompt

Cover image from a URL

m4bmaker ~/Books/Dune \
  --cover "https://covers.openlibrary.org/b/id/8231992-L.jpg" \
  --title "Dune" --author "Frank Herbert" --no-prompt

Custom chapter list from a file

m4bmaker ~/Books/Dune \
  --chapters-file ~/Books/Dune/chapters.txt \
  --title "Dune" --author "Frank Herbert" --no-prompt

Output to a specific file path

m4bmaker ~/Books/Dune \
  -o ~/Desktop/Dune.m4b \
  --title "Dune" --author "Frank Herbert" --no-prompt

Flat output — no Author/Title subfolders

m4bmaker ~/Books/Dune \
  --output-dir ~/Audiobooks \
  --flat \
  --title "Dune" --author "Frank Herbert" --no-prompt

Batch process an entire library

for book in ~/Books/*/; do
  m4bmaker "$book" \
    --output-dir ~/Audiobooks \
    --flat \
    --no-prompt
done
This works when your source files have good ID3 tags (title, author). If they don't, add --title and --author dynamically or set up a chapters file per book.

Batch with per-book log files

mkdir -p ~/logs

for book in ~/Books/*/; do
  title=$(basename "$book")
  echo "▶ $title"
  m4bmaker "$book" \
    --output-dir ~/Audiobooks --flat --no-prompt \
    2>&1 | tee ~/logs/"$title".log
done

Getting help

m4bmaker --help
man m4bmaker

Frequently Asked Questions

Common issues, answered directly. Click any question to expand it.

    +ffmpeg was not found — how do I install it?

    The purchased version bundles ffmpeg — no action needed on your part.

    On the free version, install it for your platform:

    brew install ffmpeg  — macOS (no Homebrew? get it from brew.sh first)
    winget install ffmpeg  — Windows
    sudo apt install ffmpeg  — Debian, Ubuntu
    sudo dnf install ffmpeg  — Fedora

    Afterwards, open a new terminal and run ffmpeg -version to confirm it is on your PATH.

    +What audio formats are supported as input?

    m4bmaker accepts: .mp3, .m4a, .aac, .flac, .wav, .ogg.

    You can freely mix formats in a single folder — everything is re-encoded to AAC in the output. Files with different sample rates or channel counts are normalised automatically (a preflight warning is shown if mismatches are detected).

    +Chapters aren't being detected, or they're in the wrong order.

    Each audio file becomes one chapter. Files are sorted first by their track number tag, then alphabetically by filename.

    If your files don't have track number tags, name them so they sort correctly — e.g. 01 - Introduction.mp3, 02 - Chapter One.mp3. A zero-padded numeric prefix works best.

    After loading a folder, always check the Chapters tab to verify the order before building. You can drag-reorder chapters there, or provide a custom --chapters-file on the CLI.

    +Cover art isn't showing in my audiobook player.

    The cover is embedded correctly in the .m4b file — this is almost always a player cache issue.

    Apple Books: Remove the book and re-add it. Right-click → Get Info to verify the art is present inside the file.

    Overcast / Pocketcasts: Log out and back in to force a metadata refresh.

    If art is still missing after that, check that your source image is a valid JPEG or PNG under about 4 MB in size.

    +The output file is too large. How do I make it smaller?

    Audiobook audio is very compressible. The most effective lever is bitrate:

    GUI: Set Bitrate to 64k in the encoding panel. For spoken word, 64k mono is perceptually identical to higher bitrates.

    CLI: m4bmaker ~/Books/Dune --bitrate 64k --no-prompt ...

    Also confirm that Stereo is off (the default). Mono at 64k produces files roughly one-fifth the size of a typical 128k stereo MP3 source, with no perceptible quality difference for speech.

    +The audio sounds choppy or there are clicks between chapters.

    This usually means the source files have inconsistent sample rates or channel counts. m4bmaker runs a preflight analysis before encoding and shows a warning if mismatches are detected — check that panel for details.

    The most common fix is ensuring all source files share the same sample rate (44100 Hz is standard). You can inspect a file with ffprobe yourfile.mp3.

    Clicks at chapter boundaries often come from files that don't start on a clean audio frame. The built-in repair step handles most of these cases automatically.

    +What's the difference between the direct download and the GitHub version?

    Direct download ($9.99): Fully self-contained — no Python, no Homebrew, no ffmpeg to install. Available for Mac and Windows. The CLI is not accessible from the app bundle — install the free PyPI package alongside it if you want to script.

    Free version (GPL-3.0): Installed with pip install m4bmaker on macOS, Windows, or Linux. Includes the CLI. You supply Python 3.11+ and ffmpeg. Update with pip install --upgrade m4bmaker.

    The core encoding pipeline, GUI features, and output quality are identical in both versions.

    +Finder says my audiobook is “Protected mpeg 4 audiobook” — is it DRM’d?

    No. The file is clean. This is a macOS labelling quirk, not a property of your audiobook.

    macOS ships a built-in file type called com.apple.protected-mpeg-4-audio that claims the .m4b extension. Unless something on the machine says otherwise, Finder inspects an .m4b and guesses that type — so it shows this label for M4B files made by any tool, not just this one.

    m4Bookmaker declares its own file type, so once the app is installed on a Mac, files show correctly as “M4B Audiobook” there. Send the file to someone who doesn’t have the app and their Finder will fall back to the same wrong guess. Nothing written inside the file can change that — it is how macOS resolves file types.

    Playback and importing into Apple Books are unaffected. If you want to confirm a file for yourself, a genuinely protected MP4 contains sinf, drms, frma and schm boxes; files from m4Bookmaker contain none of them, and carry the M4B brand rather than M4P.

    +Will it run on my older Mac?

    The app needs macOS 13 (Ventura) or later. Both Intel and Apple Silicon Macs are supported — the app ships as a universal binary — but the macOS version is a separate requirement from the processor.

    Check yours under the Apple menu → About This Mac. If it says macOS 12 (Monterey) or older, the app won’t launch. Many Macs from 2015 and earlier can’t be updated past Monterey, so this is a hardware limit rather than something an update will fix.

    On those machines the free command-line version still works. It does conversion, chapters, cover art, and metadata — everything except the graphical interface — and needs Python 3.11+ and ffmpeg.

    +Can I use m4Bookmaker on Linux?

    The GUI is available on Mac and Windows. Linux GUI support is coming soon.

    The CLI works today on any platform where Python and ffmpeg run — including Linux. Install via GitHub and use the m4bmaker command directly.

    +What does "non-destructive" mean in context of chapters?

    When you rechapter a .m4b in Edit Mode, m4bmaker only rewrites the chapter metadata stored in the file container. The actual audio stream — the encoded audio data — is never decoded, re-encoded, or altered in any way.

    This means rechaptering is fast (no encoding wait), produces no quality loss, and can be repeated as many times as you like with no degradation.

    +Are nested subfolders supported?

    Yes. m4bmaker scans the folder you choose recursively, so audio files at any subfolder depth are included. All found files are merged into a single list and sorted together.

    This is useful for books where each disc or part lives in its own subfolder — just point m4bmaker at the top-level book folder.

    +Encoding is slow — is something wrong?

    Encoding time scales with total audio duration and bitrate. A 10-hour audiobook at 96k mono typically encodes in 2–4 minutes on a modern Mac — this is normal.

    If it seems stuck: open Activity Monitor and look for an ffmpeg process. If one is running, encoding is progressing. You can close the m4bmaker window; the encode continues in the background and sends a notification when done.

    Reducing bitrate to 64k speeds things up a small amount. Using a lower-powered Mac or running many other CPU-heavy tasks will slow it down.

    +How do I report a bug or request a feature?

    Use the in-app report form: Help → Report a Bug… — or go directly to the bug report form.

    Please include your m4Bookmaker version (shown in the About dialog), your macOS or Windows version, and a clear description of what happened vs. what you expected. For encoding issues, the log output shown in the error detail panel is very helpful.

Privacy & Network Activity

m4Bookmaker is fully local — your audio files and metadata never leave your machine.

What the app sends

The GUI makes one outbound request on startup: a check to the GitHub Releases API to see whether a newer version is available. You can disable this at any time via Help → Check for Updates on Startup — the setting is saved and persists between sessions.

GET https://api.github.com/repos/sageframe-no-kaji/m4bmaker/releases/latest
User-Agent: m4bmaker/<version>

This sends your IP address and installed version number to GitHub's API. No other data is transmitted. The check runs silently in the background and fails silently if you are offline.

The CLI (m4bmaker command) makes no network calls at all.

What the app never does

  • Uploads audio files, metadata, or cover art
  • Tracks usage or analytics
  • Stores or transmits your file paths or book titles
  • Contacts any server other than the GitHub API on startup
  • Makes any network call if you disable Help → Check for Updates on Startup

Third-party services

Update checks go to api.github.com, subject to GitHub's privacy policy. No other third-party service is contacted.