Bagaimana cara menggunakan ffmpeg untuk mengonversi file yang dapat didengar

13

Saya menjalankan ffmpeg v2.8.1 dari Homebrew, dan mencoba untuk mengkonversi file Audible tetapi ada beberapa trik yang saya lewatkan.

Perintah ini menghasilkan output kesalahan ini.

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

Saya tahu file itu ok, karena diputar di iTunes. Saya memiliki file gambar / sampul tertanam di dalamnya juga,

Dari dokumen ffmpeg, saya membaca file Audible AAX adalah file M4B terenkripsi , dan mereka dapat didekripsi dengan menetapkan rahasia aktivasi 4 byte.

Saya menduga - mungkin salah - bahwa yang diberikan ok. Jika tidak, bagaimana orang menemukan rahasia itu.

Harry McGovern
sumber
Lihat juga github.com/KrumpetPirate/AAXtoMP3
Arto Bendiken

Jawaban:

30

Pertama jalankan perintah ini:

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

Kemudian masukkan nama pengguna dan kata sandi Anda dan tunggu sebentar hingga kunci aktivasi delapan karakter dicetak.

Jika Anda tidak menjalankan sedperintah yang mengubah nilai chromedriver_pathvariabel, ./audible-activator.pymenghasilkan kesalahan seperti 'chromedriver' executable needs to be in PATHbahkan jika chromedriverada di jalan atau di audible-activatordirektori. Jika Anda sedGNU sed, ganti sed -i ''dengan sed -i.

Setelah itu jalankan perintah seperti ini:

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

(Saya mengedit perintah di atas berdasarkan komentar oleh LiWang dan marcus erronius untuk menggantikan output.m4a;mv output.m4{a,b}dengan output.m4bdan untuk mengganti -vn -c:v copydengan -c copy.)

Jika Anda mencoba menggunakan ffmpegperintah di atas dengan aafile, bukan aaxfile, itu menghasilkan kesalahan seperti Option activation_bytes not found. Untuk mengunduh buku dari Audible sebagai aaxgantinya aa, pilih "Enhanced" dari menu tarik-turun "Audio Quality" dalam tampilan untuk mengunduh buku.

aaxfile dienkripsi mp4/ m4a/ m4bfile sehingga ffmpegperintah di atas tidak menyandikan ulang audio dan mempertahankan metadata seperti bab. mp4,, m4adan m4bmerupakan ekstensi nama file alternatif untuk format wadah MPEG-4 Bagian 14. The m4adan m4bekstensi awalnya diperkenalkan oleh Apple. Satu perbedaan antara ekstensi m4adan m4badalah bahwa opsi untuk mengingat posisi pemutaran sebelumnya di iTunes diaktifkan secara default untuk file dengan m4bekstensi tetapi tidak untuk file dengan m4aekstensi. iTunes juga menampilkan file dengan m4bekstensi di bawah buku audio secara default.

Versi lama dari iTunes tidak memiliki kotak centang untuk mengaktifkan mengingat posisi pemutaran sebelumnya, tetapi mengingat posisi pemutaran sebelumnya selalu diaktifkan untuk file dengan m4bekstensi, jadi bahkan Wikipedia masih salah menyatakan bahwa " .m4afile audio tidak dapat" bookmark "(ingat tempat mendengarkan terakhir), sedangkan .m4bfile ekstensi dapat. " (Meskipun saya tidak tahu apakah masih ada pemutar media lain yang berperilaku seperti iTunes versi lama dalam hal itu.)

UTI untuk m4bekstensi adalah com.apple.protected-mpeg-4-audiodan Finder menunjukkan jenis semua m4bfile sebagai "audio MPEG-4 terproteksi" meskipun semua file dengan m4bekstensi tidak memiliki perlindungan salinan.

nisetama
sumber
Saya menggunakan .aaxfile dan mendapatkan kesalahan: Unrecognized option 'activation_bytes'.. Ada ide? Sudahkah Audible mengubah formatnya dalam setahun terakhir?
lollercoaster
3
Adakah alasan untuk mengonversi *.m4adan kemudian mengganti nama menjadi *.m4b? Mengapa tidak hanya melakukan: ffmpeg -activation_bytes youractivationkey -i input.aax -vn -c:a copy output.m4b?
Li Wang
1
@LiWang Ini menghasilkan kesalahan dengan versi ffmpeg yang lebih lama, tetapi sepertinya tidak lagi demikian.
nisetama
@ user4669748 saya mengerti. Terima kasih atas konfirmasinya!
Li Wang
Saya harus menggunakan perintah ini untuk membuat python bekerja, tetapi setelah ini berjalan dengan sempurna! ln -sf /usr/bin/python2.7 / usr / local / bin / python2
Sethmr
7

Ini akan memberi Anda rahasia aktivasi Anda:

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

Telanjang
sumber
1
Saya menggunakan skrip ini untuk melakukan konversi yang sebenarnya. Perlu juga dicatat bahwa Anda harus menginstal seleniumdan requestsmelalui pipatau easy_installdan juga mengunduh dan mengekstrak chromedriver ke audible-activatordirektori agar berfungsi. Info ini disediakan dalam audible-activatorREADME tetapi berguna untuk mengetahui di muka :)
intuited
Terima kasih, @intuited; naskah itu adalah emas. Diperlukan penyesuaian ringan untuk menggunakan GNU grep ( ggrepdiinstal dengan brew install grep) pada Macos, tetapi melakukan pekerjaan yang baik setelah itu.
ecmanaut
6

Saya mencoba jawaban user4669748, dan berlari ke beberapa hal yang perlu diperhatikan, dan menemukan perbaikan yang membuat hal-hal bekerja untuk saya:

  1. audible-activator.py membutuhkan Python 2.7; gagal dengan Python 3.
  2. Setelah memulainya, jendela Chrome muncul di layar dan Anda mulai melihat aktivitas GUI, dan berhasil masuk ke Audible.
  3. Segera setelah login, aktivitas browser tampaknya hang, dengan Waiting for px.owneriq.netterus - menerus ditampilkan di bilah status bawah.
  4. Setelah 5 menit, saya memiliki 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)
    

Saat ini, saya mandek. Namun, berpikir bahwa itu px.owneriq.netadalah semacam iklan atau situs pelacakan, saya mencoba untuk "menonaktifkan sementara" dengan menambahkan /etc/hostsalamat IP yang tidak valid, misalnya

0.0.0.0 px.owneriq.net

(Ini adalah taktik yang disarankan oleh teman untuk menghentikan iklan di browser.)

Setelah penambahan ini /etc/hosts, jalankan kembali program. Itu berlari sampai selesai dalam 30 detik.

Kunci aktivasi 4-byte dicetak ke layar, dan bekerja dengan sempurna dengan ffmpeg seperti yang dijelaskan dalam jawaban user4669748.

Saya kemudian dikembalikan /etc/hostske konten aslinya.

devopsmikey
sumber