IPod के लिए एमपी 3 ऑडियोबुक से m4b बनाएं

मैं सिर्फ एक दिन एक ऑडियोबुक सुनना चाहता था, समस्या यह है कि मैं इसे ipod पर सुनना चाहता था, लेकिन मैं इसे m4b प्रारूप में कहीं भी नहीं ढूँढ सकता था, केवल एमपी 3।

एक लंबी गुगली के बाद, यह कैसे करना है, लेकिन एक सामान्य कार्यान्वयन के बिना विचारों के साथ एक पोस्ट पाया गया। मैं इस पोस्ट के लेखक के साथ अपने विचारों और निर्णयों को साझा करने में कामयाब रहा, लेकिन उन्होंने कुछ समय बाद, उन्हें किसी कारण से रगड़ दिया।

लब्बोलुआब यह है कि .m4b mp4 कंटेनर में एक AAC फ़ाइल है, लेकिन बुकमार्क और नाम बदलकर। इसलिए, एएसी में सभी एमपी 3 को पछाड़ना और क्विकटाइम फॉर्मेट में एक चैप्टर फ़ाइल उत्पन्न करना आवश्यक है, और फिर पूरी चीज को एक mp4 कंटेनर में डाल दें।

लिनक्स के तहत, केवल 1 सामान्य एएसी एनकोडर है - नेरोएसेनकोडर । कोड बंद है, लेकिन यह मुफ़्त है और काम करता है।
Ffmpeg का विकल्प है, लेकिन यह बहुत कच्चा है।
एफएसी एनकोडर में भी अलैक एनकोडर \ डिकोडर है, लेकिन यह बिटरेट को बिल्कुल भी नियंत्रित नहीं करता है - 10 मीटर एमपी 100 एमबी राक्षस में बदल जाता है।

प्रारंभ में, इसे MP4Box का उपयोग करके कंटेनर में रटना करने की योजना बनाई गई थी, जो कि gpac पैकेज में शामिल है। और अध्याय फ़ाइल को टैग करने और संसाधित करने के लिए libmp4v2 का उपयोग करें (आपको बस ट्रंक-आर 355 स्नैपशॉट का उपयोग करना है, बहुत सारे बग फिक्स हैं, और स्थिर संस्करण अभी भी सही ढंग से काम नहीं करता है)।

और फिर यह पता चला कि MP4Box एक कंटेनर में भराई पर प्रतिबंध है - 20 फाइलें (क्यों और क्यों यह स्पष्ट नहीं है)। हां, और अध्याय फ़ाइल, इस दृष्टिकोण के साथ, आपको खुद को उत्पन्न करने की आवश्यकता है। परिणाम यह स्क्रिप्ट 140 लाइनों और कई समस्याओं के साथ थी।

थोड़ी देर बाद, एक बहुत अधिक इष्टतम समाधान पाया गया - एमपी 3 को wav में स्थानांतरित करने के लिए, और फिर उन सभी को थोक में NeroAacEnc के माध्यम से स्थानांतरित करने के लिए, जो जानता है कि अध्याय कैसे उत्पन्न करें और आने वाली फ़ाइलों की संख्या पर कोई प्रतिबंध नहीं है। टैग को एक लाइन पर NeroAacTag (वे बंडल में आते हैं) द्वारा व्यवस्थित किया जा सकता है, और एक राय है कि यह अधिक सही और सटीक होगा। सच है, यह शून्य बुकमार्क को क्विकटाइम बुकमार्क में बदलने के लिए mp4chaps (libmp4v2 से) का उपयोग समाप्त नहीं करता है।

UPD: यह बहुत स्पष्ट है, लेकिन फिर भी - फ़ाइलों का सही नाम \ नंबरिंग होना चाहिए ताकि `ls -1` उन्हें सही क्रम में प्रदर्शित करे। उदाहरण के लिए, 1..12 नहीं, बल्कि 01..12।
या, जैसा कि xn__p2a ने ठीक ही बताया, "ls -1v" (आउटपुट 1..12 के लिए) का उपयोग करें।

# FIELD SEPARATOR IFS=$'\n' # ALL MP3 TO WAV for i in `ls -1 *.mp3`; do mplayer -nocorrect-pts -vo null -vc null -ao pcm:fast:file="${i%%mp3}wav" "$i"; done # CONCATE ALL WAV TO MP4 WITH AUTOMATIC CREATION OF CHAPTER MARKS for i in `ls -1 *.wav`; do printf %s "-if \"$i\" ";done | xargs ../neroAacEnc -of OUT.mp4 # SET CORRECT TAGS ../neroAacTag -meta:title="MY_TITLE" -meta:artist="MY_AUTHOR" -add-cover:front:BOOK_COVER.jpg OUT.mp4 # CONVERT CHAPTERS FOR IPOD mp4chaps -convert --chapter-qt OUT.mp4 


बेशक, अब पेंच एएसी नहीं है, लेकिन विशाल लहराती है, जिसे बाद में मारने की आवश्यकता होगी, और फिफो के माध्यम से (जैसा कि यह पहली स्क्रिप्ट में था) किसी भी तरह अधिक सुरुचिपूर्ण है, लेकिन सब कुछ बहुत सरल हो गया है।

UPD: एक राय है कि एमपी से wav पाने के लिए mplayer का उपयोग करना ओवरकिल है।
कुछ विकल्प:
 ffmpeg -i input.mp3 output.wav mpg123 -w output.wav input.mp3 lame -decode input.mp3 output.wav 


नई m4b फ़ाइल में, अध्यायों के नाम 'अध्याय 01' के प्रकार के होंगे, लेकिन इसे बुकमार्क फ़ाइल को संपादित करके आसानी से तय किया जा सकता है:

 # EXPORT CHAPTERS TO MP4FILE.CHAPTERS.TXT mp4chaps -x test.mp4 # NOW YOU CAN MODIFY THEM AND IMPORT BACK mp4chaps -i test.mp4 


कैसे और कैसे संपादित करें - अपनी पसंद का।

gtkpod-1.0.0 और libgpod-0.8.0 ने 5 वीं पीढ़ी के आइपॉड नैनो का समर्थन करना सीखा है, इसलिए मैं उनका उपयोग करता हूं।

UPD: xn__p2a के साथ लंबे पत्राचार के बाद, स्क्रिप्ट का तीसरा संस्करण दिखाई दिया:
 #!/bin/bash # INPUT FIELD SEPARATOR IFS=$'\n' # JUST MORE CONVINIENT function mpfifo { mplayer -nocorrect-pts -vo null -vc null -ao pcm:fast:file="${1%%mp3}wav" "$1" &>"/dev/null" & } # NEED MORE FIFO!!111 for i in `ls -1v *.mp3`; do mkfifo "${i%%mp3}wav"; done # RUN NEROAACENC for i in `ls -1v *.mp3`; do printf %s " -if \""${i%%mp3}wav"\"";done | xargs ../../neroAacEnc -of test.mp4 & # RUN ALL MP3 for i in `ls -1v *.mp3`; do mpfifo "$i"; done # CONVERT CHAPTERS mp4chaps -convert --chapter-qt test.mp4 

इस विकल्प को अधिक सुरुचिपूर्ण के रूप में मान्यता प्राप्त है, क्योंकि आपको केवल 0B पंद्रहवाँ साफ़ करने की आवश्यकता है: ` Find -maxdepth 1 -type p -exec rm {}}

पुनश्च: यह अफ़सोस की बात है कि मैं mplayer के निकास उत्सर्जन को neroAacEnc इनपुट में लपेट नहीं सकता, ताकि वह उन्हें अलग फ़ाइलों के लिए ले जाए (अन्यथा कोई ऑटो-मार्किंग नहीं होगी)।
PPS: सिस्टमवाइड libmp4v2 ट्रंक 335 को स्थापित न करें - यह इस परिवाद के आधार पर 1 \ 2 चीजों को उड़ा देगा, और gtkpod भूल जाएगा कि m4a \ m4b फ़ाइलों को कैसे समझा जाए।
PPPS: आप अलग-अलग aac को अलग-अलग mp4 में लपेट सकते हैं और इसे m4a में बदल सकते हैं यदि आप ipod पर संगीत को खोना चाहते हैं।

Source: https://habr.com/ru/post/In111862/


All Articles