Como uso o ffmpeg para converter arquivos audíveis

13

Estou executando o ffmpeg v2.8.1 do Homebrew e tentando converter arquivos Audible, mas há algum truque que estou perdendo.

Este comando produz esta saída de erro.

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

Eu sei que o arquivo está ok, porque é reproduzido no iTunes. Eu também tenho a imagem do arquivo / arte da capa incorporada,

Nos documentos do ffmpeg, li que os arquivos Audible AAX são arquivos M4B criptografados e podem ser descriptografados especificando um segredo de ativação de 4 bytes.

Estou presumindo - provavelmente incorretamente - que o dado está ok. Se não, como encontrar esse segredo.

Harry McGovern
fonte
Veja também github.com/KrumpetPirate/AAXtoMP3
Arto Bendiken

Respostas:

30

Primeiro, execute estes 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

Em seguida, digite seu nome de usuário e senha do Audible e aguarde um pouco até que a chave de ativação de oito caracteres seja impressa.

Se você não executar o sedcomando que altera o valor da chromedriver_pathvariável, ./audible-activator.pyresultará em um erro como 'chromedriver' executable needs to be in PATHse estivesse chromedriverno caminho ou no audible-activatordiretório. Se você sedé GNU sed, substitua sed -i ''por sed -i.

Depois disso, execute um comando como este:

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

(Editei o comando acima com base nos comentários de LiWang e marcus erronius para substituir output.m4a;mv output.m4{a,b}por output.m4be substituir -vn -c:v copypor -c copy.)

Se você tentar usar o ffmpegcomando acima com um aaarquivo em vez de um aaxarquivo, isso resultará em um erro como Option activation_bytes not found. Para baixar um livro do Audible como em aaxvez de aa, escolha "Aprimorado" no menu suspenso "Qualidade do áudio" na exibição para baixar um livro.

aaxos arquivos são criptografados mp4/ m4a/ m4bfiles para que o ffmpegcomando acima não recodifique o áudio e preserve metadados como os capítulos. mp4, m4a, E m4bsão extensões de nomes alternativos para o recipiente de formato MPEG-4 parte 14. As extensões m4ae m4bforam originalmente introduzidas pela Apple. Uma diferença entre as extensões m4ae m4bé que a opção de lembrar a posição de reprodução anterior no iTunes é ativada por padrão para arquivos com uma m4bextensão, mas não para arquivos com uma m4aextensão. O iTunes também exibe arquivos com uma m4bextensão em audiolivros por padrão.

As versões antigas do iTunes não tinham a caixa de seleção para ativar a lembrança da posição de reprodução anterior, mas a lembrança da posição de reprodução anterior sempre era ativada para arquivos com uma m4bextensão; portanto, mesmo a Wikipedia ainda afirma incorretamente que "um .m4aarquivo de áudio não pode" marcar "(lembre-se de último ponto de escuta), enquanto os .m4barquivos de extensão podem ". (Embora eu não saiba se ainda existem outros players de mídia que se comportam como versões antigas do iTunes a esse respeito.)

A UTI da m4bextensão é com.apple.protected-mpeg-4-audioe o Finder mostra o tipo de todos os m4barquivos como "áudio MPEG-4 protegido", mesmo que todos os arquivos com uma m4bextensão não tenham proteção contra cópia.

nisetama
fonte
Estou usando .aaxarquivos e recebendo o erro: Unrecognized option 'activation_bytes'.. Alguma ideia? O Audible mudou seu formato no ano passado?
Lollcoaster
3
Qualquer motivo para converter *.m4ae renomear como *.m4b? Por que não apenas fazer ffmpeg -activation_bytes youractivationkey -i input.aax -vn -c:a copy output.m4b:?
Li Wang
1
@ LiWang Isso resultou em um erro nas versões mais antigas do ffmpeg, mas isso não parece mais ser o caso.
Nisetama # 9/18
@ user4669748 Entendo. Obrigado pela confirmação!
Li Wang
Eu tive que usar esse comando para fazer o python funcionar, mas depois disso foi perfeito! Você pode usar o seguinte comando
`
7

Isso lhe dará seu segredo de ativação:

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

Rígido
fonte
1
Eu usei esse script para fazer a conversão real. Também é importante notar que você precisa instalar seleniume requestsvia pipou easy_installbaixar e extrair o chromedriver no audible-activatordiretório para que ele funcione. Esta informação é fornecida no audible-activatorREADME de 's, mas é útil saber de antemão :)
intuited
Obrigado, @intuited; esse script é ouro. Precisava de ajustes leves para usar o GNU grep (o ggrepinstalado com brew install grep) nos macos, mas fez um ótimo trabalho depois disso.
precisa saber é
6

Tentei a resposta do user4669748, encontrei algumas coisas que mereciam ser notadas e descobri uma correção que fazia as coisas funcionarem para mim:

  1. audible-activator.py requer Python 2.7; falha com o Python 3.
  2. Após iniciá-lo, a janela do Chrome aparece na tela e você começa a ver a atividade da GUI e um login bem-sucedido no Audible.
  3. Logo após o login, a atividade do navegador parece travar, sendo Waiting for px.owneriq.netconstantemente exibida na barra de status inferior.
  4. Após 5 minutos, eu tive uma 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)
    

Com isso, eu estava preso. No entanto, pensando que px.owneriq.neté algum tipo de anúncio ou site de rastreamento, tentei "desabilitá-lo temporariamente" adicionando /etc/hostsum endereço IP inválido, por exemplo,

0.0.0.0 px.owneriq.net

(Essa foi uma tática sugerida por um amigo para interromper os anúncios no navegador.)

Após essa adição /etc/hosts, execute novamente o programa. Ele foi concluído em 30 segundos.

Uma chave de ativação de 4 bytes foi impressa na tela e funcionou perfeitamente com o ffmpeg, conforme descrito na resposta do usuário4669748.

Depois, restaurei /etc/hostso conteúdo original.

devopsmikey
fonte