initial commit
This commit is contained in:
commit
b8f3397afe
2 changed files with 155 additions and 0 deletions
82
.gitignore
vendored
Normal file
82
.gitignore
vendored
Normal file
|
@ -0,0 +1,82 @@
|
|||
out/
|
||||
src/
|
||||
|
||||
*~
|
||||
|
||||
# temporary files which can be created if a process still has a handle open of a deleted file
|
||||
.fuse_hidden*
|
||||
|
||||
# Metadata left by Dolphin file manager, which comes with KDE Plasma
|
||||
.directory
|
||||
|
||||
# Linux trash folder which might appear on any partition or disk
|
||||
.Trash-*
|
||||
|
||||
# .nfs files are created when an open file is removed but is still being accessed
|
||||
.nfs*
|
||||
|
||||
# Log files created by default by the nohup command
|
||||
nohup.out
|
||||
|
||||
# General
|
||||
.DS_Store
|
||||
__MACOSX/
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
Icon[
|
||||
]
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
# Windows thumbnail cache files
|
||||
Thumbs.db
|
||||
Thumbs.db:encryptable
|
||||
ehthumbs.db
|
||||
ehthumbs_vista.db
|
||||
|
||||
# Dump file
|
||||
*.stackdump
|
||||
|
||||
# Folder config file
|
||||
[Dd]esktop.ini
|
||||
|
||||
# Recycle Bin used on file shares
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# Windows Installer files
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# Windows shortcuts
|
||||
*.lnk
|
||||
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
!.vscode/*.code-snippets
|
||||
!*.code-workspace
|
||||
|
||||
# Built Visual Studio Code Extensions
|
||||
*.vsix
|
73
to-m4b.sh
Normal file
73
to-m4b.sh
Normal file
|
@ -0,0 +1,73 @@
|
|||
#!/usr/bin/env bash
|
||||
set -x
|
||||
set -eufo pipefail
|
||||
|
||||
# CONSTANTS
|
||||
declare -r m4b-tool="nix run github:sandreas/m4b-tool#m4b-tool-libfdk -- "
|
||||
declare -r script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
# VARS
|
||||
LEADING_ZEROES=2
|
||||
SRC="${SRC:${script_dir}/src}"
|
||||
OUT="${OUT:${script_dir}/out}"
|
||||
AUTHOR="${AUTHOR:-}"
|
||||
NARRATOR="${NARRATOR:-}"
|
||||
TITLE="${TITLE:-}"
|
||||
YEAR="${YEAR:-}"
|
||||
SERIES="${SERIES:-}"
|
||||
SERIES_INDEX="${SERIES_INDEX:-}"
|
||||
|
||||
# FUNCTIONS
|
||||
parse-vars() {
|
||||
# TODO implement parsing the directory structure to fill in missing vars and return them
|
||||
# Series structure: ${SRC}/<author>/<series>/Book <part> - <year> - <book> {<narrator>}/
|
||||
# Standalone structure: ${SRC}/<author>/<year> - <book> {<narrator>}/
|
||||
# Return the <part> wihh leading zeros based on the LEADING_ZEROES variable
|
||||
}
|
||||
|
||||
get-book-directories() {
|
||||
# TODO implemet getting the book directoris based on the ${SRC} path
|
||||
# find the directories that contains the books files and return them as an array
|
||||
# Example book directory:
|
||||
# /path/to/src/Author/Series/Book Part - Year - Book {Narrator}/
|
||||
# /path/to/src/Author/Year - Book {Narrator}/
|
||||
}
|
||||
|
||||
m4b-merge() {
|
||||
local output_file="${1}"
|
||||
local source_dir="${2}"
|
||||
local author="${3}"
|
||||
local narrator="${4}"
|
||||
local title="${5}"
|
||||
local year="${6}"
|
||||
local series="${7}"
|
||||
local series_index=${8}
|
||||
|
||||
mkdir -p "$(dirname "${output_file}")"
|
||||
"${m4b-tool}" \
|
||||
merge \
|
||||
-v \
|
||||
--jobs=6 \
|
||||
--audio-samplerate=44100 \
|
||||
--audio-quality=100 \
|
||||
--writer="${author}" \
|
||||
--artist="${narrator}" \
|
||||
--title="${title}" \
|
||||
--year="${year}" \
|
||||
--album="${series}" \
|
||||
--album-sort="${series_index}" \
|
||||
--output-file="${output_file}/" \
|
||||
-- "${source_dir}"
|
||||
}
|
||||
|
||||
main() {
|
||||
parse-vars
|
||||
local book_dirs
|
||||
IFS=$'\n' read -r -d '' -a book_dirs < <(get-book-directories && printf '\0')
|
||||
for book_dir in "${book_dirs[@]}"; do
|
||||
local book_output_file="${OUT}/${AUTHOR}/${(SERIES:+${SERIES}/)}${(SERIES:+Book ${SERIES_INDEX} - )}${YEAR} - ${TITLE}.m4b"
|
||||
m4b-merge "${LEADING_ZEROES}" "${book_output_file}" "${book_dir}" "${AUTHOR}" "${NARRATOR}" "${TITLE}" "${YEAR}" "${SERIES}" "${SERIES_INDEX}"
|
||||
done
|
||||
}
|
||||
|
||||
main "$@"
|
Loading…
Add table
Add a link
Reference in a new issue