Как использовать ffmpeg для конвертации звуковых файлов

13

Я запускаю ffmpeg v2.8.1 из Homebrew и пытаюсь конвертировать файлы Audible, но есть одна хитрость, которой мне не хватает.

Эта команда выводит эту ошибку.

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

Я знаю, что файл в порядке, потому что он играет в iTunes. У меня есть встроенный файл изображения / обложки,

Из документов ffmpeg я прочитал, что файлы Audible AAX являются зашифрованными файлами M4B , и их можно расшифровать, указав 4-байтовый секретный ключ активации.

Я предполагаю - возможно, неправильно - что данный в порядке. Если нет, то как найти этот секрет.

Гарри Макговерн
источник
См. Также github.com/KrumpetPirate/AAXtoMP3
Арто Бендикен,

Ответы:

30

Сначала запустите эти команды:

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

Затем введите свое имя пользователя и пароль Audible и подождите некоторое время, пока будет напечатан восьмисимвольный ключ активации.

Если вы не запустите sedкоманду, которая изменяет значение chromedriver_pathпеременной, это ./audible-activator.pyприведет к ошибке, 'chromedriver' executable needs to be in PATHдаже если она chromedriverнаходится в пути или в audible-activatorкаталоге. Если ваш sedGNU sed, замените sed -i ''на sed -i.

После этого запустите такую ​​команду:

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

(Я отредактировал команду выше на основе комментариев LiWang и Маркуса Эррония, чтобы заменить output.m4a;mv output.m4{a,b}на output.m4bи заменить -vn -c:v copyна -c copy.)

Если вы попытаетесь использовать ffmpegкоманду выше с aaфайлом вместо aaxфайла, это приведет к ошибке вроде Option activation_bytes not found. Чтобы загрузить книгу из Audible aaxвместо aa, выберите «Улучшено» в раскрывающемся списке «Качество звука» в представлении для загрузки книги.

aaxфайлы зашифрованы mp4/ m4a/ m4bфайлы, поэтому приведенная ffmpegвыше команда не перекодирует аудио и сохраняет метаданные, такие как главы. mp4, m4aи m4bявляются альтернативными расширениями имени файла для формата контейнера MPEG-4 Part 14. Расширения m4aи m4bбыли первоначально представлены Apple. Одно из различий между расширениями m4aи и m4bзаключается в том, что опция запоминания предыдущей позиции воспроизведения в iTunes включена по умолчанию для файлов с m4bрасширением, но не для файлов с m4aрасширением. iTunes также отображает файлы с m4bрасширением в аудиокнигах по умолчанию.

В старых версиях iTunes не было флажка, позволяющего запоминать предыдущую позицию воспроизведения, но запоминание предыдущей позиции воспроизведения всегда было включено для файлов с m4bрасширением, поэтому даже Википедия по-прежнему неверно заявляет, что « .m4aаудиофайл не может« добавить в закладки »(запомните последнее место прослушивания), тогда как .m4bфайлы расширения могут. " (Хотя я не знаю, есть ли другие медиаплееры, которые ведут себя как старые версии iTunes в этом отношении.)

UTI для m4bрасширения - это, com.apple.protected-mpeg-4-audioи Finder показывает вид всех m4bфайлов как «защищенное аудио MPEG-4», даже если все файлы с m4bрасширением не имеют защиты от копирования.

nisetama
источник
Я использую .aaxфайлы и получаю сообщение об ошибке: Unrecognized option 'activation_bytes'.. Любые идеи? Поменял ли Audible свой формат в прошлом году?
Lollercoaster
3
Любая причина, чтобы преобразовать в *.m4aи затем переименовать в *.m4b? Почему бы просто не сделать ffmpeg -activation_bytes youractivationkey -i input.aax -vn -c:a copy output.m4b:?
Ли Ван
1
@LiWang Это привело к ошибке с более старыми версиями ffmpeg, но это больше не так.
nisetama
@ user4669748 Понятно. Спасибо за подтверждение!
Ли Ван
Мне пришлось использовать эту команду, чтобы заставить Python работать, но после этого все прошло отлично! ln -sf /usr/bin/python2.7 / usr / local / bin / python2
Sethmr
7

Это даст вам ваш секрет активации:

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

застывший
источник
1
Я использовал этот скрипт, чтобы сделать фактическое преобразование. Также стоит отметить, что вы должны установить seleniumи requestsчерез pipили, easy_installа также загрузить и извлечь chromedriver в audible-activatorкаталог, чтобы он работал. Эта информация предоставляется в audible-activatorREADME, но ее полезно знать
заранее
Спасибо, @intuited; этот сценарий золотой. Необходима легкая настройка, чтобы использовать GNU grep ( ggrepустановленный с brew install grep) на macos, но после этого проделал большую работу.
экманавт
6

Я попытался ответить на вопрос user4669748, но наткнулся на несколько вещей, на которые стоит обратить внимание, и обнаружил исправление, которое заставило меня работать:

  1. audible-activator.py требует Python 2.7; это терпит неудачу с Python 3.
  2. После его запуска на экране появляется окно Chrome, и вы начинаете видеть активность графического интерфейса пользователя и успешный вход в Audible.
  3. Вскоре после входа активность браузера, похоже, зависает, Waiting for px.owneriq.netпостоянно отображается в нижней строке состояния.
  4. Через 5 минут у меня появилось 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)
    

На этом я застрял. Однако, думая, что px.owneriq.netэто какой-то сайт объявлений или отслеживания, я попытался «временно отключить» его, добавив /etc/hostsс неверным IP-адресом, например

0.0.0.0 px.owneriq.net

(Это была тактика, предложенная другом, чтобы остановить рекламу в браузере.)

После этого дополнения /etc/hostsперезапустите программу. Это закончилось через 30 секунд.

4-байтовый ключ активации был напечатан на экране и отлично работал с ffmpeg, как описано в ответе пользователя 4669748.

Затем я восстановил /etc/hostsего первоначальное содержание.

devopsmikey
источник