Giter Site home page Giter Site logo

mkabook's Introduction

What is this?

mkabook is a tool for managing a library of audio-books as .mka Matroska Audio files. This tool allows merging multiple files into one single audio-book, adding Chapter information, and adding a Cover image.

This is intended as a replacement for m4b-tools. I found that .m4b files are a pain to work with. They have limited codec options and the tooling around them is complicated. For example I found it incredibly difficult to create chapter titles with indentation using m4b-tools, this is useful for me because I have several audiobooks which are collections of shorter stories with their own sub-chapters. mkabook easily allows creating chapters with indentation, and can direclty use the .mkv sub-chapter format (if your player supports that data).

There are two modes of operation, single file and batch mode. Single file will operate on one input and output at a time. Batch mode allows processing mulitple input files at once, and includes the ability to skip items which have been processed in a previous invocation.

Features

  • Automatic detection of common input files from directories
  • Automatically merge multiple files into a single audio-book
  • Automatically convert chapters from QuickTime format to Matroksa XML Format
    • Handling for sub-chapters
  • Multiple codec formats
    • ACC (Including LibFDK_ACC in the docker image)
    • FLAC
    • MP3
    • Codec passthrough
  • Batch processing
    • Automatic "diff" mode doesn't convert files that already exist in the output directory
  • Storing per-input configurations on the filesystem for easier batch processing

TODO Features

  • Automatic application of Meta-data Tags from an easy format
  • Finished meta-data update functionality
  • Chapter extraction(?)
    • Auto generated chapters from merging files
  • File splitting(?)
  • Ability to update existing files with --diff when input audio files have been removed

Installation

For the best experience I recommend running the tool inside a docker container. This allows easier use of the libfdk_aac codec which in my experience produces better output than the standard ffmpeg aac codec.

To build the docker, make sure you have docker installed and run:

git clone https://github.com/robojeb/mkabook.git
cd mkabook
docker build . -t mkabook

Then either add the mkabook script from this repo to your path, or add the following alias to your shell:

alias mkabook='docker run -it --rm -u $(id -u):$(id -g) -v "$(pwd)":/mnt mkabook

NOTE: Because of the sandboxing provided by docker, all input and output files must exist below the directory you execute this command from.

I'd rather use the python file directly

That is fine you can invoke mkabook.py directly and add it to your path. I would recommend the following change:

DEFAULTS = {
    "input_files": None,
-   "codec": "libfdk_aac",
+   "codec": "aac",
    "bitrate": None,
    "cover_file": None,
    "chapter_file": None,
    "convert_text_chapters": True,
    "use_sub_chapters": False,
    "output_file": None,
}

Most operating systems don't ship an ffmpeg with libfdk_aac by default and you will get conversion errors if you keep this default. You could also always remember to provide the --codec option or configure a config.json file for all of your files, but that is prone to error.

Common Tasks

Keeping a library up-to-date with batch processing

For best results batch processing I recommend the following directory structure:

<audio-book folder>
├- input
|   ├- Some Book Title
|   |     └ <input files>
|   └- Other Book Title
|         └ <input files>
| 
└- output

Then while in the <audio-book folder> you can execute the following:

mkatool -o ./output --batch --diff ./input

The tool will automatically detect the input directories and process the files. This will result in the output Some Book Title.mka and Other Book Title.mka in the Output folder.

Subsequent invocations will skip producing those files again as long as they exist in the output directory because of the --diff option.

Making sure batch processing uses the right codec for each of my files

Its often useful to configure a codec to be used for each of your files. For example, if the input is already a nicely encoded acc file or a lossless flac you might prefer to just copy that directly into the output audio-book.

Because the --codec command applies to all inputs during batch processing mkabook allows creation of a config.json file to set local properties. This file can be placed in the input directory and will override defaults, but will be overriden by values provided on the command line. Valid entries are:

{
    "codec": "libfdk_acc", // Also valid ["acc", "flac", "mp3", "copy"]
    "chapter_file": "chapters.xml", // Specify the name of the chapter file
    "cover_file": "cover.jpg", // Specify the name of the cover image
}

mkabook's People

Contributors

robojeb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

worldgate

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.