Представляю вам класс для работы с mp3. Данный класс преобразует mp3 файл в новый, изменяя битрейт и idv3-тэги.
Требования: (lame или ffmpeg), php5.3+.
Как работать:
require 'encoder.php';
//импортируем пакеты
use \encoder\encoder\Encoder;
use \encoder\encoder\ffmpeg\SimpleFFmpegEncoder;
use \encoder\encoder\lame\SimpleLameEncoder;
use \encoder\ID3\v1\simple\SimpleID3v1Copy;
use \encoder\ID3\v2\simple\SimpleID3v2Copy;
use \encoder\exception\FileNotFoundException;
use \encoder\exception\EmptyAttributeException;
use \encoder\exception\FileIsNotReadableException;
use \encoder\exception\FileIsNotWritableException;
//
try {
$t = new Encoder(new SimpleLameEncoder())
//выбираем енкодер, new SimpleLameEncoder() - lame|SimpleFfmpegEncoder() - ffmpeg
$t->setFile('/home/manyrus/tr283.mp3')
/выбираем файл, который будем перекодировать.
$t->setBitrate(320)
/устанавливаем битрейт для будущего файла
$t->setID3v1Copy(new SimpleID3v1Copy())
/устанавливаем класс, для работы с тегами версии 1, обязательно
$t->setID3v2Copy(new SimpleID3v2Copy())
/устанавливаем класс, для работы с тегами версии 2, обязательно
$t->setOutputFile('/home/manyrus/tr2833.mp3')
/выбираем файл, куда будет сохранять перекодированный файл
$t->exec()
/выполняем
} catch (FileNotFoundException $e) {//Дальше идут исключения, это исключение означает, что файл, который надо перекодировать, не существует или возникли ошибки при перекодировании(не хватает прав)
die($e->getMessage());
} catch (EmptyAttributeException $e) {//вы что-то не установили (битрейт, файл на выходе, и т.п.)
die($e->getMessage()."\n");
} catch(FileIsNotReadableException $e) {//файл, который надо перекодировать, нельзя прочитать(прав не хватает)
die($e->getMessage()."\n");
} catch(FileIsNotWritableException $e) {//нельзя создать/записать перекодированный файл(прав не хватает)
die($e->getMessage()."\n");
}
Класс копирует все теги из оригинального файла, но могут быть проблемы с id3v2.4 
Хех, обнаружил у себя ошибки. Сегодня/завтра исправлю. В данный момент не рекомендуется использовать его.
добавлено спустя 32 секунды:
Default_mo, да
Это просто оболчка. Но после перекодировки lame не копирует тэги
.
Нашёл я нормальный редактор тегов v3.2.*, буду по тихоньку портировать, т.к. фичи не устраивают. В будущей версии будет редактор тего версии 1 и 2 
Default_mo, слишком большой. Не понравился мне.
добавлено спустя 21 часов 1 минуту:
Вообщем, вроде додумался как организовать копировальщик тегов. Сегодня попытаюсь выложить, может даже с поддержкой ffmpeg. Только не будет добавки в теги префиксы, т.к. скрипт будет очень много весить(сколько в v2 фреймов
)
добавлено спустя 17 минут:
Есть, сработала моя теория
Скоро будет класс...
добавлено спустя 2 часа:
Завтра утром выложу класс, т.к. нужно ещё время для того, чтобы добавить поддержку тегов первой версии + обдумать архитектуру.
добавлено спустя 22 часов 45 минут:
Обновил версию, читайте первый пост.
Спасибо, надо будет попробовать.
Как с нагрузкой на сервер? Я так понял должна быть досупна exec()?
Belyj, должна быть доступна exec(). На нагрузку не смотрел, но копирование тегов сильно не грузит серв, а кодирование зависит от сервера.
25 Май 2011, 20:42