From 9e1b33904a7752720eb6e81b3444f44967c5309c Mon Sep 17 00:00:00 2001 From: Nicko98 <39709875+Nicko98@users.noreply.github.com> Date: Tue, 9 Feb 2021 20:00:11 +0100 Subject: [PATCH 1/4] Added different loglevels I added different loglevels and (for loglevel 0 and 1) a progress bar for chapter splitting. 0 = show progress only, chapter splitting shown as progress bar 1 (default) = fewer information, chapter splitting shown as progress bar 2 = as it has been up until now 3 = debug mode --- AAXtoMP3 | 129 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 105 insertions(+), 24 deletions(-) diff --git a/AAXtoMP3 b/AAXtoMP3 index fa85260..f642ac0 100755 --- a/AAXtoMP3 +++ b/AAXtoMP3 @@ -5,7 +5,7 @@ # Command Line Options # Usage Synopsis. -usage=$'\nUsage: AAXtoMP3 [--flac] [--aac] [--opus ] [--single] [--level ]\n[--chaptered] [-e:mp3] [-e:m4a] [-e:m4b] [--authcode ] [--no-clobber]\n[--target_dir ] [--complete_dir ] [--validate]\n[--continue ]{FILES}\n' +usage=$'\nUsage: AAXtoMP3 [--flac] [--aac] [--opus ] [--single] [--level ]\n[--chaptered] [-e:mp3] [-e:m4a] [-e:m4b] [--authcode ] [--no-clobber]\n[--target_dir ] [--complete_dir ] [--validate]\n[--continue ]{FILES} [--loglevel ]\n' codec=libmp3lame # Default encoder. extension=mp3 # Default encoder extension. level=-1 # Compression level. Can be given for mp3, flac and opus. -1 = default/not specified. @@ -15,7 +15,7 @@ targetdir= # Optional output location. Note default is basedir 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 VALIDATE=0 # Validate the input aax file(s) only. No Transcoding of files will occur -DEBUG=0 # Default off, If set extremely verbose output. +loglevel=1 # Default off, If set extremely verbose output. noclobber=0 # Default off, clobber only if flag is enabled continue=0 # Default off, If set Transcoding is skipped and chapter splitting starts at chapter continueAt. continueAt=1 # Optional chapter to continue splitting the chapters. @@ -52,7 +52,9 @@ while true; do # Don't overwrite the target directory if it already exists -n | --no-clobber ) noclobber=1; shift ;; # Extremely verbose output. - -d | --debug ) DEBUG=1; shift ;; + -d | --debug ) loglevel=3; shift ;; + # Set loglevel. + -l | --loglevel ) loglevel="$2"; shift 2 ;; # Validate ONLY the aax file(s) No transcoding occurs -V | --validate ) VALIDATE=1; shift ;; # continue splitting chapters at chapter continueAt @@ -86,7 +88,7 @@ set -o errexit -o noclobber -o nounset -o pipefail # debug # debug "Some longish message" debug() { - if [ $DEBUG == 1 ] ; then + if [ $loglevel == 3 ] ; then echo "$(date "+%F %T%z") DEBUG ${1}" fi } @@ -95,7 +97,7 @@ debug() { # debug dump contents of a file to STDOUT # debug "" debug_file() { - if [ $DEBUG == 1 ] ; then + if [ $loglevel == 3 ] ; then echo "$(date "+%F %T%z") DEBUG" echo "=Start==========================================================================" cat "${1}" @@ -107,7 +109,7 @@ debug_file() { # debug dump a list of internal script variables to STDOUT # debug_vars "Some Message" var1 var2 var3 var4 var5 debug_vars() { - if [ $DEBUG == 1 ] ; then + if [ $loglevel == 3 ] ; then msg="$1"; shift ; # Grab the message args=("$@") # Grab the rest of the args @@ -136,10 +138,37 @@ debug_vars() { # ----- # log log() { - echo "$(date "+%F %T%z") ${1}" + if [ "$((${loglevel} > 1))" == "1" ] ; then + echo "$(date "+%F %T%z") ${1}" + else + echo "${1}" + fi } # ----- +#progressbar produces a progressbar in the style of +# process: |####### | XX% (part/total unit) +# which is gonna be overwritten by the next line. + +progressbar() { + #get input + part=${1} + total=${2} + + #compute percentage and make print_percentage the same length regardless of the number of digits. + percentage=$((part*100/total)) + if [ "$((percentage<10))" = "1" ]; then print_percentage=" $percentage" + elif [ "$((percentage<100))" = "1" ]; then print_percentage=" $percentage" + else print_percentage="$percentage"; fi + + #draw progressbar with one # for every 5% and blank spaces for the missing part. + progressbar="" + for (( n=0; n<(percentage/5); n++ )) ; do progressbar="$progressbar#"; done + for (( n=0; n<(20-(percentage/5)); n++ )) ; do progressbar="$progressbar "; done + + #print progressbar + echo -ne "Chapter splitting: |$progressbar| $print_percentage% ($part/$total chapters)\r" +} # Print out what we have already after command line processing. debug_vars "Command line options as set" codec extension mode container targetdir completedir auth_code @@ -266,6 +295,17 @@ if [[ "x${completedir}" != "x" ]]; then fi fi +# ----- +# Check whether the loglevel is valid +if [ "$((${loglevel} < 0 || ${loglevel} > 3 ))" = "1" ]; then + echo "ERROR loglevel has to be in the range from 0 to 3!" + echo " 0: Show progress only" + echo " 1: default" + echo " 2: a little more information, timestamps" + echo " 3: debug" + echo "$usage" + exit 1 +fi # ----- # If a compression level is given, check whether the given codec supports compression level specifiers and whether the level is valid. if [ "${level}" != "-1" ]; then @@ -441,16 +481,28 @@ do fi mkdir -p "${output_directory}" - # Fancy declaration of which book we are decoding. Including the AUTHCODE. - dashline="----------------------------------------------------" - log "$(printf '\n----Decoding---%s%s--%s--' "${title}" "${dashline:${#title}}" "${auth_code}")" - log "Source ${aax_file}" + if [ "$((${loglevel} > 0))" = "1" ]; then + # Fancy declaration of which book we are decoding. Including the AUTHCODE. + dashline="----------------------------------------------------" + log "$(printf '\n----Decoding---%s%s--%s--' "${title}" "${dashline:${#title}}" "${auth_code}")" + log "Source: ${aax_file}" + fi # 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 # 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 + # Display the total length of the audiobook in format hh:mm:ss + total_length="$(ffprobe -v error -activation_bytes "${auth_code}" -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 ${aax_file} | cut -d . -f 1)" + hours="$((total_length/3600))" + if [ "$((hours<10))" = "1" ]; then hours="0$hours"; fi + minutes="$((total_length/60-60*hours))" + if [ "$((minutes<10))" = "1" ]; then minutes="0$minutes"; fi + seconds="$((total_length-3600*hours-60*minutes))" + if [ "$((seconds<10))" = "1" ]; then seconds="0$seconds"; fi + log "Total length: $hours:$minutes:$seconds" + # If level != -1 specify a compression level in ffmpeg. compression_level_param="" if [ "${level}" != "-1" ]; then @@ -484,14 +536,17 @@ do -metadata publisher="${publisher}" \ -f ${container} \ "${output_file}" - - log "Created ${output_file}." + if [ "$((${loglevel} > 0))" == "1" ]; then + log "Created ${output_file}." + fi # ----- fi # Grab the cover art if available. cover_file="${output_directory}/cover.jpg" if [ "${continue}" == "0" ]; then - log "Extracting cover into ${cover_file}..." + if [ "$((${loglevel} > 1))" == "1" ]; then + log "Extracting cover into ${cover_file}..." + fi 0))" == "1" ]; then + log "Creating PlayList ${title}.m3u" + fi echo '#EXTM3U' > "${playlist_file}" fi # Determine the number of chapters. chaptercount=$($GREP -Pc "Chapter.*start.*end" $metadata_file) - log "Extracting ${chaptercount} chapter files from ${output_file}..." - if [ "${continue}" == "1" ]; then - log "Continuing at chapter ${continueAt}:" + if [ "$((${loglevel} > 0))" == "1" ]; then + log "Extracting ${chaptercount} chapter files from ${output_file}..." + if [ "${continue}" == "1" ]; then + log "Continuing at chapter ${continueAt}:" + fi fi chapternum=1 + #start progressbar for loglevel 0 and 1 + if [ "$((${loglevel} < 2))" == "1" ]; then + progressbar 0 ${chaptercount} + fi # We pipe the metadata_file in read. # Example of the section that we are interested in: # @@ -559,7 +622,9 @@ do if [ "$((${continueAt} > ${chapternum}))" = "0" ]; then # Extract chapter by time stamps start and finish of chapter. # This extracts based on time stamps start and end. - log "Splitting chapter ${chapternum}/${chaptercount} start:${chapter_start%?}(s) end:${chapter_end}(s)" + if [ "$((${loglevel} > 1))" == "1" ]; then + log "Splitting chapter ${chapternum}/${chaptercount} start:${chapter_start%?}(s) end:${chapter_end}(s)" + fi 1))" == "1" ]; then + log "Added cover art to ${chapter_title}" + fi fi fi @@ -599,14 +669,21 @@ do # Clean up of working directory stuff. rm "${output_file}" - log "Done creating chapters for ${output_directory}." + if [ "$((${loglevel} > 1))" == "1" ]; then + log "Done creating chapters for ${output_directory}." + else + #ending progress bar + echo "" + fi else # Perform file tasks on output file. # ---- # Add the cover art to m4a and m4b file types. if [[ ${container} == "mp4" && $(type -P mp4art) ]]; then mp4art -q --add "${cover_file}" "${output_file}" - log "Added cover art to ${title}.${extension}" + if [ "$((${loglevel} > 1))" == "1" ]; then + log "Added cover art to ${title}.${extension}" + fi fi 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" @@ -616,14 +693,18 @@ do # ----- # Announce that we have completed the transcode - log "Complete ${title}" + if [ "$((${loglevel} > 0))" == "1" ]; then + log "Complete ${title}" + fi # Lastly get rid of any extra stuff. rm "${metadata_file}" # Move the aax file if the decode is completed and the --complete_dir is set to a valid location. # Check the target dir for if set if it is writable if [[ "x${completedir}" != "x" ]]; then - log "Moving Transcoded ${aax_file} to ${completedir}" + if [ "$((${loglevel} > 0))" == "1" ]; then + log "Moving Transcoded ${aax_file} to ${completedir}" + fi mv "${aax_file}" "${completedir}" fi From 7bef1bd5696d2b75b34af978c87745bbc3c53df2 Mon Sep 17 00:00:00 2001 From: Nicko98 <39709875+Nicko98@users.noreply.github.com> Date: Tue, 9 Feb 2021 20:05:43 +0100 Subject: [PATCH 2/4] Readme updated for loglevels --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ab3dd87..3bf9655 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,7 @@ bash AAXtoMP3 [-f|--flac] [-o|--opus] [-a|-aac] [-s|--single] [--level Date: Tue, 9 Feb 2021 20:19:53 +0100 Subject: [PATCH 3/4] Added different loglevels I added different loglevels and (for loglevel 0 and 1) a progress bar for chapter splitting. 0 = show progress only, chapter splitting shown as progress bar 1 (default) = fewer information, chapter splitting shown as progress bar 2 = as it has been up until now 3 = debug mode --- AAXtoMP3 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AAXtoMP3 b/AAXtoMP3 index f642ac0..378088b 100755 --- a/AAXtoMP3 +++ b/AAXtoMP3 @@ -15,7 +15,7 @@ targetdir= # Optional output location. Note default is basedir 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 VALIDATE=0 # Validate the input aax file(s) only. No Transcoding of files will occur -loglevel=1 # Default off, If set extremely verbose output. +loglevel=1 # Loglevel: 0: Show progress only"; 1: default"; 2: a little more information, timestamps"; 3: debug" noclobber=0 # Default off, clobber only if flag is enabled continue=0 # Default off, If set Transcoding is skipped and chapter splitting starts at chapter continueAt. continueAt=1 # Optional chapter to continue splitting the chapters. From 6646b84e72bb45f4fac4fd8089c2be79c8f8d1d7 Mon Sep 17 00:00:00 2001 From: Nicko98 <39709875+Nicko98@users.noreply.github.com> Date: Tue, 9 Feb 2021 20:21:55 +0100 Subject: [PATCH 4/4] Added different loglevels I added different loglevels and (for loglevel 0 and 1) a progress bar for chapter splitting. 0 = show progress only, chapter splitting shown as progress bar 1 (default) = fewer information, chapter splitting shown as progress bar 2 = as it has been up until now 3 = debug mode --- AAXtoMP3 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AAXtoMP3 b/AAXtoMP3 index 378088b..4bc09bc 100755 --- a/AAXtoMP3 +++ b/AAXtoMP3 @@ -15,7 +15,7 @@ targetdir= # Optional output location. Note default is basedir 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 VALIDATE=0 # Validate the input aax file(s) only. No Transcoding of files will occur -loglevel=1 # Loglevel: 0: Show progress only"; 1: default"; 2: a little more information, timestamps"; 3: debug" +loglevel=1 # Loglevel: 0: Show progress only; 1: default; 2: a little more information, timestamps; 3: debug noclobber=0 # Default off, clobber only if flag is enabled continue=0 # Default off, If set Transcoding is skipped and chapter splitting starts at chapter continueAt. continueAt=1 # Optional chapter to continue splitting the chapters.