Як використовувати 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 байти.

Я припускаю - мабуть, неправильно - що це дано нормально. Якщо ні, то як можна знайти цю таємницю.


Відповіді:


31

Спочатку запустіть ці команди:

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 і Marcus erronius замінити 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, частина 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розширенням не мають захисту від копіювання.


Я використовую .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, але це вже не здається.
нісетама

@ user4669748 Я бачу. Дякуємо за підтвердження!
Лі Ван

Мені довелося скористатися цією командою, щоб пітон працював, але після цього вийшло ідеально! 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-activator«README README», але корисно знати її
наперед

Дякую, @intuited; що сценарій золото. Для використання GNU grep ( ggrepвстановленого з brew install grep) на macos знадобилося легке налаштування , але після цього зробили чудову роботу.
еманаут

6

Я спробував відповідь user4669748, і натрапив на кілька речей, які варто відзначити, і виявив виправлення, яке могло працювати для мене:

  1. audible-activator.py вимагає Python 2.7; він не вдається з Python 3.
  2. Після запуску на екрані спливає вікно Chrome, і ви починаєте бачити активність GUI та успішне вхід у службу 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, як описано у відповіді user4669748.

Потім я відновив /etc/hostsпочатковий зміст.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.