audiobookshelf/artifacts/2026-02-14/m4b_conversion.md
2026-02-14 21:17:52 +02:00

37 lines
1.7 KiB
Markdown

# M4B Conversion Specification
## Overview
Audiobookshelf provides a tool to merge audiobook audio tracks into a single M4B file. This specification documents the improvements made to this tool to support "Stream Copy" (no re-encode), preserving audio quality and significantly reducing processing time.
## Feature Goals
- Support merging multiple audio files (MP3, M4A, AAC) into a single M4B container.
- **Avoid re-encoding** when the source audio is already compatible (e.g., AAC in M4A/MP4 container) or when the user explicitly chooses "Copy".
- Preserving all metadata including:
- Title, Artist, Album, etc.
- Chapters (from library item metadata).
- Cover art.
## Technical Details
### Backend Implementation
The logic resides in `server/utils/ffmpegHelpers.js` and `server/managers/AbMergeManager.js`.
#### FFmpeg Strategy for "Copy"
When `codec: 'copy'` is requested:
1. **Concatenation**: If multiple files exist, they are concatenated using the `concat` demuxer in FFmpeg.
- Command: `ffmpeg -f concat -safe 0 -i files.txt -c copy -f mp4 output.m4b`
2. **Metadata and Cover Embedding**: The concatenated file is then processed to add the `ffmetadata` and cover art.
- Command: `ffmpeg -i input.m4b -i metadata.txt -i cover.jpg -map 0:a -map 1 -map 2:v -c copy -disposition:v:0 attached_pic -f mp4 output_final.m4b`
### Frontend Implementation
The user interface is accessible via the **Manage** page of a book, under the **M4B Encoder** tool.
#### Options
- **Codec**: Options include `AAC`, `OPUS`, and `Copy`.
- **Bitrate**: Custom or presets (ignored for `Copy`).
- **Channels**: Custom or presets (ignored for `Copy`).
## Current Status
- [x] Initial specification.
- [x] Backend implementation for stream copy.
- [x] Verification.