Come utilizzare ffmpeg per convertire i file udibili

10

Sto eseguendo ffmpeg v2.8.1 da Homebrew e sto provando a convertire i file Audible ma c'è qualche trucco che mi manca.

Questo comando produce questo output di errore.

ffmpeg -activation_bytes 1CEB00DA -i Volume1.aax -vn -c:a copy output.mp4

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fc9a4010600] [aax] file checksum == d72f1f04e3c73d0bc68e742db1bc69b58dc3a500
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fc9a4010600] [aax] mismatch in checksums!
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fc9a4010600] error reading header
Volume1.aax: Invalid data found when processing input

So che il file è ok, perché su iTunes. Anche l'immagine / copertina del file è incorporata in essa,

Dai documenti ffmpeg, ho letto I file Audible AAX sono file M4B crittografati e possono essere decifrati specificando un segreto di attivazione da 4 byte.

Suppongo, probabilmente erroneamente, che quello dato sia ok. Altrimenti, come si trova quel segreto.

    
posta Harry McGovern 10.01.2016 - 13:29
fonte

3 risposte

24

Per prima cosa esegui questi comandi:

brew install chromedriver ffmpeg
sudo easy_install pip
pip install selenium requests
git clone https://github.com/inAudible-NG/audible-activator
cd audible-activator
sed -i '' 's,chromedriver_path = "./chromedriver",chromedriver_path = "/usr/local/bin/chromedriver",' audible-activator.py
./audible-activator.py

Quindi inserisci il tuo nome utente e la password Audible e attendi qualche istante che venga stampata la chiave di attivazione a otto caratteri.

Se non esegui il comando sed che modifica il valore della variabile chromedriver_path , ./audible-activator.py genera un errore come 'chromedriver' executable needs to be in PATH anche se chromedriver è sul percorso o in audible-activator directory. Se sed è GNU sed , sostituisci sed -i '' con sed -i .

Dopo esegui un comando come questo:

ffmpeg -activation_bytes youractivationkey -i input.aax -c copy output.m4b

(Ho modificato il comando sopra in base ai commenti di LiWang e di marcus erronius per sostituire output.m4a;mv output.m4{a,b} con output.m4b e per sostituire -vn -c:v copy con -c copy .)

Se provi a utilizzare il comando ffmpeg sopra con un file aa invece di un file aax , si verifica un errore come Option activation_bytes not found . Per scaricare un libro da Audible come aax anziché aa , scegli "Avanzata" dal menu a discesa "Qualità audio" nella vista per scaricare un libro.

I file

aax sono criptati mp4 / m4a / m4b file, quindi il comando ffmpeg sopra non codifica nuovamente l'audio e conserva i metadati come i capitoli. mp4 , m4a e m4b sono estensioni di nome file alternative per il formato contenitore MPEG-4 Part 14. Le estensioni m4a e m4b sono state originariamente introdotte da Apple. Una differenza tra le estensioni m4a e m4b è che l'opzione per ricordare la precedente posizione di riproduzione in iTunes è abilitata per impostazione predefinita per i file con un'estensione m4b ma non per i file con un'estensione m4a . Per impostazione predefinita, iTunes visualizza anche i file con un'estensione m4b negli audiolibri.

Le versioni precedenti di iTunes non avevano la casella per abilitare la memorizzazione della precedente posizione di riproduzione, ma ricordando che la precedente posizione di riproduzione era sempre abilitata per i file con un'estensione m4b , quindi anche Wikipedia indica erroneamente che "un .m4a il file audio non può "segnalibro" (ricorda l'ultimo punto di ascolto), mentre i file di estensione .m4b possono ". (Anche se non so se ci sono ancora altri lettori multimediali che si comportano come vecchie versioni di iTunes in questo senso.)

L'UTI per l'estensione m4b è com.apple.protected-mpeg-4-audio e Finder mostra il tipo di tutti i file m4b come "audio MPEG-4 protetto" anche se tutti i file con estensione m4b non dispongono di protezione da copia.

    
risposta data 23.06.2016 - 20:10
fonte
7

Questo ti darà il segreto di attivazione:

link

    
risposta data 13.01.2016 - 06:36
fonte
6

Ho provato la risposta di user4669748 e ho trovato alcune cose che valeva la pena di notare, e ho scoperto una correzione che ha funzionato per me:

  1. audible-activator.py richiede Python 2.7; fallisce con Python 3.
  2. Dopo averlo avviato, viene visualizzata la finestra di Chrome sullo schermo e si inizia a vedere l'attività della GUI e un accesso riuscito a Audible.
  3. Subito dopo l'accesso, l'attività del browser sembra bloccarsi, con Waiting for px.owneriq.net costantemente visualizzata nella barra di stato in basso.
  4. Dopo 5 minuti, ho avuto un TimeoutException:

    [*] Player ID is 2jmj7l5rSw0yVb/vlWAYkK/YBwk=
    Traceback (most recent call last):
      File "./audible-activator.py", line 151, in <module>
        fetch_activation_bytes(username, password, options)
      File "./audible-activator.py", line 74, in fetch_activation_bytes
        search_box.submit()
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 88, in submit
        self._execute(Command.SUBMIT_ELEMENT)
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 494, in _execute
        return self._parent.execute(command, params)
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 236, in execute
        self.error_handler.check_response(response)
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 192, in check_response
        raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.TimeoutException: Message: timeout: cannot determine loading status
    from timeout: Timed out receiving message from renderer: -0.222
      (Session info: chrome=54.0.2840.98)
      (Driver info: chromedriver=2.25.426935 (820a95b0b81d33e42712f9198c215f703412e1a1),platform=Mac OS X 10.12.0 x86_64)
    

A questo punto ero bloccato. Tuttavia, pensando che px.owneriq.net sia una sorta di annuncio o sito di tracciamento, ho provato a "disattivarlo temporaneamente" aggiungendo a /etc/hosts con un indirizzo IP non valido, ad es.

0.0.0.0 px.owneriq.net

(Questa era una tattica suggerita da un amico per bloccare gli annunci nel browser.)

Dopo questa aggiunta a /etc/hosts , riesegui il programma. È scaduto il completamento in 30 secondi.

Una chiave di attivazione di 4 byte è stata stampata sullo schermo e ha funzionato perfettamente con ffmpeg come descritto nella risposta di user4669748.

Ho quindi ripristinato /etc/hosts nel suo contenuto originale.

    
risposta data 04.12.2016 - 03:09
fonte

Leggi altre domande sui tag