ffmpegを使用して可聴ファイルを変換する方法


13

私はHomebrewからffmpeg v2.8.1を実行していて、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バイトのアクティベーションシークレットを指定することで復号化できることがわかりました。

私は-おそらく間違って-与えられたものは大丈夫だと推測しています。そうでない場合、どのようにしてその秘密を見つけますか。


回答:


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ユーザー名とパスワードを入力し、8文字のアクティベーションキーが印刷されるまでしばらく待ちます。

変数sedの値を変更するコマンドを実行しないと、パス上またはディレクトリ内にある場合でも、エラーが発生します。GNUの場合は、に置き換えてください。chromedriver_path./audible-activator.py'chromedriver' executable needs to be in PATHchromedriveraudible-activatorsedsedsed -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。のaax代わりにAudibleから書籍をダウンロードするには、書籍をダウンロードするaaビューの[オーディオ品質]ドロップダウンから[拡張]を選択します。

aaxファイルは暗号化されているmp4/ m4a/ m4bので、ファイルをffmpegコマンドは、上記オーディオエンコード再しないと、そのような章としてメタデータを保持します。mp4m4a、およびm4bMPEG-4パート14のコンテナ形式の別の拡張子です。m4aそしてm4b拡張は、もともとアップル社によって導入されました。m4am4b拡張子の違いの1つは、iTunesで以前の再生位置を記憶するオプションが、m4b拡張子のあるファイルではデフォルトで有効になっているが、拡張子のあるファイルでは有効になっていないことですm4a。iTunesではm4b、デフォルトで、オーディオブックの下に拡張子が付いたファイルも表示されます。

以前のバージョンのiTunesには、以前の再生位置を記憶できるようにするチェックボックスがありませんでしたが、m4b拡張子のあるファイルでは以前の再生位置を記憶することが常に有効でし.m4aた。最後のリスニングスポット)、.m4b拡張ファイルはできます。」(その点で古いバージョンのiTunesのように動作する他のメディアプレーヤーがまだあるかどうかはわかりませんが。)

m4b拡張子のUTIは次のとおりです。Finderは、拡張子のcom.apple.protected-mpeg-4-audioあるすべてのm4bファイルにm4bコピー防止機能がない場合でも、すべてのファイルの種類を「保護されたMPEG-4オーディオ」として表示します。


.aaxファイルを使用していて、エラーが発生しますUnrecognized option 'activation_bytes'.。何か案は?Audibleは昨年、フォーマットを変更しましたか?
lollercoaster 2017年

3
に変換し*.m4aてから名前を変更する理由はあり*.m4bますか?なぜしないのffmpeg -activation_bytes youractivationkey -i input.aax -vn -c:a copy output.m4bですか?
Li Wang

1
@LiWang古いバージョンのffmpegでエラーが発生しましたが、現在はそうではありません。
ニセタマ2018年

@ user4669748なるほど。確認していただいてありがとうございます!
李王

私はこのコマンドを使用してpythonを動作させる必要がありましたが、この後は完璧になりました!ln -sf /usr/bin/python2.7 / usr / local / bin / python2
Sethmr

7

これにより、アクティベーションシークレットが取得されます。

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


1
このスクリプトを使用して実際の変換を行いました。また、Chromeドライバーをインストールseleniumしてrequests経由するpipeasy_install、Chromeドライバーをダウンロードしてaudible-activatorディレクトリに展開して機能させる必要があることにも注意してください。この情報は、提供されたaudible-activator:)のREADMEが、前もって知っておくと便利です
直感

ありがとう、@ intuited; そのスクリプトは金です。macosでGNU grep(とともにggrepインストールされたものbrew install grep)を使用するための微調整が必​​要でしたが、その後は素晴らしい仕事をしました。
ecmanaut 2017年

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バイトのアクティベーションキーが画面に表示され、user4669748の回答に記載されているようにffmpegと完全に連携しました。

その後/etc/hosts、元のコンテンツに戻しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.