Come posso usare ffmpeg per convertire i file udibili


13

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é viene riprodotto in iTunes. Ho anche l'immagine del file / la copertina incorporata,

Dai documenti di ffmpeg, leggo che i file Audible AAX sono file M4B crittografati e possono essere decifrati specificando un segreto di attivazione a 4 byte.

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


Risposte:


30

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 nome utente e la password Audible e attendi qualche istante che venga stampata la chiave di attivazione di otto caratteri.

Se non si esegue il sedcomando che modifica il valore della chromedriver_pathvariabile, si ./audible-activator.pyverifica un errore come 'chromedriver' executable needs to be in PATHse chromedriversi trovasse sul percorso o nella audible-activatordirectory. Se sei sedGNU sed, sostituiscilo sed -i ''con sed -i.

Dopodiché 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 marcus erronius da sostituire output.m4a;mv output.m4{a,b}con output.m4be da sostituire -vn -c:v copycon -c copy.)

Se si tenta di utilizzare il ffmpegcomando sopra con un aafile anziché un aaxfile, si verifica un errore simile Option activation_bytes not found. Per scaricare un libro da Audible come aaxinvece di aa, scegli "Migliorato" dal menu a discesa "Qualità audio" nella vista per scaricare un libro.

aaxi file sono crittografati mp4/ m4a/ m4bquindi il ffmpegcomando sopra non ricodifica l'audio e conserva metadati come i capitoli. mp4, m4ae m4bsono estensioni di file alternative per il formato contenitore MPEG-4 Parte 14. Le estensioni m4ae m4bsono state originariamente introdotte da Apple. Una differenza tra le estensioni m4ae m4bè che l'opzione per ricordare la posizione di riproduzione precedente in iTunes è abilitata per impostazione predefinita per i file con m4bestensione ma non per i file con m4aestensione. iTunes visualizza anche i file con m4bestensione sotto audiolibri per impostazione predefinita.

Le vecchie versioni di iTunes non avevano la casella di controllo per abilitare il ricordo della posizione di riproduzione precedente, ma ricordare che la posizione di riproduzione precedente era sempre abilitata per i file con m4bestensione, quindi anche Wikipedia afferma erroneamente che "un .m4afile audio non può" aggiungere un segnalibro "(ricordare il ultimo punto di ascolto), mentre i .m4bfile di estensione possono ". (Anche se non so se ci sono ancora altri lettori multimediali che si comportano come le vecchie versioni di iTunes in questo senso.)

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


Sto utilizzando .aaxi file e ottenere l'errore: Unrecognized option 'activation_bytes'.. Qualche idea? Audible ha cambiato formato nell'ultimo anno?
montagne russe

3
Qualche motivo per convertire in *.m4ae quindi rinominare come *.m4b? Perché non basta fare: ffmpeg -activation_bytes youractivationkey -i input.aax -vn -c:a copy output.m4b?
Li Wang,

1
@LiWang Si è verificato un errore con le versioni precedenti di ffmpeg, ma questo non sembra più essere il caso.
nisetama,

@ user4669748 Capisco. Grazie per la conferma!
Li Wang,

Ho dovuto usare questo comando per far funzionare Python, ma dopo questo è andato perfetto! ln -sf /usr/bin/python2.7 / usr / local / bin / python2
Sethmr

7

Questo ti renderà il tuo segreto di attivazione:

https://github.com/inAudible-NG/audible-activator


1
Ho usato questo script per fare la conversione effettiva. Vale anche la pena notare che è necessario installare seleniume requeststramite pipo easy_installe anche scaricare ed estrarre chromedriver nella audible-activatordirectory affinché funzioni. Queste informazioni sono fornite nel audible-activatorREADME, ma è utile conoscerlo in anticipo :)
intuito il

Grazie, @intuited; quella sceneggiatura è d'oro. Avevo bisogno di modifiche leggere per usare GNU grep ( ggrepinstallato con brew install grep) su macos, ma dopo ha fatto un ottimo lavoro.
ecmanaut,

6

Ho provato la risposta di user4669748, ho riscontrato alcune cose degne di nota e ho scoperto una soluzione che faceva funzionare le cose per me:

  1. audible-activator.py richiede Python 2.7; fallisce con Python 3.
  2. Dopo averlo avviato, la finestra di Chrome si apre sullo schermo e si inizia a vedere l'attività della GUI e un accesso riuscito ad Audible.
  3. Subito dopo l'accesso, l'attività del browser sembra bloccarsi, con Waiting for px.owneriq.netcostantemente visualizzato 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 si px.owneriq.nettratti di una sorta di annuncio o sito di monitoraggio, ho provato a "disabilitarlo temporaneamente" aggiungendolo /etc/hostscon un indirizzo IP non valido, ad es.

0.0.0.0 px.owneriq.net

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

Dopo questa aggiunta a /etc/hosts, rieseguire il programma. Ha funzionato fino al completamento in 30 secondi.

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

Ho quindi ripristinato il /etc/hostssuo contenuto originale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.