Скорая Компьютерная Помощь г. Калуга

Полный спектр компьютерных услуг!

Здравствуйте, гость ( Вход | Регистрация )

> Внимание!

  • Вся информация, расположенная в данном и других разделах форума получена из открытых источников (интернет-ресурсы, средства массовой информации, печатные издания и т.п.) и/или добавлена самими пользователями. Администрация форума предоставляет его участникам площадку для общения / размещения файлов / статей и т.п. и не несет ответственности за содержание сообщений, а также за возможное нарушение авторских, смежных и каких-либо иных прав, которое может повлечь за собой информация, содержащаяся в сообщениях.
Ремонт компьютеров в калуге Рекламное место сдается
 
Ответить в эту темуОткрыть новую тему
Decker
сообщение 14.1.2011, 14:44
Сообщение #1


Администратор
*****

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1



Захотелось давеча прослушать аудиокнижку одну, проблема в том, что прослушать ее захотелось на ipod, а в m4b формате нигде найти не смог, только mp3.



После продолжительного гугления, был найден пост с идеями как это сделать, но без нормальной реализации. Своими идеями и решениями я успел поделиться с автором этого поста, но он их, спустя какое-то время, зачем-то потер.



Суть в том, что .m4b это файл AAC в контейнере mp4, но с закладками и переименованный. Следовательно, необходимо все mp3 перегнать в aac и сгенерировать файл закладок (chapters), в quicktime формате, после чего запихнуть все это дело в mp4 контейнер.



Под linux есть только 1 нормальный AAC encoder — NeroAacEncoder. Код закрыт, но он бесплатен и работает.

Альтернатива есть в ffmpeg, но она очень сырая.

Еще есть alac encoderdecoder, тоже в ffmpeg, но он вообще не контролирует битрейт — 10 метровый mp3 превращается в 100Мб монстра.



Изначально, запихивать в контейнер планировалось с помощью MP4Box, которая входит в пакет gpac. А libmp4v2 использовать для разметки тэгов и обработки chapters-файла (только надо обязательно использовать trunk-r355 snapshot, там много багфиксов, да и стабильная версия все равно не работает правильно).



Тут-то и выяснилось что MP4Box имеет ограничение на запихивание в один контейнер — 20 файлов (почему и зачем не понятно). Да и chapters-файл, с таким подходом, надо генерировать самому. Результатом стал этот скрипт на 140 строк и несколькими проблемами.



Чуть позже было найдено гораздо более оптимальное решение — mp3 перегонять в wav, а потом их перегонять всем скопом через NeroAacEnc, который умет сам генерировать chapters и не имеет ограничений на кол-во входящих файлов. Тэги можно расставить NeroAacTag (они в комплекте идут) одной строкой, и, есть мнение, что это будет более правильно и аккуратно. Правда это не избавляет от использования mp4chaps (из libmp4v2) для конвертации nero-закладок в quicktime-закладки.



# 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 (так было в первом скрипте) как-то элегантнее, но все стало намного проще.



В новоиспеченном 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 научились поддерживать ipod nano 5-го поколения, так что я пользую их.



PS: Жаль не получается завернуть выхлопы mplayer'а в инпут neroAacEnc, так что бы он их принимал за отдельные файлы (иначе авторазметки не будет).

PPS: не ставить systemwide libmp4v2 trunk 335 — слетит 12 вещей зависящих от этой либы, а gtkpod разучится понимать m4am4b файлы.

PPPS: Можно заворачивать отдельные aac в отдельные mp4 и переименовывать в m4a, если хочется loseless музыки на ipod.
Original source: habrahabr.ru (comments).

Читать дальше


--------------------

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Рекламное место сдается Рекламное место сдается
Текстовая версия Сейчас: 23.6.2025, 17:56
Рейтинг@Mail.ru
Яндекс.Метрика Яндекс цитирования