validate_extra_files final touchs, mediainfo get only useful infos,

save chapter infos from audible-cli json, publisher tag,
cover crop, real track title
This commit is contained in:
fabh2o 2021-02-05 10:22:12 +01:00
parent 5f390b4f59
commit 047d7eb6f3

View File

@ -324,7 +324,7 @@ validate_aax() {
} }
validate_extra_files() { validate_extra_files() {
local extra_media_file # extra_title extra_chapter_file local extra_media_file extra_find_command
extra_media_file="$1" extra_media_file="$1"
# Bash trick to delete, non greedy, from the end up until the first '-' # Bash trick to delete, non greedy, from the end up until the first '-'
extra_title="${extra_media_file%-*}" extra_title="${extra_media_file%-*}"
@ -334,24 +334,25 @@ validate_extra_files() {
# AAX file: BookTitle-LC_128_44100_stereo.aax # AAX file: BookTitle-LC_128_44100_stereo.aax
# Cover file: BookTitle_(1215).jpg # Cover file: BookTitle_(1215).jpg
# Chapter file: BookTitle-chapters.json # Chapter file: BookTitle-chapters.json
# Chapter
extra_chapter_file="${extra_title}-chapters.json" extra_chapter_file="${extra_title}-chapters.json"
# Cover
extra_dirname="$(dirname "${extra_media_file}")"
extra_find_command='find "${extra_dirname}" -maxdepth 1 -regex ".*/${extra_title}_([0-9]+)\.jpg"'
# We want the output of the find command, we will turn errexit on later
set +e errexit
extra_cover_file="$(eval ${extra_find_command})"
set -e errexit
debug_vars "Audible-cli variables" extra_media_file extra_title extra_chapter_file extra_cover_file extra_find_command extra_dirname
# Test for chapter file existence # Test for chapter file existence
if [[ ! -r "${extra_chapter_file}" ]] ; then if [[ ! -r "${extra_chapter_file}" ]] ; then
log "ERROR File NOT Found: ${extra_chapter_file}" log "ERROR File NOT Found: ${extra_chapter_file}"
return 1 return 1
fi fi
extra_find_command='find -maxdepth 1 -regex ".*/${extra_title}_([0-9]+)\.jpg"'
# extra_cover_file="$(find -maxdepth 1 -regex \".*/${extra_title}_\(\[\0\-\9\]\+\)\\.jpg\")"
# We want the output of the find command, we will turn errexit on later
set +e errexit
extra_cover_file="$(eval ${extra_find_command})"
set -e errexit
debug_vars "Audible-cli files" extra_media_file extra_title extra_chapter_file extra_cover_file
if [[ "x${extra_cover_file}" == "x" ]] ; then if [[ "x${extra_cover_file}" == "x" ]] ; then
log "ERROR Cover File NOT Found" log "ERROR Cover File NOT Found"
return 1 return 1
@ -367,8 +368,29 @@ save_metadata() {
media_file="$1" media_file="$1"
ffprobe -i "$media_file" 2> "$metadata_file" ffprobe -i "$media_file" 2> "$metadata_file"
if [[ $(type -P mediainfo) ]]; then if [[ $(type -P mediainfo) ]]; then
echo "Mediainfo data START" >> "$metadata_file"
# Mediainfo output is structured like ffprobe, so we append it to the metadata file and then parse it with get_metadata_value() # Mediainfo output is structured like ffprobe, so we append it to the metadata file and then parse it with get_metadata_value()
mediainfo "$media_file" >> "$metadata_file" # mediainfo "$media_file" >> "$metadata_file"
# Or we only get the data we are intrested in:
# Description
echo "Track_More :" "$(mediainfo --Inform="General;%Track_More%" "$media_file")" >> "$metadata_file"
# Narrator
echo "nrt :" "$(mediainfo --Inform="General;%nrt%" "$media_file")" >> "$metadata_file"
# Publisher
echo "pub :" "$(mediainfo --Inform="General;%pub%" "$media_file")" >> "$metadata_file"
echo "Mediainfo data END" >> "$metadata_file"
fi
if [[ "${audibleCli}" == "1" ]]; then
# If we use data we got with audible-cli, we delete conflicting chapter infos
$SED -i '/^ Chapter #/d' "${metadata_file}"
# Some magic: we parse the .json generated by audible-cli.
# to get the output structure like the one generated by ffprobe,
# we use some characters (#) as placeholder, add some new lines,
# put a ',' after the start value, we calculate the end of each chapter
# as start+length, and we convert (divide) the time stamps from ms to s.
# Then we delete all ':' since they make a filename invalid.
jq -r '.content_metadata.chapter_info.chapters[] | "Chapter # start: \(.start_offset_ms/1000), end: \((.start_offset_ms+.length_ms)/1000) \n#\n# Title: \(.title)\n\n"' "${extra_chapter_file}" \
| tr -d ':' >> "$metadata_file"
fi fi
debug "Metadata file $metadata_file" debug "Metadata file $metadata_file"
debug_file "$metadata_file" debug_file "$metadata_file"
@ -434,6 +456,7 @@ do
if [[ $(type -P mediainfo) ]]; then if [[ $(type -P mediainfo) ]]; then
narrator="$(get_metadata_value nrt)" narrator="$(get_metadata_value nrt)"
description="$(get_metadata_value Track_More)" description="$(get_metadata_value Track_More)"
publisher="$(get_metadata_value pub)"
else else
narrator="" narrator=""
description="" description=""
@ -453,7 +476,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 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 output_file metadata_file working_directory
# ----- # -----
if [ "${continue}" == "0" ]; then if [ "${continue}" == "0" ]; then
@ -478,6 +501,7 @@ do
-metadata copyright="${copyright}" \ -metadata copyright="${copyright}" \
-metadata description="${description}" \ -metadata description="${description}" \
-metadata composer="${narrator}" \ -metadata composer="${narrator}" \
-metadata publisher="${publisher}" \
-f ${container} \ -f ${container} \
"${output_file}" "${output_file}"
@ -495,6 +519,8 @@ do
# We now set a variable, ${extra_crop_cover}, which contains an additional # We now set a variable, ${extra_crop_cover}, which contains an additional
# ffmpeg flag. It crops the cover so the width and the height is divisible by two. # ffmpeg flag. It crops the cover so the width and the height is divisible by two.
# Since the standard (in the aax file) image resolution is 512, we set the flag
# only if we use a custom cover art.
extra_crop_cover='-vf crop=trunc(iw/2)*2:trunc(ih/2)*2' extra_crop_cover='-vf crop=trunc(iw/2)*2:trunc(ih/2)*2'
else else
log "Extracting cover into ${cover_file}..." log "Extracting cover into ${cover_file}..."
@ -558,7 +584,7 @@ do
fi fi
# Big Long chapter debug # Big Long chapter debug
debug_vars "Chapter Variables:" cover_file extra_crop_cover 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 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.
@ -576,9 +602,9 @@ do
-metadata:s:v title="Album cover" \ -metadata:s:v title="Album cover" \
-metadata:s:v comment="Cover (Front)" \ -metadata:s:v comment="Cover (Front)" \
-metadata track="${chapternum}" \ -metadata track="${chapternum}" \
-metadata title="${chapter_title}" \ -metadata title="${chapter}" \
-metadata:s:a title="${chapter_title}" \ -metadata:s:a title="${chapter}" \
-metadata:s:a track="${chapternum}" \ -metadata:s:a track="${chapternum}/${chaptercount}" \
-map_chapters -1 \ -map_chapters -1 \
-f ${container} \ -f ${container} \
"${chapter_file}" "${chapter_file}"