Làm cách nào để sử dụng ffmpeg để chuyển đổi tệp âm thanh


13

Tôi đang chạy ffmpeg v2.8.1 từ Homebrew và đang cố gắng chuyển đổi các tệp Audible nhưng có một số mẹo tôi bị thiếu.

Lệnh này tạo ra lỗi đầu ra này.

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

Tôi biết các tập tin là ok, bởi vì nó chơi trong iTunes. Tôi cũng có hình ảnh tập tin / ảnh bìa được nhúng trong đó,

Từ các tài liệu ffmpeg, tôi đọc các tệp Audible AAX là các tệp M4B được mã hóa và chúng có thể được giải mã bằng cách chỉ định bí mật kích hoạt 4 byte.

Tôi đoán - có lẽ không chính xác - rằng cái đã cho là ổn. Nếu không, làm thế nào để tìm thấy bí mật đó.


Câu trả lời:


30

Đầu tiên chạy các lệnh sau:

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

Sau đó nhập tên người dùng và mật khẩu Audible của bạn và đợi một lúc để khóa kích hoạt tám ký tự được in.

Nếu bạn không chạy sedlệnh thay đổi giá trị của chromedriver_pathbiến, ./audible-activator.pysẽ xảy ra lỗi như 'chromedriver' executable needs to be in PATHngay cả khi chromedriverđang ở trên đường dẫn hoặc trong audible-activatorthư mục. Nếu bạn sedlà GNU sed, hãy thay thế sed -i ''bằng sed -i.

Sau đó chạy một lệnh như thế này:

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

(Tôi chỉnh sửa các lệnh trên dựa trên ý kiến của Liwang và marcus erronius để thay thế output.m4a;mv output.m4{a,b}với output.m4bvà để thay thế -vn -c:v copyvới -c copy.)

Nếu bạn cố gắng sử dụng ffmpeglệnh trên với một aatệp thay vì một aaxtệp, nó sẽ dẫn đến một lỗi như Option activation_bytes not found. Để tải xuống một cuốn sách từ Audible aaxthay vì aa, hãy chọn "Nâng cao" từ danh sách thả xuống "Chất lượng âm thanh" trong chế độ xem để tải xuống một cuốn sách.

aaxcác tệp được mã hóa mp4/ m4a/ m4btệp để ffmpeglệnh trên không mã hóa lại âm thanh và nó bảo tồn siêu dữ liệu như các chương. mp4, m4am4blà các phần mở rộng tên tệp thay thế cho định dạng bộ chứa MPEG-4 Phần 14. Các phần mở rộng m4am4bban đầu được giới thiệu bởi Apple. Một điểm khác biệt giữa phần mở rộng m4am4bphần mở rộng là tùy chọn ghi nhớ vị trí phát lại trước đó trong iTunes được bật theo mặc định cho các tệp có m4bphần mở rộng nhưng không dành cho các tệp có m4aphần mở rộng. iTunes cũng hiển thị các tệp có m4bphần mở rộng theo audiobook theo mặc định.

Các phiên bản cũ của iTunes không có hộp kiểm để cho phép ghi nhớ vị trí phát lại trước đó, nhưng việc nhớ vị trí phát lại trước đó luôn được bật cho các tệp có m4bphần mở rộng, do đó, ngay cả Wikipedia vẫn nói không chính xác rằng " .m4atệp âm thanh không thể" đánh dấu "(hãy nhớ điểm nghe cuối cùng), trong khi .m4bcác tệp mở rộng có thể. " (Mặc dù tôi không biết liệu vẫn còn những người chơi phương tiện khác hoạt động như các phiên bản cũ của iTunes về mặt đó hay không.)

UTI cho m4btiện ích mở rộng là com.apple.protected-mpeg-4-audiovà Finder hiển thị loại tất cả m4bcác tệp là "âm thanh MPEG-4 được bảo vệ" mặc dù tất cả các tệp có m4btiện ích mở rộng không có bảo vệ bản sao.


Tôi đang sử dụng .aaxtập tin và nhận được lỗi : Unrecognized option 'activation_bytes'.. Có ý kiến ​​gì không? Audible đã thay đổi định dạng của họ trong năm ngoái?
lollercoaster

3
Bất kỳ lý do để chuyển đổi *.m4avà sau đó đổi tên là *.m4b? Tại sao không chỉ làm : ffmpeg -activation_bytes youractivationkey -i input.aax -vn -c:a copy output.m4b?
Li Wang

1
@LiWang Nó đã dẫn đến một lỗi với các phiên bản cũ hơn của ffmpeg, nhưng dường như đó không còn là trường hợp nữa.
nisetama

@ user4669748 Tôi thấy. Cám ơn vì đã xác nhận!
Li Wang

Tôi đã phải sử dụng lệnh này để python hoạt động, nhưng sau đó nó đã hoàn hảo! ln -sf /usr/bin/python2.7 / usr / local / bin / python2
Sethmr

7

Điều này sẽ giúp bạn có được bí mật kích hoạt của bạn:

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


1
Tôi đã sử dụng kịch bản này để thực hiện chuyển đổi thực tế. Cũng đáng lưu ý rằng bạn phải cài đặt seleniumrequeststhông qua piphoặc easy_installcũng có thể tải xuống và trích xuất chromedriver vào audible-activatorthư mục để nó hoạt động. Thông tin này được cung cấp trong audible-activatorREADME nhưng thật hữu ích khi biết trước :)
trực quan

Cảm ơn, @intuited; kịch bản đó là vàng. Cần tinh chỉnh ánh sáng để sử dụng GNU grep ( ggrepđược cài đặt brew install grep) trên macos, nhưng sau đó đã làm rất tốt.
ecmanaut

6

Tôi đã thử câu trả lời của user4669748 và đã gặp một vài điều đáng chú ý và phát hiện ra một bản sửa lỗi có tác dụng với tôi:

  1. audible-activator.py yêu cầu Python 2.7; nó thất bại với Python 3.
  2. Sau khi khởi động nó, cửa sổ Chrome bật lên trên màn hình và bạn bắt đầu thấy hoạt động GUI và đăng nhập thành công vào Audible.
  3. Ngay sau khi đăng nhập, hoạt động của trình duyệt dường như bị treo, Waiting for px.owneriq.netliên tục được hiển thị trong thanh trạng thái dưới cùng.
  4. Sau 5 phút, tôi đã có 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)
    

Lúc này, tôi bị kẹt. Tuy nhiên, nghĩ rằng đó px.owneriq.netlà một loại quảng cáo hoặc trang web theo dõi, tôi đã cố gắng "vô hiệu hóa tạm thời" nó bằng cách thêm vào /etc/hostsbằng một địa chỉ IP không hợp lệ, ví dụ:

0.0.0.0 px.owneriq.net

(Đây là một chiến thuật được đề xuất bởi một người bạn để dừng quảng cáo trên trình duyệt.)

Sau khi bổ sung /etc/hosts, chạy lại chương trình. Nó chạy đến hoàn thành trong 30 giây.

Khóa kích hoạt 4 byte đã được in ra màn hình và hoạt động hoàn hảo với ffmpeg như được mô tả trong câu trả lời của user4669748.

Sau đó tôi khôi phục lại /etc/hostsnội dung ban đầu của nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.