публикуется по просьбе замечательного юзернэйма catdog
Вряд ли сейчас можно найти программера который не знает как наснимать скриншотов с помощью mencoder-а и использовать их в качестве превью для видео файла. Однако подобных решений для аудиофайлов я пока не видел, оно и понятно почему: здесь как правило можно или отдавать файл полностью или пережимать консольными конверторами в удобоваримый формат полностью.
И все бы хорошо, но когда у тебя средняя длинна трэка 6 минут, то волей неволей задумываешься как бы сделать нарезку, сократив тем самым размер превьюшек на жестком диске и облегчив задачу в прослушивании материала пользователю. Когда-то давно для этого я использовал набор утилиток POC, они работали только с mp3 и умели быстро считать длинну, резать/склеивать по времени. Тогда я быстренько написал враппер вокруг этого безобразия и на какое-то время забыл об этом.
Однако пришли новые времена и народ начала закачивать музыку во flac-е, monkey audio и других lossless форматах. Да и сам mp3 со временем видоизменился и в него частенько начали добавлять альбомные картинки, что стало большой проблемой и причиной частых сегфолтов POC.
Именно тогда я решил написать приложение которое бы вбирало в себя весь комплект утилиток POC по нарезке склейки и плюс к этому имело бы encoder для mp3.
recoded — консольная утилита для Linux/*BSD/Mac OS использующая libav(ffmpeg) для декодирования/нарезки/кодирования аудиофайлов. Отлично интегрируется в любые скрипты для конвертирования:
вам только надо скормить файл для нарезки и сказать куда положить готовую превьюшку.
За счет использования libav достигается поддержка почти всех аудио форматов которые имеют распространение(mp3,ogg,flac,ape,wav и другие).
Нарезка осуществляется по следующему алгоритму:
Бета релиз:
myau.su/recoded-0.1.3.tgz
svn co svn://myau.su/recoded/tags/0.1.3 recoded
trunk из svn:
svn co svn://myau.su/recoded/trunk recoded
Первое что надо сделать это удостовериться что у вас есть libav(желательно брать ее из svn-а проекта ffmpeg, ввиду того что в дистрибьютивах она как правило достаточно старая и архитектура библиотеки с тех пор поменялась).
Маленькая рекомендация по сборке ffmpeg и libav:
Это с одной стороны включит nonfree и gpl компоненты(!sic после чего библиотека станет нераспространяемой) и разрешит сборку с lame-ом который нужен для кодирования mp3.
Далее можно перейти к сборке самого приложения(под *nix системами понадобиться cmake, под mac os — xcode)
Для mac os:
открываете проектный файл в корне и жмете cmd+b.
Для *nix систем:
В результате получите бинарь recoded который нам и нужен.
Опции командной строки:
Exit коды:
К примеру это можно делать так:
В качестве вывода вы получите немного информации о потоке(если он есть) и exit-код:
На входе может быть любой аудио(видео+аудио) файл, файл может быть без расширения вообще(формат угадывается библиотекой libav по заголовкам и содержимому)
На выходе получается всегда mp3 44100, joined stereo, 96kbps. (вне зависимости от того какой был sample rate и битрэйт, сделано так потому что мп3 во флеше избирателен к пище)
Это первый релиз, даже не бета и не альфа, что-то еще дорелизное скорее. Выкладывается исключительно с целью ускорить разработку. Так что если у кого-то есть идеи или желание покопаться в коде то милости просим.
Предыстория:
Вряд ли сейчас можно найти программера который не знает как наснимать скриншотов с помощью mencoder-а и использовать их в качестве превью для видео файла. Однако подобных решений для аудиофайлов я пока не видел, оно и понятно почему: здесь как правило можно или отдавать файл полностью или пережимать консольными конверторами в удобоваримый формат полностью.
И все бы хорошо, но когда у тебя средняя длинна трэка 6 минут, то волей неволей задумываешься как бы сделать нарезку, сократив тем самым размер превьюшек на жестком диске и облегчив задачу в прослушивании материала пользователю. Когда-то давно для этого я использовал набор утилиток POC, они работали только с mp3 и умели быстро считать длинну, резать/склеивать по времени. Тогда я быстренько написал враппер вокруг этого безобразия и на какое-то время забыл об этом.
Однако пришли новые времена и народ начала закачивать музыку во flac-е, monkey audio и других lossless форматах. Да и сам mp3 со временем видоизменился и в него частенько начали добавлять альбомные картинки, что стало большой проблемой и причиной частых сегфолтов POC.
Именно тогда я решил написать приложение которое бы вбирало в себя весь комплект утилиток POC по нарезке склейки и плюс к этому имело бы encoder для mp3.
А теперь о том что получилось:
recoded — консольная утилита для 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 co svn://myau.su/recoded/tags/0.1.3 recoded
trunk из svn:
svn co svn://myau.su/recoded/trunk recoded
Как собрать:
Первое что надо сделать это удостовериться что у вас есть libav(желательно брать ее из svn-а проекта ffmpeg, ввиду того что в дистрибьютивах она как правило достаточно старая и архитектура библиотеки с тех пор поменялась).
Маленькая рекомендация по сборке ffmpeg и libav:
./configure --prefix=/usr --enable-shared --enable-static --enable-libmp3lame --enable-nonfree --enable-gpl
Это с одной стороны включит nonfree и gpl компоненты(!sic после чего библиотека станет нераспространяемой) и разрешит сборку с lame-ом который нужен для кодирования mp3.
Далее можно перейти к сборке самого приложения(под *nix системами понадобиться cmake, под mac os — xcode)
Для mac os:
открываете проектный файл в корне и жмете cmd+b.
Для *nix систем:
cmake .
make
В результате получите бинарь recoded который нам и нужен.
Опции командной строки и exit-коды:
Опции командной строки:
- -f — из какого файла
- -t — в какой файл
- -v — немножко подробностей о декодируемом файле
Exit коды:
- 0 — успешно завершено
- 1 — невозможно открыть файл
- 2 — невозможно декодировать файл
- 3 — невозможно создать файл для вывода
- 4 — зарезервировано под ошибку пересемплирования
- 5 — невозможно закрыть файл для вывода
Использование:
К примеру это можно делать так:
./recoded -f input_file.ogg -t out.mp3 -v
В качестве вывода вы получите немного информации о потоке(если он есть) и exit-код:
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, joined stereo, 96kbps. (вне зависимости от того какой был sample rate и битрэйт, сделано так потому что мп3 во флеше избирателен к пище)
Замечания и комментарии автора:
Это первый релиз, даже не бета и не альфа, что-то еще дорелизное скорее. Выкладывается исключительно с целью ускорить разработку. Так что если у кого-то есть идеи или желание покопаться в коде то милости просим.