опубликовано по просьбе замечательного пользователя Котопес
Фон:
В настоящее время вряд ли можно найти программиста, который не умеет делать скриншоты с помощью mencoder и использовать их в качестве превью видеофайла.Однако подобных решений для аудиофайлов я пока не встречал, и понятно почему: здесь, как правило, можно либо передать файл целиком, либо полностью сжать его в удобоваримый формат с помощью консольных конвертеров.
И всё бы ничего, но когда у тебя средняя длина трека 6 минут, то волей-неволей думаешь о том, как его обрезать, тем самым уменьшив размер превью на жёстком диске и облегчив прослушивание пользователю.
к материалу.
Когда-то я использовал для этого набор POC-утилит; они работали только с мп3 и умели быстро рассчитать длину и вовремя вырезать/склеить.
Потом я быстренько написал обертку вокруг этого безобразия и на время забыл о нем.
Однако настали новые времена и люди стали скачивать музыку в форматах flac, Monkey Audio и других форматах без потерь.
Да и сам мп3 со временем изменился и в него часто стали добавлять альбомные картинки, что стало большой проблемой и причиной частых сегфолтов POC.
Именно тогда я решил написать приложение, которое бы включало в себя весь набор POC-утилит для резки и склейки и, кроме того, имело бы кодировщик для mp3.
А теперь о том, что произошло:
перекодированный — консольная утилита для Linux/*BSD/Mac OS, использующая libav(ffmpeg) для декодирования/вырезания/кодирования аудиофайлов.Прекрасно интегрируется в любые конверсионные скрипты: вам просто нужно подать файл на резку и указать, куда положить готовый превью.
За счет использования libav достигается поддержка практически всех распространенных аудиоформатов (mp3, ogg, flac, ape, wav и других).
Нарезка осуществляется по следующему алгоритму:
- для файлов менее 2 минут - это полная конвертация.
- для файлов от 2 минут до 15 - деление на части по 30 секунд и запись в файл четных (при этом части равномерно распределяются по длине всего файла и время, которое остается после разделения на 30-секундные фрагменты, равно равномерно добавляются к промежуткам).
- для файлов длиннее 15 минут - только первые 2 минуты.
Где взять:
Бета-версия: myau.su/recoded-0.1.3.tgz СВНКО svn://myau.su/recoded/tags/0.1.3 перекодированный транк из svn: СВНКО svn://myau.su/recoded/trunk перекодированныйКак собрать:
Первое, что вам нужно сделать, это убедиться, что у вас есть libav (его желательно взять из svn проекта ffmpeg, так как в дистрибутивах он обычно довольно старый и архитектура библиотеки с тех пор изменилась).
Небольшая рекомендация по сборке ffmpeg и libav: .
/configure --prefix=/usr --enable-shared --enable-static --enable-libmp3lame --enable-nonfree --enable-gpl
Это, с одной стороны, позволит включить несвободные и gpl компоненты (!sic, после чего библиотека станет нераспространяемой) и разрешить сборку с lame, которая нужна для кодирования mp3.
Далее можно переходить к сборке самого приложения (для *nix систем понадобится cmake, для mac os — xcode)
Для MacOS:
откройте файл проекта в корне и нажмите cmd+b.
Для *nix-систем: cmake .
make
В результате вы получите тот перекодированный бинарник, который нам нужен.
Параметры командной строки и коды выхода:
Параметры командной строки:- -f - из какого файла
- -t - в какой файл
- -v — некоторые подробности о декодируемом файле
- 0 – завершено успешно
- 1 - невозможно открыть файл
- 2 - файл не может быть декодирован
- 3 - невозможно создать выходной файл
- 4 – зарезервировано для ошибки повторной выборки
- 5 - невозможно закрыть файл для вывода
Использование:
Например, вы можете сделать это так: .
/recoded -f input_file.ogg -t out.mp3 -v
В качестве вывода вы получите некоторую информацию о потоке (если он есть) и код выхода:
Front ring size: 38393856
Samples decoded: 19196928
Samples bytesize: 76787712
Channels: 2
Codec name: MP3 (MPEG audio layer 3)
Sample format: 1
Sample rate: 44100
На входе может быть любой аудио (видео+аудио) файл, файл может вообще не иметь расширения (формат подбирается библиотекой libav на основе заголовков и содержимого) Выходной сигнал всегда mp3 44100, объединенный стерео, 96 кбит/с.
(независимо от того, какая была частота дискретизации и битрейт, это сделано потому, что mp3 во флеше избирательно относится к еде)
Примечания и комментарии автора:
Это первый релиз, даже не бета и не альфа, а скорее предварительный релиз.Размещено исключительно для ускорения разработки.
Так что если у кого-то есть идеи или желание покопаться в коде — милости просим.
Теги: #mp3 #ffmpeg #Разработка сайтов
-
Telehouse Caravan: Хостинг Для Богатых
19 Oct, 24 -
Обзор Ноутбука Alienware M11X
19 Oct, 24 -
«Сделай Меня Красивой!» Выпуск №29
19 Oct, 24 -
Выпуск Pypy 1.3
19 Oct, 24 -
Камунда: Модели Процессов Тестирования
19 Oct, 24 -
Тесты Должны Писаться Разработчиками (?)
19 Oct, 24