Basic conversion

This commit is contained in:
Christian Colglazier 2021-08-13 12:26:50 -04:00
parent 7c32571b75
commit 1c5303898d
2 changed files with 67 additions and 0 deletions

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
# Audio files
*.aax
*.m4b
# Config files
settings.conf

61
audible-converter.sh Normal file
View File

@ -0,0 +1,61 @@
#!/usr/bin/env bash
# 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 'Christian Colglazier' https://aax.api.j-kit.me/api/v2/activation/${1})
echo $(echo $json | jq '.activationBytes' | tr -d '"')
}
# 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 "$(basename ${1} | cut -f 1 -d '.').m4b"
}
function getChapterJSON() {
echo $(ffprobe -i ${1} -print_format json -show_chapters -loglevel error -sexagesimal)
}
function getMetadataJSON() {
echo $(ffprobe -show_format -print_format json ${1} | jq '.format.tags')
}
function getTitle() {
echo $(echo ${1} | jq '.title')
}
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)
json=$(getMetadataJSON $audibleFile)
removeDRM $audibleFile $activationBytes