Comment utiliser ffmpeg pour convertir des fichiers audibles


13

J'utilise ffmpeg v2.8.1 de Homebrew et j'essaie de convertir des fichiers Audible , mais il me manque une astuce.

Cette commande produit cette sortie d'erreur.

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

Je sais que le fichier est correct, car il est lu sur iTunes. J'ai également l'image / la pochette du fichier intégrée,

Dans les documents ffmpeg, j'ai lu que les fichiers Audible AAX sont des fichiers M4B chiffrés , et ils peuvent être déchiffrés en spécifiant un secret d'activation de 4 octets.

Je présume - probablement à tort - que celui donné est correct. Sinon, comment trouve-t-on ce secret.


Réponses:


30

Exécutez d'abord ces commandes:

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

Saisissez ensuite votre nom d'utilisateur et votre mot de passe Audible et attendez un moment que la clé d'activation à huit caractères soit imprimée.

Si vous n'exécutez pas la sedcommande qui modifie la valeur de la chromedriver_pathvariable, il en ./audible-activator.pyrésulte une erreur comme 'chromedriver' executable needs to be in PATHmême si se chromedrivertrouve sur le chemin ou dans le audible-activatorrépertoire. Si vous êtes sedGNU sed, remplacez-le sed -i ''par sed -i.

Après cela, exécutez une commande comme celle-ci:

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

(J'ai modifié la commande ci-dessus sur la base des commentaires de LiWang et marcus erronius à remplacer output.m4a;mv output.m4{a,b}par output.m4bet à remplacer -vn -c:v copypar -c copy.)

Si vous essayez d'utiliser la ffmpegcommande ci-dessus avec un aafichier au lieu d'un aaxfichier, cela entraîne une erreur comme Option activation_bytes not found. Pour télécharger un livre depuis Audible as aaxau lieu de aa, choisissez "Amélioré" dans la liste déroulante "Qualité audio" de la vue pour télécharger un livre.

aaxles fichiers sont cryptés mp4/ m4a/ m4bdonc la ffmpegcommande ci-dessus ne réencode pas l'audio et préserve les métadonnées telles que les chapitres. mp4, m4a, Et m4bsont des extensions de fichier de remplacement pour le format de conteneur MPEG-4 partie 14. Les extensions m4aet m4bont été initialement introduites par Apple. Une différence entre les extensions m4aet m4best que l'option de mémorisation de la position de lecture précédente dans iTunes est activée par défaut pour les fichiers avec une m4bextension mais pas pour les fichiers avec une m4aextension. iTunes affiche également les fichiers avec une m4bextension sous les livres audio par défaut.

Les anciennes versions d'iTunes ne pas la case pour activer se rappeler la position de lecture précédente, mais se rappelant la position de lecture précédente était toujours activée pour les fichiers avec une m4bextension, de sorte que même Wikipédia affirme encore à tort que « un .m4afichier audio ne peut pas « signet »(rappelez - vous dernier point d'écoute), contrairement aux .m4bfichiers d'extension. " (Même si je ne sais pas s'il existe encore d'autres lecteurs multimédias qui se comportent comme les anciennes versions d'iTunes à cet égard.)

L'UTI de l' m4bextension est com.apple.protected-mpeg-4-audioet le Finder montre le type de tous les m4bfichiers comme "audio MPEG-4 protégé" même si tous les fichiers avec une m4bextension n'ont pas de protection contre la copie.


J'utilise des .aaxfichiers et d' obtenir l'erreur: Unrecognized option 'activation_bytes'.. Des idées? Audible a-t-il changé de format au cours de la dernière année?
lollercoaster

3
Une raison de convertir en *.m4apuis de renommer en *.m4b? Pourquoi ne pas simplement faire ffmpeg -activation_bytes youractivationkey -i input.aax -vn -c:a copy output.m4b:?
Li Wang

1
@LiWang Cela a entraîné une erreur avec les anciennes versions de ffmpeg, mais cela ne semble plus être le cas.
nisetama

@ user4669748 je vois. Merçi pour la confirmation!
Li Wang

J'ai dû utiliser cette commande pour faire fonctionner python, mais après cela s'est parfaitement déroulé! ln -sf /usr/bin/python2.7 / usr / local / bin / python2
Sethmr

7

Cela vous donnera votre secret d'activation:

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


1
J'ai utilisé ce script pour effectuer la conversion réelle. Il convient également de noter que vous devez installer seleniumet requestsvia pipou easy_installet également télécharger et extraire chromedriver dans le audible-activatorrépertoire pour que cela fonctionne. Cette information est fournie dans audible-activatorle README de 's mais il est utile de le savoir d'avance :)
intuition

Merci, @intuited; ce script est de l'or. Besoin de réglages légers pour utiliser GNU grep ( ggrepinstallé avec brew install grep) sur macos, mais a fait un excellent travail après cela.
ecmanaut

6

J'ai essayé la réponse de user4669748, je suis tombé sur quelques choses à noter et j'ai découvert un correctif qui fonctionnait pour moi:

  1. audible-activator.py nécessite Python 2.7; il échoue avec Python 3.
  2. Après l'avoir démarré, la fenêtre Chrome apparaît sur l'écran et vous commencez à voir l'activité de l'interface graphique et une connexion réussie à Audible.
  3. Peu de temps après la connexion, l'activité du navigateur semble se bloquer, avec Waiting for px.owneriq.netconstamment affiché dans la barre d'état inférieure.
  4. Après 5 minutes, j'ai eu une 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)
    

À cela, j'étais coincé. Cependant, pensant qu'il px.owneriq.nets'agit d'une sorte d'annonce ou d'un site de suivi, j'ai essayé de le "désactiver temporairement" en l'ajoutant à /etc/hostsune adresse IP non valide, par exemple

0.0.0.0 px.owneriq.net

(Il s'agit d'une tactique suggérée par un ami pour arrêter les publicités dans le navigateur.)

Après cet ajout à /etc/hosts, réexécutez le programme. Il s'est terminé en 30 secondes.

Une clé d'activation de 4 octets a été imprimée à l'écran et fonctionnait parfaitement avec ffmpeg comme décrit dans la réponse de user4669748.

J'ai ensuite restauré /etc/hostsson contenu d'origine.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.