diff --git a/AAXtoMP3 b/AAXtoMP3 index 0f04bc0..e5840fd 100755 --- a/AAXtoMP3 +++ b/AAXtoMP3 @@ -610,7 +610,7 @@ do # Display the total length of the audiobook in format hh:mm:ss # 10#$var force base-10 interpretation. By default it's base-8, so values like 08 or 09 are not octal numbers - 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)" + 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*10#$hours))" @@ -681,11 +681,10 @@ do 3))" = "1" ]; then + split_input="-ss ${chapter_start%?} -to ${chapter_end}" + else + split_output="-ss ${chapter_start%?} -to ${chapter_end}" + fi + # Big Long chapter debug debug_vars "Chapter Variables:" cover_file chapter_start chapter_end chapternum chapter chapterNameScheme chapter_title chapter_file if [ "$((${continueAt} > ${chapternum}))" = "0" ]; then @@ -765,11 +775,11 @@ do fi /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" + 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}/${currentFileNameScheme}.chapters.txt" mp4chaps -i "${output_file}" fi fi diff --git a/README.md b/README.md index bf8e933..e6ffbd9 100644 --- a/README.md +++ b/README.md @@ -32,10 +32,14 @@ Thanks to kbabioch, this script has also been packaged in the [AUR](https://aur. ``` bash AAXtoMP3 [-f|--flac] [-o|--opus] [-a|-aac] [-s|--single] [--level ] [-c|--chaptered] [-e:mp3] [-e:m4a] [-e:m4b] [-A|--authcode ] [-n|--no-clobber] [-t|--target_dir ] [-C|--complete_dir ] [-V|--validate] [-d|--debug] [-h|--help] [--continue ] ... ``` +or if you want to get guided through the options +``` +bash interactiveAAXtoMP3 [-a|--advanced] [-h|--help] +``` * **<AAX INPUT_FILES>**... are considered input file(s), useful for batching! -## Options +## Options for AAXtoMP3 * **-f** or **--flac** Flac Encoding and as default produces a single file. * **-o** or **--opus** Ogg/Opus Encoding defaults to multiple file output by chapter. The extension is .ogg * **-a** or **--aac** AAC Encoding and produce a m4a single files output. @@ -59,6 +63,12 @@ bash AAXtoMP3 [-f|--flac] [-o|--opus] [-a|-aac] [-s|--single] [--level &1 | $GREP -q GNU && echo "sed" || echo "gsed") +if ! [[ $(type -P "$SED") ]]; then + echo "$SED (GNU sed) is not in your PATH" + echo "Without it, this script will break." + echo "On macOS, you may want to try: brew install gnu-sed" + exit 1 +fi + +# ===Get options from last time=================================================================================================================== + +# ===Set default values=== +lastcodec="mp3" +lastcompression="4" +lastchapters="yes" +lastauthcode="" +lastloglevel="1" + +# ===Get Values from last time=== +if [ -f ".interactivesave" ]; then + for ((i=1;i<=$(wc -l .interactivesave | cut -d " " -f 1);i++)) do + line=$(head -$i .interactivesave | tail -1) + case $(echo $line | cut -d " " -f 1 | $SED 's/.$//') in + codec ) lastcodec="$(echo $line | cut -d " " -f 2)";; + compression ) lastcompression="$(echo $line | cut -d " " -f 2)";; + chapters ) lastchapters="$(echo $line | cut -d " " -f 2)";; + authcode ) lastauthcode="$(echo $line | cut -d " " -f 2)";; + loglevel ) lastloglevel="$(echo $line | cut -d " " -f 2)";; + * ) rm .interactivesave; exit 1;; + esac + done +fi + +# ===Get options for AAXtoMP3===================================================================================================================== + +# ===Codec=== +while true; do + clear; + read -e -p "codec (mp3/m4a/m4b/flac/aac/opus): " -i "$lastcodec" codec + case "$codec" in + mp3 ) summary="$summary""codec: $codec"; call="$call -e:mp3"; break;; + m4a ) summary="$summary""codec: $codec"; call="$call -e:m4a"; break;; + m4b ) summary="$summary""codec: $codec"; call="$call -e:m4b"; break;; + flac ) summary="$summary""codec: $codec"; call="$call --flac"; break;; + aac ) summary="$summary""codec: $codec"; call="$call --aac"; break;; + opus ) summary="$summary""codec: $codec"; call="$call --opus"; break;; + esac +done + +# ===Compression=== +while true; do + clear; echo -e "$summary" + case "$codec" in + mp3 ) maxlevel=9;; + flac ) maxlevel=12;; + opus ) maxlevel=10;; + * ) break;; + esac + read -e -p "compression level (0-$maxlevel): " -i "$lastcompression" compression + if [[ $compression =~ ^[0-9]+$ ]] && [[ "$compression" -ge "0" ]] && [[ "$compression" -le "$maxlevel" ]]; then + summary="$summary""\ncompression level: $compression" + call="$call --level $compression" + break + fi +done + +# ===Chapters=== +while true; do + clear; echo -e "$summary" + read -e -p "chapters (yes/no/chapternumber to continue with): " -i "$lastchapters" chapters + case "$chapters" in + ^[0-9]+$ ) summary="$summary""\nchapters: $chapters"; call="$call -c --continue ${chapters}"; break;; + yes ) summary="$summary""\nchapters: $chapters"; call="$call -c"; break;; + no ) summary="$summary""\nchapters: $chapters"; call="$call -s"; break;; + esac +done + +# ===Authcode=== +if ! [ -r .authcode ] || [ -r ~/.authcode ]; then + clear; echo -e "$summary" + read -e -p "Authcode: " -i "$lastauthcode" authcode + summary="$summary""\nauthcode: $authcode" + call="$call -A $authcode" +fi + +# ===Loglevel=== +while true; do + clear; echo -e "$summary" + read -e -p "loglevel (0/1/2/3): " -i "$lastloglevel" loglevel + if [[ $loglevel =~ ^[0-9]+$ ]] && [[ "$loglevel" -ge "0" ]] && [[ "$loglevel" -le "3" ]]; then + summary="$summary""\nloglevel: $loglevel" + call="$call -l $loglevel" + break + fi +done + +# ===File=== +clear; echo -e "$summary" +read -p "aax-file: " file +file="${file%\'}" #remove suffix ' if file is given via drag'n'drop +file="${file#\'}" #remove prefix ' if file is given via drag'n'drop +savefile="$summary" +summary="$summary""\naax-file: $file" +call="$call $(echo $file | $SED "s;~;$HOME;")" + +# ===Summerize chosen options and call AAXtoMP3=================================================================================================== + +# ===Summary=== +clear; echo -e "$summary\n" +echo -e "$call\n" + +# ===Save chosen options=== +echo -e $savefile | $SED "s;\ level:;:;" > .interactivesave + +# ===Call AAXtoMP3=== +$call