Главная » 2012 » Октябрь » 22 » 2push
08:50

2push





Преамбула:

Давным-давно, используя Windows в качестве операционной системы, для прослушивания музыки я использовал замечательный плеер Foobar. соответственно когда вставал вопрос конвертирования музыки для прослушивания на мобильном телефоне (флеш-память была дорогая и её всегда было мало), то конвертирование производилось всё тем же плеером Foobar, благо он много чего умеет. так вот, вдоволь наигравшись с форматами и битрейтами я остановил свой выбор на AAC+. на 33 кбит/сек размер файла mp4 в 9-10 раз меньше чем исходный mp3 при незначительном ухудшении звука. понятно что перегон из одного формата lossy compression в другой с совершенно разными психоаккустическими моделями не есть хорошо, но для бытового применения, учитывая несовершенство аппаратуры воспроизведения (динамик телефона или наушники за 20 баксов - это вам не одномодовый аккустический кабель :)) - сойдёт.

Так вот, пересев на Linux и проигрыватель Quod Libet конвертирование было консольно возложено на ffmpeg. на выходе я имел всё те же mp4 c AAC+, но почему-то значительно худшего качества. и несколько часов затылкочесания и маночтения ушло бесследно на осознание простейшего факта - дело не в музыкальном формате, а в самом кодеке.

Foobar для конвертирования использовал Nero AAC Codec - именно в нём и была вся фишка. Nero AAC Codec - это авторская проприетарная реализация кодека AAC+ специально заточенная под сверхнизкие битрейты. на 33 кбит/сек Nero AAC Codec выдаёт такое же звучание, как libfaac (~$ffmpeg -acodec libfaac) на 128 кбит/сек. проприетарные стандарты - это плохо, существенно меньшие размеры файла - это хорошо. у меня победила практичность :)

Подготовительные телодвижения:

- скачать Nero AAC Codec, закинуть файл neroAacEnc в любую папку $PATH. можно ещё исполняемый бит ему выставить на всякий случай

- установить lame (~$sudo apt-get install lame) - он понадобиться для промежуточного перекодирования: Nero AAC Codec принимает на вход WAV - создавать временные файлы некомильфо, а к stdout ffmpeg он цепляться почему-то не захотел

Возможности скрипта:

- входные форматы кодеков (зависит от lame): MP3, WMA, RealAudio, Vorbis, Musepack, AC3, APE, FLAC, ALAC, SHN, WV (контейнеры AVI, ASF, QuickTime, Ogg, OGM, Matroska, MPEG-21, NUT, FLV и др.)

- выходной формат: AAC+ в контейнере MP4 (пресет -q 0.15 что соответствует 33 кбит/сек)

- рекурсивное обход заданного каталога с подкаталогами: новые файлы помещаются в автоматически создаваемый подкаталог с именем родителя (файл /unknown artist/unknown album/track1.mp3 конвертируется в /unknown artist/unknown album/unknown album/track1.mp4)

- проверка на уже имеющиеся конвертированные файлы MP4: в случае обнаружения конвертированных файлов они не будут перезатёрты, таким образом удобно время от время прогонять скрипт по всей коллекции музыки - конвертироваться будут только новые файлы

Собственно исходники Perl:


#!/usr/bin/perl
use strict;

my $HELP = "----------------------------------------------------------------------
Script: Convert music files using lame & neroAacEnc from catalog (with subcatalogs)
----------------------------------------------------------------------
Copyrights: Mikhail (2push.me) 2010
----------------------------------------------------------------------
Arguments:
catalog - catalog to proceed
file mask - like \"wav|ogg|mp3\" [mp3]
----------------------------------------------------------------------\n";
die $HELP if scalar(@ARGV)

Просмотров: 338 | Добавил: pubseneing | Рейтинг: 0.0/0
Всего комментариев: 0
Мини-чат
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Поиск
Календарь
«  Октябрь 2012  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
293031
Архив записей
Друзья сайта