83 lines
1.9 KiB
Bash
Executable File
83 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
cleanString() {
|
|
tr -d '"'
|
|
}
|
|
|
|
# getHash returns the hash of a given file.
|
|
function getHash() {
|
|
echo $(xxd -p -l20 -s 653 ${1})
|
|
}
|
|
|
|
# getActivationBytes returns the bytes needed to decrypt a given hash.
|
|
function getActivationBytes() {
|
|
json=$(curl -A 'audible-converter' https://aax.api.j-kit.me/api/v2/activation/${1})
|
|
echo $(echo $json | jq '.activationBytes' | cleanString)
|
|
}
|
|
|
|
# createConfig creates a config file.
|
|
function createConfig() {
|
|
hash=$(getHash ${2})
|
|
bytes=$(getActivationBytes $hash)
|
|
echo "activationBytes=${bytes}" >> ${1}
|
|
}
|
|
|
|
# checkAudibleFile checks if a given file is valid and if not exits the program.
|
|
function checkAudibleFile() {
|
|
if [ ! -f ${1} ]; then
|
|
echo "${1}" not found
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function removeDRM() {
|
|
ffmpeg -activation_bytes ${2} -i ${1} -c copy "${3}.m4b"
|
|
}
|
|
|
|
function getChapterJSON() {
|
|
echo $(ffprobe -i ${1} -print_format json -show_chapters -loglevel error -sexagesimal | jq '.chapters')
|
|
}
|
|
|
|
function getMetadataJSON() {
|
|
echo $(ffprobe -show_format -print_format json ${1} | jq '.format.tags')
|
|
}
|
|
|
|
function getTitle() {
|
|
echo $(echo ${1} | jq '.title' | cleanString)
|
|
}
|
|
|
|
function fileSafe() {
|
|
sed -e 's/[^A-Za-z0-9._-]/-/g' | tr '[:upper:]' '[:lower:]' | sed -e 's/--/-/g'
|
|
}
|
|
|
|
settingsFile='./settings.conf'
|
|
|
|
audibleFile=${1}
|
|
checkAudibleFile $audibleFile
|
|
|
|
# Check for config file
|
|
if [ ! -f $settingsFile ]; then
|
|
echo 'No config file'
|
|
createConfig $settingsFile $audibleFile
|
|
fi
|
|
|
|
# Load settings
|
|
. $settingsFile
|
|
|
|
metadataJSON=$(getMetadataJSON $audibleFile)
|
|
chapterJSON=$(getChapterJSON $audibleFile)
|
|
name=$(getTitle "${metadataJSON}" | fileSafe)
|
|
|
|
if [ ! -f "${name}.m4b" ]; then
|
|
removeDRM $audibleFile $activationBytes $name
|
|
fi
|
|
|
|
mkdir -p $name
|
|
|
|
data=$(echo "${chapterJSON}" | jq '.[] | "\(.start),\(.end),\(.tags.title)"')
|
|
echo $data
|
|
IFS=' ' read -r -a array <<< "$data"
|
|
|
|
|
|
echo $(echo "${chapterJSON}" | jq '.[] | .start,.end,.tags.title')
|