Wie verwende ich ffmpeg, um hörbare Dateien zu konvertieren?


13

Ich verwende ffmpeg v2.8.1 von Homebrew aus und versuche, Audible- Dateien zu konvertieren , aber es gibt einen Trick, den ich vermisse.

Dieser Befehl erzeugt diese Fehlerausgabe.

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

Ich weiß, dass die Datei in Ordnung ist, da sie in iTunes abgespielt wird. Ich habe auch die Datei Bild / Cover Art eingebettet,

Aus den ffmpeg-Dokumenten habe ich gelesen, dass Audible AAX-Dateien verschlüsselte M4B-Dateien sind und durch Angabe eines 4-Byte-Aktivierungsgeheimnisses entschlüsselt werden können.

Ich gehe - wahrscheinlich fälschlicherweise - davon aus, dass die angegebene in Ordnung ist. Wenn nicht, wie findet man dieses Geheimnis?


Antworten:


30

Führen Sie zuerst die folgenden Befehle aus:

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

Geben Sie dann Ihren Audible-Benutzernamen und Ihr Passwort ein und warten Sie eine Weile, bis der achtstellige Aktivierungsschlüssel gedruckt wurde.

Wenn Sie den sedBefehl, der den Wert der chromedriver_pathVariablen ändert, nicht ausführen , ./audible-activator.pyführt dies zu einem Fehler, 'chromedriver' executable needs to be in PATHauch wenn er chromedriversich im Pfad oder im audible-activatorVerzeichnis befindet. Wenn Sie sedGNU sind sed, ersetzen Sie sed -i ''durch sed -i.

Führen Sie danach einen Befehl wie folgt aus:

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

(Ich habe den obigen Befehl auf der Grundlage der Kommentare von Liwang und marcus erronius zu ersetzen output.m4a;mv output.m4{a,b}mit output.m4bund ersetzen -vn -c:v copymit -c copy.)

Wenn Sie versuchen, den ffmpegobigen Befehl mit einer aaDatei anstelle einer aaxDatei zu verwenden, führt dies zu einem Fehler wie Option activation_bytes not found. Um ein Buch von Audible Download als aaxstatt aa, wählen Sie „Erweitert“ aus dem „Audioqualität“ Drop - Down in der Ansicht für ein Buch herunterzuladen.

aaxDateien sind verschlüsselt mp4/ m4a/ m4bDateien, sodass der ffmpegobige Befehl Audio nicht neu codiert und Metadaten wie Kapitel beibehält. mp4, m4aUnd m4bsind alternative Dateierweiterungen für das MPEG-4 Part 14 Container - Format. Die m4aund m4bErweiterungen wurden ursprünglich von Apple eingeführt. Ein Unterschied zwischen m4aund m4bErweiterungen besteht darin, dass die Option zum Speichern der vorherigen Wiedergabeposition in iTunes standardmäßig für Dateien mit einer m4bErweiterung aktiviert ist , nicht jedoch für Dateien mit einer m4aErweiterung. iTunes zeigt m4bstandardmäßig auch Dateien mit einer Erweiterung unter Hörbüchern an.

In alten Versionen von iTunes war das Kontrollkästchen nicht aktiviert, um das Speichern der vorherigen Wiedergabeposition zu aktivieren. Das Speichern der vorherigen Wiedergabeposition war jedoch immer für Dateien mit einer m4bErweiterung aktiviert , sodass selbst Wikipedia immer noch fälschlicherweise angibt, dass "eine .m4aAudiodatei nicht" bookmarken "kann (denken Sie an die letzter Abhörpunkt), wohingegen .m4bErweiterungsdateien können. " (Auch wenn ich nicht weiß, ob es noch andere Mediaplayer gibt, die sich in dieser Hinsicht wie alte Versionen von iTunes verhalten.)

Die UTI für die m4bErweiterung lautet com.apple.protected-mpeg-4-audiound Finder zeigt die Art aller m4bDateien als "geschütztes MPEG-4-Audio" an, obwohl alle Dateien mit einer m4bErweiterung keinen Kopierschutz haben.


Ich verwende .aaxDateien und erhalte den Fehler : Unrecognized option 'activation_bytes'.. Irgendwelche Ideen? Hat Audible im letzten Jahr ihr Format geändert?
Lollercoaster

3
Gibt es einen Grund, zu konvertieren *.m4aund dann umzubenennen in *.m4b? Warum nicht einfach machen : ffmpeg -activation_bytes youractivationkey -i input.aax -vn -c:a copy output.m4b?
Li Wang

1
@LiWang Es führte zu einem Fehler bei älteren Versionen von ffmpeg, aber das scheint nicht mehr der Fall zu sein.
Nisetama

@ user4669748 Ich verstehe. Danke für die Bestätigung!
Li Wang

Ich musste diesen Befehl verwenden, um Python zum Laufen zu bringen, aber danach lief es perfekt! ln -sf /usr/bin/python2.7 / usr / local / bin / python2
Sethmr

7

Dadurch erhalten Sie Ihr Aktivierungsgeheimnis:

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


1
Ich habe dieses Skript verwendet , um die eigentliche Konvertierung durchzuführen. Es ist auch erwähnenswert, dass Sie chromedriver installieren seleniumund requestsüber pipoder easy_installherunterladen und extrahieren müssen, audible-activatordamit es funktioniert. Diese Informationen sind in audible-activatorder README-
Datei enthalten,

Danke, @intuited; Dieses Skript ist Gold. Benötigte leichte Anpassungen, um GNU grep (das ggrepinstallierte mit brew install grep) auf Macos zu verwenden, aber danach hat es großartige Arbeit geleistet.
Ecmanaut

6

Ich habe die Antwort von user4669748 ausprobiert und bin auf einige bemerkenswerte Dinge gestoßen. Dabei habe ich eine Lösung gefunden, mit der die Dinge für mich funktionieren:

  1. audible-activator.py benötigt Python 2.7; es schlägt mit Python 3 fehl.
  2. Nach dem Start wird das Chrome-Fenster auf dem Bildschirm angezeigt und Sie sehen die GUI-Aktivität und eine erfolgreiche Anmeldung bei Audible.
  3. Kurz nach der Anmeldung scheint die Browseraktivität zu hängen und wird Waiting for px.owneriq.netständig in der unteren Statusleiste angezeigt.
  4. Nach 5 Minuten hatte ich eine 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)
    

Daran steckte ich fest. Da px.owneriq.netich jedoch dachte, dass es sich um eine Art Anzeige oder Tracking-Site handelt, habe ich versucht, sie "vorübergehend zu deaktivieren", indem ich sie /etc/hostsmit einer ungültigen IP-Adresse hinzufügte , z

0.0.0.0 px.owneriq.net

(Dies war eine von einem Freund vorgeschlagene Taktik, um Anzeigen im Browser zu stoppen.)

/etc/hostsFühren Sie nach dieser Hinzufügung zu das Programm erneut aus. Es lief in 30 Sekunden zu Ende.

Ein 4-Byte-Aktivierungsschlüssel wurde auf den Bildschirm gedruckt und funktionierte perfekt mit ffmpeg, wie in der Antwort von user4669748 beschrieben.

Ich habe dann /etc/hostsden ursprünglichen Inhalt wiederhergestellt .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.