Sesli dosyaları dönüştürmek için ffmpeg'i nasıl kullanabilirim


13

Homebrew'dan ffmpeg v2.8.1 çalıştırıyorum ve Audible dosyalarını dönüştürmeye çalışıyorum ama eksik olduğum bir numara var.

Bu komut bu hata çıkışını üretir.

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

Dosyanın iyi olduğunu biliyorum, çünkü iTunes'da oynuyor. İçinde dosya imajı / kapak resmi var,

Ffmpeg belgelerinden, Audible AAX dosyalarının şifrelenmiş M4B dosyaları olduğunu okudum ve 4 baytlık bir etkinleştirme sırrı belirtilerek şifresi çözülebilir.

Ben - muhtemelen yanlış - verilen bir Tamam olduğunu varsayıyorum. Eğer değilse, bu sır nasıl bulunur.


Yanıtlar:


31

İlk önce şu komutları çalıştırın:

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

Ardından Sesli kullanıcı adınızı ve şifrenizi girin ve sekiz karakter etkinleştirme anahtarının yazdırılması için bir süre bekleyin.

Değişkenin seddeğerini değiştiren komutu çalıştırmazsanız , yolda veya dizinde olsa bile hataya neden olur . Eğer senin GNU olduğunu , yerini ile .chromedriver_path./audible-activator.py'chromedriver' executable needs to be in PATHchromedriveraudible-activatorsedsedsed -i ''sed -i

Bundan sonra şöyle bir komut çalıştırın:

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

(Yerine Liwang ve Marcus erronius göre açıklamalara dayanarak, yukarıda I komut düzenlenmiş output.m4a;mv output.m4{a,b}olan output.m4bve yerine -vn -c:v copyile -c copy).

ffmpegYukarıdaki komutu aadosya yerine bir dosyayla kullanmaya çalışırsanız aax, bunun gibi bir hatayla sonuçlanır Option activation_bytes not found. Bunun aaxyerine Audible'dan aabir kitap indirmek için kitap indirmek için görünümdeki "Ses Kalitesi" açılır menüsünden "Geliştirilmiş" i seçin.

aaxdosyalar şifrelenir mp4/ m4a/ m4bdosyalar, böylece ffmpegyukarıdaki komut sesi yeniden kodlamaz ve bölümler gibi meta verileri korur. mp4,, m4ave m4bMPEG-4 Bölüm 14 kapsayıcı biçimi için alternatif dosya adı uzantılarıdır. m4aVe m4buzantıları aslen Apple tarafından tanıtıldı. m4aVe m4buzantıları arasındaki bir fark , iTunes'daki önceki oynatma konumunu hatırlama seçeneğinin, m4buzantıya sahip dosyalar için varsayılan olarak etkinleştirilmiş, ancak uzantıya sahip dosyalar için etkinleştirilmemesidir m4a. iTunes ayrıca m4bvarsayılan olarak sesli kitapların altında uzantıya sahip dosyaları görüntüler .

İTunes'un eski sürümlerinde, önceki çalma konumunu hatırlamayı etkinleştirmek için onay kutusu yoktu, ancak bir m4buzantıya sahip dosyalar için önceki çalma konumunu hatırlamak her zaman etkinleştirildi , bu nedenle Wikipedia bile yanlış bir şekilde "bir .m4ases dosyasının" yer imi ekleyemediğini "( son dinleme noktası), .m4buzantı dosyaları olabilir. " (Yine de iTunes'un eski sürümleri gibi davranan başka medya oynatıcıları olup olmadığını bilmememe rağmen.)

m4bUzantı için UTI com.apple.protected-mpeg-4-audiove Finder, uzantıya m4bsahip tüm dosyaların m4bkopya korumasına sahip olmamasına rağmen , tüm dosyaların türünü "korumalı MPEG-4 ses" olarak gösterir .


Ben kullanıyorum .aaxdosya ve hata alıyorum: Unrecognized option 'activation_bytes'.. Herhangi bir fikir? Audible geçen yıl biçimini değiştirdi mi?
lollercoaster

3
Dönüştürmek *.m4ave sonra yeniden adlandırmak için herhangi bir neden *.m4b? Neden sadece yapın: ffmpeg -activation_bytes youractivationkey -i input.aax -vn -c:a copy output.m4b?
Li Wang

1
@LiWang Eski ffmpeg sürümlerinde bir hatayla sonuçlandı, ancak artık böyle görünmüyor.
nisetama

@ user4669748 Anlıyorum. Onay için teşekkürler!
Li Wang

Python'u çalıştırmak için bu komutu kullanmak zorunda kaldım, ama bundan sonra mükemmel oldu! ln -sf /usr/bin/python2.7 / usr / local / bin / python2
Sethmr

7

Bu size etkinleştirme sırrınızı verecektir:

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


1
Bu betiği gerçek dönüşümü yapmak için kullandım . Eğer yüklemek zorunda dikkati çekiyor da öyle seleniumve requestsüzeri pipveya easy_installayrıca içine indirmek ve özü chromedriver audible-activatorişe bunun için dizine. Bu bilgiler verilmiştir audible-activator:) bireyin README ama ön bilmek yararlıdır
intuited

Teşekkürler, @intuited; bu senaryo altın. Macos üzerinde GNU grep ( ggrepyüklü brew install grep) kullanmak için hafif ayar gerekiyordu , ancak bundan sonra harika bir iş çıkardı.
ecmanaut

6

User4669748'in cevabını denedim ve dikkat çekmeye değer birkaç şeyle karşılaştım ve benim için işe yarayacak bir düzeltme keşfettim:

  1. audible-activator.py, Python 2.7 gerektirir; Python 3 ile başarısız oluyor.
  2. Başladıktan sonra, Chrome penceresi ekranda açılır ve GUI etkinliğini ve Audible'da başarılı bir giriş görmeye başlarsınız.
  3. Girişten kısa bir süre sonra, tarayıcı etkinliği askıda gibi görünüyor ve Waiting for px.owneriq.netsürekli olarak alt durum çubuğunda görüntüleniyor.
  4. 5 dakika sonra bir TimeoutException vardı:

    [*] 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)
    

Bu noktada sıkışmıştım. Ancak, bunun px.owneriq.netbir tür reklam veya izleme sitesi olduğunu düşünerek, /etc/hostsgeçersiz bir IP adresi ekleyerek "geçici olarak devre dışı bırakmaya" çalıştım , ör.

0.0.0.0 px.owneriq.net

(Bu, bir arkadaş tarafından tarayıcıda reklamları durdurmak için önerilen bir taktikti.)

Bu eklemeden sonra /etc/hostsprogramı yeniden çalıştırın. 30 saniyede tamamlandı.

Ekrana 4 baytlık bir etkinleştirme anahtarı yazdırıldı ve user4669748'in cevabında açıklandığı gibi ffmpeg ile mükemmel çalıştı.

Daha sonra /etc/hostsorijinal içeriğine geri döndüm .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.