No description
Find a file
2026-08-01 19:01:16 +00:00
AudioBookJoiner.Wpf Add embedded chapter import for single-file audiobooks 2026-08-01 19:01:16 +00:00
.editorconfig Add Visual Studio solution 2026-07-15 08:38:14 -07:00
.gitignore Upload Local Files 2026-07-15 08:50:20 -07:00
AudioBookJoiner.Wpf.sln Add Visual Studio solution 2026-07-15 08:38:14 -07:00
LICENSE Initial commit 2026-07-15 15:32:58 +00:00
README.md Add embedded chapter import for single-file audiobooks 2026-08-01 19:01:16 +00:00

AudioBookJoiner

Runtime dependency: FFmpeg

AudioBookJoiner calls ffmpeg and ffprobe for metadata, cover extraction, duration probing, and file joining.

The project references the NuGet package FFMpegInstaller.Windows.x64. During restore/build, NuGet downloads the Windows x64 FFmpeg runtime and copies it into the build output under a relative folder:

bin\<Configuration>\net8.0-windows\ffmpeg\bin\ffmpeg.exe
bin\<Configuration>\net8.0-windows\ffmpeg\bin\ffprobe.exe

The app looks for ffmpeg.exe and ffprobe.exe in this order:

  1. The directory set in AUDIOBOOKJOIN_FFMPEG_DIR.
  2. Next to AudioBookJoiner.Wpf.exe.
  3. ffmpeg\bin next to AudioBookJoiner.Wpf.exe — the NuGet-provided relative runtime path.
  4. tools\ffmpeg\bin under the app/project directory for manual app-local overrides.
  5. Any directory on PATH.

After pulling the repo, rebuild or run:

dotnet restore .\AudioBookJoiner.Wpf.sln
dotnet build .\AudioBookJoiner.Wpf.sln -c Debug

Verify the relative runtime files:

Test-Path .\AudioBookJoiner.Wpf\bin\Debug\net8.0-windows\ffmpeg\bin\ffmpeg.exe
Test-Path .\AudioBookJoiner.Wpf\bin\Debug\net8.0-windows\ffmpeg\bin\ffprobe.exe

Expected:

True
True

Manual/global FFmpeg installs are still supported, but they are no longer required for normal Visual Studio debug builds.

Embedded/internal chapter import

AudioBookJoiner can inspect a selected single audiobook file for embedded chapters before export.

Use:

  1. Add one .mp3, .m4a, or .m4b file.
  2. Select it in the file list.
  3. Click Read Internal Chapters.
  4. Review the imported chapter table and log diagnostics.
  5. Click Start to export using those imported chapter markers.

Chapter detection tries:

  • ffprobe -show_chapters for MP3/M4A/M4B containers.
  • A raw MP3 ID3v2 CHAP / CTOC frame scan when ffprobe does not expose usable MP3 chapters.

If no usable embedded chapters are found, the app keeps the original behavior: each input file becomes one output chapter.