Есть ли способ автоматически обрезать MP3, загруженный на веб-сайт, до 30 секунд (или некоторой другой длины) в PHP? Если нет, есть ли хорошие сторонние сервисы, которые могут быть интегрированы (прозрачно для пользователя) для достижения такого же эффекта?
Благодарю.
Вы можете попробовать класс MP3 на PHPClasses. Он имеет следующий пример:
require_once './class.mp3.php'; $mp3 = new mp3; $mp3->cut_mp3('input.mp3', 'output.mp3', 0, -1, 'frame', false);
В этом случае «кадр» может быть заменен на «второй», чтобы основывать разрез на временном кадре.
Я собрал сценарий, который выдает 30-секундный клип MP3-файла на лету. Если вы хотите сохранить файл, один из других вариантов с использованием класса / библиотеки, вероятно, будет лучшим. Но, если вы просто хотите играть / загружать предварительный просмотр, на лету может быть лучше. Это, безусловно, будет экономить ваше место на жестком диске.
Проверьте это на http://www.stephenwalcher.com/blog/2012/01/17/how-to-extract-and-play-part-of-an-mp3-in-php/ .
Вот код, но более глубокое объяснение можно найти в моем блоге.
$getID3 = new getID3(); $id3_info = $getID3->analyze($filename); list($t_min, $t_sec) = explode(':', $id3_info['playtime_string']); $time = ($t_min * 60) + $t_sec; $preview = $time / 30; // Preview time of 30 seconds $handle = fopen($filename, 'r'); $content = fread($handle, filesize($filename)); $length = strlen($content); if (!$session->IsLoggedIn()) { $length = round(strlen($content) / $preview); $content = substr($content, $length / 3 /* Start extraction ~10 seconds in */, $length); } header("Content-Type: {$id3_info['mime_type']}"); header("Content-Length: {$length}"); print $content;
В Debian / ubuntu попробуйте установить mpgtx :
apt-get install mpgtx mptsplit input.mp3 [00:00:00-00:00:30] -o output.mp3
Я уверен, что вы найдете mpgtx в других прекрасных дистрибутивах Linux или просто установите из источника.
У меня возникли проблемы с обработкой некоторых mp3-файлов с помощью MP3-класса и mpgtx. Думаю, лучший вариант здесь – ffmpeg. На этой странице есть несколько хороших примеров для разделения медиафайлов с помощью ffmpeg.
Я использовал PHP MP3 для своего проекта.
<?php //Extract 30 seconds starting after 10 seconds. $path = 'path.mp3'; $mp3 = new PHPMP3($path); $mp3_1 = $mp3->extract(10,30); $mp3_1->save('newpath.mp3'); ?>
Для вашего случая вы можете использовать extract(0,30)
или extract(30,60)
.
https://github.com/falahati/PHP-MP3
PHP-MP3 – простая библиотека для чтения и управления аудио MPEG (MP3).
Установка:
composer require falahati/php-mp3
Вырезать MPEG Audio:
\falahati\PHPMP3\MpegAudio::fromFile("old.mp3")->trim(10, 30)-saveFile("new.mp3");