есть ли хорошая библиотека, которая разделит mp3 с php - PullRequest
0 голосов
/ 08 мая 2011

Итак, у меня есть приложение, которое загружает загруженную песню и позволяет пользователю приобрести ее.Я хотел бы также создать 30-секундный клип, который пользователь может предварительно просмотреть, но вместо того, чтобы пользователь загружал два файла, я хочу, чтобы приложение создавало 30-секундный mp3-файл на основе оригинального mp3.Я нашел эту библиотеку , которую я использую вот так

    $oSplit=new CMP3Split(DIR_DOWNLOAD ."Made_To_Love.mp3",243,DIR_DOWNLOAD ."clips/{$rndString}.mp3",30,0);

, но, кажется, она не всегда производит 30-секундный клип

, и я также нашел это Вопрос , который использует ffmpeg, который я не знаю, как использовать в настройках PHP.

Любые идеи или предложения

Ответы [ 2 ]

1 голос
/ 08 мая 2011

Эта библиотека в основном бесполезна: она даже не читает битрейт MP3, чтобы выяснить, сколько файла выводить.

Взгляните на это: http://www.sourcerally.net/Scripts/20-PHP-MP3-Class

Этот класс должен быть в состоянии извлечь что-то вроде этого:

  header('Content-type: audio/mp3');
  header('Content-disposition: attachment; filename="preview.mp3"');
  header('Cache-Control: no-cache');
  include_once('mp3.php');
  $path = '<filename to path>';
  $mp3 = new mp3($path);
  $mp3_1 = $mp3->extract(0,30);
  header('Content-length: ' . sizeof($mp3_1->str));
  echo $mp3_1->str;

Вы можете ожидать, что он будет медленным и потреблять много памяти: вам, вероятно, лучше использовать что-то вроде ffmpeg для выполнения отбивной.

0 голосов
/ 08 мая 2011

Попробуйте решение ffmpeg из командной строки, если оно работает, просто вызовите его из командной строки из PHP. shell_exec() может сделать это. Если вы разрешаете пользователю указывать имя файла, вам нужно экранировать аргументы оболочки.

Поскольку это займет некоторое время, может быть, стоит подумать о передаче этой работы системе очередей, подобной механизму.

...