Open fortiko opened 1 year ago
Until this can be fixed, I will be using (latest) ffmpeg to decrypt, via
ffmpeg -audible_key key_from_voucher_file -audible_iv iv_from_voucher_file -i input.aaxc -c copy output.m4b
Howdy!
This is a strange bug indeed. The only size limitation I'm aware of in the code is line 19 of src/snowcrypt/snowcrypt.py
, but that's a 4GB limit, which you're inside of.
What books do you have that get so big? And what did you use to download them? The largest I have in my library is only 2GB at around 70hr long (and it decrypts just fine).
Does FFMPEG correctly decrypt these large files?
They were downloaded just the same way as the other ones I was able to decrypt successfully with snowcrypt, via https://github.com/mkb79/audible-cli
The books are in the range you mention, 50-70 hours, (Sherlock Holmes Complete Collection for instance). ffmpeg had no problem. I did find some reports though on 44kHz AAXC giving trouble, and all of the ones that we are looking at are not only large (but <4GB), they are also 44kHz. ¯_(ツ)_/¯
I have trouble converting several files that are >2GB:
For a bit of debugging, I added these 2 statements:
These are the details for 3 example files:
Result for file 1 (3.140.467.300 bytes, resulting broken m4a size: 2.918.641.456 bytes)
LENGTH1: 108 LENGTH2: 100 LENGTH1: 92 LENGTH2: 84 LENGTH1: 36 LENGTH2: 28 LENGTH1: 20 LENGTH2: 12 LENGTH1: 44 LENGTH2: 36 LENGTH1: 58 LENGTH2: 50 LENGTH1: 16 LENGTH2: 8 LENGTH1: 36 LENGTH2: 28 LENGTH1: 24 LENGTH2: 16 LENGTH1: 15304 LENGTH2: 15296 LENGTH1: 33589244 LENGTH2: 33589236 LENGTH1: 1528052 LENGTH2: 1528044 LENGTH1: 92 LENGTH2: 84 LENGTH1: 36 LENGTH2: 28 LENGTH1: 32 LENGTH2: 24 LENGTH1: 57 LENGTH2: 49 LENGTH1: 76 LENGTH2: 68 LENGTH1: 36 LENGTH2: 28 LENGTH1: 59 LENGTH2: 51 LENGTH1: 720 LENGTH2: 712 LENGTH1: 28 LENGTH2: 20 LENGTH1: 372 LENGTH2: 364 LENGTH1: 368 LENGTH2: 360 LENGTH1: 33 LENGTH2: 25 LENGTH1: 6256 LENGTH2: 6248 LENGTH1: 33 LENGTH2: 25 LENGTH1: 54199 LENGTH2: 54191 LENGTH1: 1372268555 LENGTH2: 1372268547 LENGTH1: 1511176915 LENGTH2: 1511176907 LENGTH1: -1937235809 LENGTH2: -1937235817 Traceback (most recent call last): File "/opt/homebrew/bin/snowcrypt", line 8, in
sys.exit(main())
File "/opt/homebrew/lib/python3.10/site-packages/snowcrypt/main.py", line 43, in main
decrypt_aaxc(
File "/opt/homebrew/lib/python3.10/site-packages/snowcrypt/snowcrypt.py", line 205, in decrypt_aaxc
_decrypt(src, dest, key, iv)
File "/opt/homebrew/lib/python3.10/site-packages/snowcrypt/snowcrypt.py", line 189, in _decrypt
_atomizer(inStream, outStream, path.getsize(inStream.name), key, iv)
File "/opt/homebrew/lib/python3.10/site-packages/snowcrypt/snowcrypt.py", line 176, in _atomizer
func(
File "/opt/homebrew/lib/python3.10/site-packages/snowcrypt/snowcrypt.py", line 93, in _just_copy_it
outStream.write(inStream.read(length))
ValueError: read length must be non-negative or -1
Result for file 2 (3.009.120.131 bytes, resulting broken m4a size: 1.031.548.124 bytes):
LENGTH1: 108 LENGTH2: 100 LENGTH1: 92 LENGTH2: 84 LENGTH1: 36 LENGTH2: 28 LENGTH1: 20 LENGTH2: 12 LENGTH1: 44 LENGTH2: 36 LENGTH1: 58 LENGTH2: 50 LENGTH1: 16 LENGTH2: 8 LENGTH1: 36 LENGTH2: 28 LENGTH1: 24 LENGTH2: 16 LENGTH1: 5296 LENGTH2: 5288 LENGTH1: 32184532 LENGTH2: 32184524 LENGTH1: 1463376 LENGTH2: 1463368 LENGTH1: 92 LENGTH2: 84 LENGTH1: 36 LENGTH2: 28 LENGTH1: 32 LENGTH2: 24 LENGTH1: 57 LENGTH2: 49 LENGTH1: 76 LENGTH2: 68 LENGTH1: 36 LENGTH2: 28 LENGTH1: 59 LENGTH2: 51 LENGTH1: 2184 LENGTH2: 2176 LENGTH1: 28 LENGTH2: 20 LENGTH1: 1104 LENGTH2: 1096 LENGTH1: 1100 LENGTH2: 1092 LENGTH1: 33 LENGTH2: 25 LENGTH1: 16896 LENGTH2: 16888 LENGTH1: 33 LENGTH2: 25 LENGTH1: 32884 LENGTH2: 32876 LENGTH1: 997839281 LENGTH2: 997839273 LENGTH1: -1698701940 LENGTH2: -1698701948 Traceback (most recent call last): File "/opt/homebrew/bin/snowcrypt", line 8, in
sys.exit(main())
File "/opt/homebrew/lib/python3.10/site-packages/snowcrypt/main.py", line 43, in main
decrypt_aaxc(
File "/opt/homebrew/lib/python3.10/site-packages/snowcrypt/snowcrypt.py", line 205, in decrypt_aaxc
_decrypt(src, dest, key, iv)
File "/opt/homebrew/lib/python3.10/site-packages/snowcrypt/snowcrypt.py", line 189, in _decrypt
_atomizer(inStream, outStream, path.getsize(inStream.name), key, iv)
File "/opt/homebrew/lib/python3.10/site-packages/snowcrypt/snowcrypt.py", line 176, in _atomizer
func(
File "/opt/homebrew/lib/python3.10/site-packages/snowcrypt/snowcrypt.py", line 93, in _just_copy_it
outStream.write(inStream.read(length))
ValueError: read length must be non-negative or -1
Result for file 3 (3.928.237.809 bytes, resulting broken m4a size: 43.980.806 bytes): LENGTH1: 108 LENGTH2: 100 LENGTH1: 92 LENGTH2: 84 LENGTH1: 36 LENGTH2: 28 LENGTH1: 20 LENGTH2: 12 LENGTH1: 44 LENGTH2: 36 LENGTH1: 58 LENGTH2: 50 LENGTH1: 16 LENGTH2: 8 LENGTH1: 36 LENGTH2: 28 LENGTH1: 24 LENGTH2: 16 LENGTH1: 2848 LENGTH2: 2840 LENGTH1: 42015516 LENGTH2: 42015508 LENGTH1: 1910060 LENGTH2: 1910052 LENGTH1: 92 LENGTH2: 84 LENGTH1: 36 LENGTH2: 28 LENGTH1: 32 LENGTH2: 24 LENGTH1: 57 LENGTH2: 49 LENGTH1: 76 LENGTH2: 68 LENGTH1: 36 LENGTH2: 28 LENGTH1: 59 LENGTH2: 51 LENGTH1: 976 LENGTH2: 968 LENGTH1: 28 LENGTH2: 20 LENGTH1: 500 LENGTH2: 492 LENGTH1: 496 LENGTH2: 488 LENGTH1: 33 LENGTH2: 25 LENGTH1: 8192 LENGTH2: 8184 LENGTH1: 33 LENGTH2: 25 LENGTH1: 40747 LENGTH2: 40739 LENGTH1: -987100931 LENGTH2: -987100939 Traceback (most recent call last): File "/opt/homebrew/bin/snowcrypt", line 8, in
sys.exit(main())
File "/opt/homebrew/lib/python3.10/site-packages/snowcrypt/main.py", line 43, in main
decrypt_aaxc(
File "/opt/homebrew/lib/python3.10/site-packages/snowcrypt/snowcrypt.py", line 205, in decrypt_aaxc
_decrypt(src, dest, key, iv)
File "/opt/homebrew/lib/python3.10/site-packages/snowcrypt/snowcrypt.py", line 189, in _decrypt
_atomizer(inStream, outStream, path.getsize(inStream.name), key, iv)
File "/opt/homebrew/lib/python3.10/site-packages/snowcrypt/snowcrypt.py", line 176, in _atomizer
func(
File "/opt/homebrew/lib/python3.10/site-packages/snowcrypt/snowcrypt.py", line 93, in _just_copy_it
outStream.write(inStream.read(length))
ValueError: read length must be non-negative or -1