¿Cómo uso ffmpeg para convertir archivos audibles?

10

Estoy ejecutando ffmpeg v2.8.1 de Homebrew, y trato de convertir Audible , pero hay un truco que estoy perdiendo.

Este comando produce esta salida de error.

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

Sé que el archivo está bien, porque se reproduce en iTunes. También tengo la imagen del archivo / portada incrustada en él,

De los documentos ffmpeg, leí Los archivos AAX audibles son archivos M4B encriptados , y pueden ser descifrados especificando un secreto de activación de 4 bytes.

Supongo, probablemente de forma incorrecta, que el que se da está bien. Si no, ¿cómo se encuentra ese secreto?

    
pregunta Harry McGovern 10.01.2016 - 13:29

3 respuestas

24

Primero ejecuta estos comandos:

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

Luego ingrese su nombre de usuario y contraseña de Audible y espere un momento hasta que se imprima la clave de activación de ocho caracteres.

Si no ejecuta el comando sed que cambia el valor de la variable chromedriver_path , ./audible-activator.py produce un error como 'chromedriver' executable needs to be in PATH , incluso si chromedriver está en la ruta o en el audible-activator directorio.

Después de eso, ejecuta un comando como este:

ffmpeg -activation_bytes youractivationkey -i input.aax -vn -c:a copy output.m4a;mv output.m4{a,b}

Si intenta usar el comando ffmpeg con un archivo aa en lugar de un archivo aax , se produce un error como Option activation_bytes not found . Para descargar un libro de Audible como aax en lugar de aa , elija "Mejorado" en el menú desplegable "Calidad de audio" en la vista para descargar un libro.

Los archivos

aax están cifrados con los archivos mp4 / m4a / m4b , por lo que el comando ffmpeg no vuelve a codificar el audio y conserva los metadatos, como los capítulos. mp4 , m4a y m4b son extensiones de nombre de archivo alternativas para el formato de contenedor MPEG-4 Parte 14. Una diferencia entre las extensiones m4a y m4b es que la opción para recordar la posición de reproducción anterior en iTunes está habilitada de manera predeterminada para los archivos con una extensión m4b pero no para los archivos con una extensión m4a . iTunes también muestra archivos con una extensión m4b en audiolibros de forma predeterminada.

    
respondido por el user4669748 23.06.2016 - 20:10
6

Esto te dará tu secreto de activación:

enlace

    
respondido por el Stark 13.01.2016 - 06:36
6

Intenté la respuesta de user4669748 y encontré algunas cosas que vale la pena mencionar, y descubrí una solución que hizo que las cosas funcionaran para mí:

  1. audible-activator.py requiere Python 2.7; falla con Python 3.
  2. Después de iniciarlo, aparece la ventana de Chrome en la pantalla y empiezas a ver la actividad de la GUI, y un inicio de sesión exitoso en Audible.
  3. Poco después del inicio de sesión, la actividad del navegador parece bloquearse, y Waiting for px.owneriq.net se muestra constantemente en la barra de estado inferior.
  4. Después de 5 minutos, tuve una 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)
    

En esto, estaba atascado. Sin embargo, pensando que px.owneriq.net es algún tipo de anuncio o sitio de seguimiento, traté de "desactivarlo temporalmente" agregando a /etc/hosts con una dirección IP no válida, por ejemplo

0.0.0.0 px.owneriq.net

(Esta fue una táctica sugerida por un amigo para detener los anuncios en el navegador).

Después de esta adición a /etc/hosts , vuelva a ejecutar el programa. Se completó en 30 segundos.

Una clave de activación de 4 bytes se imprimió en la pantalla y funcionó perfectamente con ffmpeg como se describe en la respuesta del usuario4669748.

Luego restauré /etc/hosts a su contenido original.

    
respondido por el devopsmikey 04.12.2016 - 03:09

Lea otras preguntas en las etiquetas