iPod用のMP3オーディオブックからM4Bを作成

今朝オーディオブックを聴きたかったのですが、問題はipodで聴きたいということですが、m4b形式ではどこにも見つからず、mp3だけでした。



長いグーグル検索の後、これを行う方法に関するアイデアを含む投稿が見つかりましたが、通常の実装はありません。 私は自分の考えや決定をこの投稿の著者と共有することができましたが、彼はしばらくして、何らかの理由でそれらをこすりました。



一番下の行は、.m4bはmp4コンテナー内のAACファイルですが、ブックマークが付けられ、名前が変更されていることです。 したがって、aacのすべてのmp3を追い越し、quicktime形式のチャプターファイルを生成してから、すべてをmp4コンテナーに入れる必要があります。



Linuxでは、通常のAACエンコーダーはNeroAacEncoderのみです。 コードは閉じられていますが、無料で動作します。

ffmpegに代わるものがありますが、非常に生です。

ffmpegにもalacエンコーダーとデコーダーがありますが、ビットレートはまったく制御されません-10メートルのmp3は100 MBのモンスターに変わります。



最初は、 gpacパッケージに含まれているMP4Boxを使用してコンテナに詰め込むことが計画されていました。 また、チャプターファイルのタグ付けと処理にlibmp4v2を使用します(trunk-r355スナップショット使用するだけで、多くのバグ修正があり、安定版はまだ正しく動作しません)。



そして、MP4Boxには1つのコンテナに詰め込むのに制限があることが判明しました-20個のファイル(理由と理由は不明です)。 はい。このアプローチでは、チャプターファイルを作成する必要があります。 その結果、このスクリプトには140行といくつかの問題がありました。



少し後で、mp3をwavに転送し、次にNeroAacEncを使用してまとめて転送することで、チャプターを生成する方法を知っており、着信ファイルの数に制限がない、はるかに最適なソリューションが見つかりました。 タグはNeroAacTag(バンドルされている)によって1行に配置できますが、これはより正確で正確になるとの意見があります。 確かに、これは、neroブックマークをquicktimeブックマークに変換するための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
      
      







もちろん、ネジはaacではなく、後で殺す必要がある巨大なwavであり、fifoを介して(最初のスクリプトのように)多少エレガントになりましたが、すべてがずっとシンプルになりました。



UPD: mplayerを使用してmp3からwavを取得するのはやり過ぎだという意見があります。

いくつかの選択肢:

 ffmpeg -i input.mp3 output.wav mpg123 -w output.wav input.mp3 lame -decode input.mp3 output.wav
      
      







新しく作成されたm4bファイルでは、チャプターの名前は「Chapter 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世代のipod nanoをサポートすることを学んだので、それらを使用します。



UPD: xn__p2aとの長い対応の後、スクリプトの3番目のバージョンが登場しました。

 #!/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 fifoをクリーニングするだけです: `find -maxdepth 1 -type p -exec rm {} +`



PS: mplayerの排出ガスをneroAacEncの入力にラップできないのは残念です。そうしないと、彼はそれらを別々のファイルに取り込んでしまいます(そうしないと、自動マーキングは行われません)。

PPS:システム全体のlibmp4v2トランク335をインストールしないでください -このlibに応じて1つから2つ飛び去り、gtkpodはm4a \ m4bファイルを理解する方法を忘れます。

PPPS:個々のaacを個別のmp4にラップし、ipodで音楽をロスレスにしたい場合はm4aに名前を変更できます。



All Articles