ACX is the platform that distributes audiobooks to Audible, Amazon and Apple Books. It rejects a submission at quality review when a file breaks one of its published audio rules. The rejection email arrives days later and names the rule, not the file. Here is every file-level rule in one table, with what the free checker does for each.
| Rule | What ACX asks for | Publish Kit |
|---|---|---|
| Format | MP3 | Checked |
| Bitrate | 192 kbps or higher, constant bitrate (CBR) | Checked. Every frame is read, so a VBR file is caught even without a VBR header |
| Sample rate | 44.1 kHz | Checked |
| Channels | All files mono, or all files stereo, never mixed | Checked across the set |
| File length | One chapter or section per file, at most 120 minutes | Checked |
| Credits | Opening credits and closing credits, each in its own file | Flagged when no file name looks like credits |
| Retail sample | A separate 1–5 minute sample | Flagged when no file name contains "sample" |
| RMS loudness | Between −23 dB and −18 dB | Measured on 16-bit WAV masters |
| Peak | −3 dB or lower | Measured on 16-bit WAV masters |
| Noise floor | −60 dB RMS or lower | Estimated from the quietest half-second (your room tone) in WAV masters |
| Room tone | 0.5–1 s at the head and 1–5 s at the tail of each file | Not checked; listen for it |
| Cover art | Square, at least 2400 × 2400 px, JPEG, RGB | Checked by publish-kit cover cover.jpg --for audiobook |
ACX revises its requirements. These are as published when this page was written, so read ACX's own audio submission requirements before you submit.
Encoding changes peaks slightly, but RMS and noise floor come through MP3 encoding almost unchanged. A WAV master is plain samples, so it can be measured exactly in the browser without decoding. Fix levels on the master, then encode. To measure an MP3 directly, FFmpeg prints RMS and peak with:
ffmpeg -i chapter-01.mp3 -af astats=metadata=0 -f null -
ffmpeg -i chapter-01.wav -ar 44100 -ac 1 -codec:a libmp3lame -b:a 192k chapter-01.mp3
-b:a with libmp3lame gives constant bitrate. -q:a gives VBR, the most common reason a file fails the bitrate rule.
publish-kit audiobook check audio/*.mp3 # the file rules publish-kit audiobook check masters/*.wav # plus loudness publish-kit audiobook m4b --run # one chaptered .m4b for direct sale publish-kit audiobook feed # a private podcast-style feed of the chapters
Each command takes --json and exits 1 when a rule fails, so an AI agent or a CI job can loop until the set passes. See the CLI.