From 3edb1b2fc8bac038ee4b540bb08b5e219e565274 Mon Sep 17 00:00:00 2001 From: Yozen Hernandez Date: Thu, 23 May 2019 20:22:22 -0400 Subject: [PATCH] Create chaptered single-file m4a's/m4b's - Changes "container" for m4a and m4b to "mp4" as that is the official container type. - Changes "extension" checks for m4b to "container" checks which check for "mp4". This makes it possible to produce chaptered m4a files as well. - Needs awk, but I think portable awk code is used. This should probably be tested on other platforms, like macOS. - Adds a check for mp4chaps, but that should be included in the same package as mp4art. - Only adds chapter data to mp4 files if using single-file output mode. --- AAXtoMP3 | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/AAXtoMP3 b/AAXtoMP3 index 1159685..c304bdb 100755 --- a/AAXtoMP3 +++ b/AAXtoMP3 @@ -36,9 +36,9 @@ while true; do # This is the same as --single option. -e:mp3 ) codec=libmp3lame; extension=mp3; mode=single; container=mp3; shift ;; # Identical to --acc option. - -e:m4a ) codec=copy; extension=m4a; mode=single; container=m4a; shift ;; + -e:m4a ) codec=copy; extension=m4a; mode=single; container=mp4; shift ;; # Similiar to --aac but specific to audio books - -e:m4b ) codec=copy; extension=m4a; mode=single; container=m4b; shift ;; + -e:m4b ) codec=copy; extension=m4b; mode=single; container=mp4; shift ;; # Change the working dir from AAX directory to what you choose. -t | --target_dir ) targetdir="$2"; shift 2 ;; # Move the AAX file to a new directory when decoding is complete. @@ -183,7 +183,7 @@ fi # ----- # Detect if we need mp4art for cover additions to m4a & m4b files. -if [[ "x${extension}" == "xm4a" && "x$(type -P mp4art)" == "x" ]]; then +if [[ "x${container}" == "xmp4" && "x$(type -P mp4art)" == "x" ]]; then echo "WARN mp4art was not found on your env PATH variable" echo "Without it, this script will not be able to add cover art to" echo "m4b files. Note if there are no other errors the AAXtoMP3 will" @@ -193,6 +193,18 @@ if [[ "x${extension}" == "xm4a" && "x$(type -P mp4art)" == "x" ]]; then echo "Ubuntu: sudo apt-get install mp4v2-utils" fi +# ----- +# Detect if we need mp4chaps for adding chapters to m4a & m4b files. +if [[ "x${container}" == "xmp4" && "x$(type -P mp4chaps)" == "x" ]]; then + echo "WARN mp4chaps was not found on your env PATH variable" + echo "Without it, this script will not be able to add chapters to" + echo "m4a/b files. Note if there are no other errors the AAXtoMP3 will" + echo "continue. However no chapter data will be added to the output." + echo "INSTALL:" + echo "MacOS: brew install mp4v2" + echo "Ubuntu: sudo apt-get install mp4v2-utils" +fi + # ----- # Obtain the authcode from either the command line, local directory or home directory. # See Readme.md for details on how to aquire your personal authcode for your personal @@ -429,17 +441,11 @@ do # ---- # Add the cover art to m4a and m4b file types. - if [[ ${extension} == "m4a" && $(type -P mp4art) ]]; then + if [[ ${container} == "mp4" && $(type -P mp4art) ]]; then mp4art -q --add "${cover_file}" "${chapter_file}" log "Added cover art to ${chapter_title}" fi - # ---- - # Detect if we are actuall m4b instead of m4a Then rename the file. - if [[ ${extension} == "m4a" && ${container}="m4b" ]]; then - mv "${chapter_file}" "${chapter_file/.m4a/.m4b}" - fi - fi done 9< "$metadata_file" @@ -450,14 +456,13 @@ do # Perform file tasks on output file. # ---- # Add the cover art to m4a and m4b file types. - if [[ ${extension} == "m4a" && $(type -P mp4art) ]]; then + if [[ ${container} == "mp4" && $(type -P mp4art) ]]; then mp4art -q --add "${cover_file}" "${output_file}" log "Added cover art to ${title}.${extension}" fi - # ---- - # Detect if we are actuall m4b instead of m4a Then rename the file. - if [[ ${extension} == "m4a" && ${container}="m4b" ]]; then - mv "${output_file}" "${output_file/.m4a/.m4b}" + 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" + mp4chaps -i "${output_file}" fi fi