first commit

This commit is contained in:
fabh2o 2021-02-06 22:27:52 +01:00
parent 440c6302fb
commit bcaec020ce

View File

@ -12,6 +12,9 @@ level=-1 # Compression level. Can be given for mp3, flac and
mode=chaptered # Multi file output mode=chaptered # Multi file output
auth_code= # Required to be set via file or option. auth_code= # Required to be set via file or option.
targetdir= # Optional output location. Note default is basedir of AAX file. targetdir= # Optional output location. Note default is basedir of AAX file.
dirNameScheme= # Custom directory naming scheme, default is $genre/$author/$title
fileNameScheme= # Custom file naming scheme, default is $title
chapterNameScheme= # Custom chapter naming scheme, default is '$title-$(printf %0${#chaptercount}d $chapternum) $chapter' (BookTitle-01 Chapter 1)
completedir= # Optional location to move aax files once the decoding is complete. completedir= # Optional location to move aax files once the decoding is complete.
container=mp3 # Just in case we need to change the container. Used for M4A to M4B container=mp3 # Just in case we need to change the container. Used for M4A to M4B
VALIDATE=0 # Validate the input aax file(s) only. No Transcoding of files will occur VALIDATE=0 # Validate the input aax file(s) only. No Transcoding of files will occur
@ -45,6 +48,12 @@ while true; do
-e:m4b ) codec=copy; extension=m4b; mode=single; container=mp4; shift ;; -e:m4b ) codec=copy; extension=m4b; mode=single; container=mp4; shift ;;
# Change the working dir from AAX directory to what you choose. # Change the working dir from AAX directory to what you choose.
-t | --target_dir ) targetdir="$2"; shift 2 ;; -t | --target_dir ) targetdir="$2"; shift 2 ;;
# Use a custom directory naming scheme, with variables.
-D | --dir-naming-scheme ) dirNameScheme="$2"; shift 2 ;;
# Use a custom file naming scheme, with variables.
-F | --file-naming-scheme ) fileNameScheme="$2"; shift 2 ;;
# Use a custom chapter naming schemr, with variables.
--chapter-naming-scheme ) chapterNameScheme="$2"; shift 2 ;;
# Move the AAX file to a new directory when decoding is complete. # Move the AAX file to a new directory when decoding is complete.
-C | --complete_dir ) completedir="$2"; shift 2 ;; -C | --complete_dir ) completedir="$2"; shift 2 ;;
# Authorization code associate with the AAX file(s) # Authorization code associate with the AAX file(s)
@ -413,17 +422,12 @@ do
artist=$(get_metadata_value artist) artist=$(get_metadata_value artist)
title=$(get_metadata_value title | $SED 's/'\:'/'-'/g' | $SED 's/- /-/g' | xargs -0) title=$(get_metadata_value title | $SED 's/'\:'/'-'/g' | $SED 's/- /-/g' | xargs -0)
title=${title:0:100} title=${title:0:100}
if [ "x${targetdir}" != "x" ] ; then
output_directory="${targetdir}/${genre}/${artist}/${title}"
else
output_directory="$(dirname "${aax_file}")/${genre}/${artist}/${title}"
fi
output_file="${output_directory}/${title}.${extension}"
bitrate="$(get_bitrate)k" bitrate="$(get_bitrate)k"
album_artist="$(get_metadata_value album_artist)" album_artist="$(get_metadata_value album_artist)"
album="$(get_metadata_value album)" album="$(get_metadata_value album)"
album_date="$(get_metadata_value date)" album_date="$(get_metadata_value date)"
copyright="$(get_metadata_value copyright)" copyright="$(get_metadata_value copyright)"
# Get more tags with mediainfo # Get more tags with mediainfo
if [[ $(type -P mediainfo) ]]; then if [[ $(type -P mediainfo) ]]; then
narrator="$(get_metadata_value nrt)" narrator="$(get_metadata_value nrt)"
@ -435,6 +439,33 @@ do
publisher="" publisher=""
fi fi
# dirNameScheme=
# fileNameScheme=
# chapterNameScheme=
# Define the output_directory
if [ "x${dirNameScheme}" != "x" ]; then
dirNameScheme="$(eval echo "${dirNameScheme}")"
else
# The Default
dirNameScheme="${genre}/${artist}/${title}"
fi
# If we defined a target directory, use it. Otherwise use the location of the AAX file
if [ "x${targetdir}" != "x" ] ; then
output_directory="${targetdir}/${dirNameScheme}/"
else
output_directory="$(dirname "${aax_file}")/${dirNameScheme}/"
fi
# Define the output_file
if [ "x${fileNameScheme}" != "x" ]; then
fileNameScheme="$(eval echo "${fileNameScheme}")"
else
# The Default
fileNameScheme="${title}"
fi
output_file="${output_directory}/${fileNameScheme}.${extension}"
if [[ "${noclobber}" = "1" ]] && [[ -d "${output_directory}" ]]; then if [[ "${noclobber}" = "1" ]] && [[ -d "${output_directory}" ]]; then
log "Noclobber enabled but directory '${output_directory}' exists. Exiting to avoid overwriting" log "Noclobber enabled but directory '${output_directory}' exists. Exiting to avoid overwriting"
exit 0 exit 0
@ -449,7 +480,7 @@ do
# Big long DEBUG output. Fully describes the settings used for transcoding. # Big long DEBUG output. Fully describes the settings used for transcoding.
# Note this is a long debug command. It's not critical to operation. It's purely for people debugging # Note this is a long debug command. It's not critical to operation. It's purely for people debugging
# and coders wanting to extend the script. # and coders wanting to extend the script.
debug_vars "Book and Variable values" title auth_code mode aax_file container codec bitrate artist album_artist album album_date genre copyright narrator description publisher output_file metadata_file working_directory debug_vars "Book and Variable values" title auth_code mode aax_file container codec bitrate artist album_artist album album_date genre copyright narrator description publisher dirNameScheme output_directory fileNameScheme output_file metadata_file working_directory
# If level != -1 specify a compression level in ffmpeg. # If level != -1 specify a compression level in ffmpeg.
compression_level_param="" compression_level_param=""
@ -501,9 +532,9 @@ do
# for more detail # for more detail
if [ "${mode}" == "chaptered" ]; then if [ "${mode}" == "chaptered" ]; then
# Playlist m3u support # Playlist m3u support
playlist_file="${output_directory}/${title}.m3u" playlist_file="${output_directory}/${fileNameScheme}.m3u"
if [ "${continue}" == "0" ]; then if [ "${continue}" == "0" ]; then
log "Creating PlayList ${title}.m3u" log "Creating PlayList ${fileNameScheme}.m3u"
echo '#EXTM3U' > "${playlist_file}" echo '#EXTM3U' > "${playlist_file}"
fi fi
@ -539,7 +570,13 @@ do
# The formatting of the chapters names and the file names. # The formatting of the chapters names and the file names.
# Chapter names are used in a few place. # Chapter names are used in a few place.
chapter_title="${title}-$(printf %0${#chaptercount}d $chapternum) ${chapter}" # Define the chapter_file
if [ "x${chapterNameScheme}" != "x" ]; then
chapter_title="$(eval echo "${chapterNameScheme}")"
else
# The Default
chapter_title="${title}-$(printf %0${#chaptercount}d $chapternum) ${chapter}"
fi
chapter_file="${output_directory}/${chapter_title}.${extension}" chapter_file="${output_directory}/${chapter_title}.${extension}"
# the ID3 tags must only be specified for *.mp3 files, # the ID3 tags must only be specified for *.mp3 files,
@ -551,7 +588,7 @@ do
fi fi
# Big Long chapter debug # Big Long chapter debug
debug_vars "Chapter Variables:" cover_file chapter_start chapter_end id3_version_param chapternum chapter_title chapter_file debug_vars "Chapter Variables:" cover_file chapter_start chapter_end id3_version_param chapternum chapterNameScheme chapter_title chapter_file
if [ "$((${continueAt} > ${chapternum}))" = "0" ]; then if [ "$((${continueAt} > ${chapternum}))" = "0" ]; then
# Extract chapter by time stamps start and finish of chapter. # Extract chapter by time stamps start and finish of chapter.
# This extracts based on time stamps start and end. # This extracts based on time stamps start and end.
@ -583,14 +620,6 @@ do
echo "${chapter_title}.${extension}" >> "${playlist_file}" echo "${chapter_title}.${extension}" >> "${playlist_file}"
fi fi
chapternum=$((chapternum + 1 )) chapternum=$((chapternum + 1 ))
# ----
# Add the cover art to m4a and m4b file types.
if [[ ${container} == "mp4" && $(type -P mp4art) ]]; then
mp4art -q --add "${cover_file}" "${chapter_file}"
log "Added cover art to ${chapter_title}"
fi
fi fi
done 9< "$metadata_file" done 9< "$metadata_file"
@ -600,13 +629,9 @@ do
else else
# Perform file tasks on output file. # Perform file tasks on output file.
# ---- # ----
# Add the cover art to m4a and m4b file types. # ffmpeg seems to copy only chapter position, not chapter names.
if [[ ${container} == "mp4" && $(type -P mp4art) ]]; then
mp4art -q --add "${cover_file}" "${output_file}"
log "Added cover art to ${title}.${extension}"
fi
if [[ ${container} == "mp4" && $(type -P mp4chaps) ]]; then if [[ ${container} == "mp4" && $(type -P mp4chaps) ]]; then
ffprobe -i "${aax_file}" -print_format csv -show_chapters 2>/dev/null | awk -F "," '{printf "CHAPTER%02d=%02d:%02d:%02.3f\nCHAPTER%02dNAME=%s\n", NR, $5/60/60, $5/60%60, $5%60, NR, $8}' > "${output_directory}/${title}.chapters.txt" ffprobe -i "${aax_file}" -print_format csv -show_chapters 2>/dev/null | awk -F "," '{printf "CHAPTER%02d=%02d:%02d:%02.3f\nCHAPTER%02dNAME=%s\n", NR, $5/60/60, $5/60%60, $5%60, NR, $8}' > "${output_directory}/${fileNameScheme}.chapters.txt"
mp4chaps -i "${output_file}" mp4chaps -i "${output_file}"
fi fi
fi fi