所以我有一个应用程序需要上传的歌曲并允许用户购买它。我还想创建一个用户可以预览的 30 秒剪辑,但我希望应用程序基于原始 mp3 创建 30 秒的 mp3 文件,而不是让用户上传两个文件。我找到了我正在使用的这个库,就像这样
$oSplit=new CMP3Split(DIR_DOWNLOAD ."Made_To_Love.mp3",243,DIR_DOWNLOAD ."clips/{$rndString}.mp3",30,0);
但它似乎并不总是产生 30 秒的剪辑
我还发现了这个问题,它正在使用FFMPEG,我不知道如何在PHP设置中使用。
任何想法或建议
该库基本上是无用的:它实际上甚至不会读取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 这样的东西来做切碎。
从命令行尝试 ffmpeg 解决方案,如果让它工作,只需在 PHP 中的命令行中调用它即可。 shell_exec()
可以做到这一点。如果允许用户指定文件名,则需要转义 shell 参数。
由于这需要一点时间,因此考虑将这项工作传递给像 gearman 这样的队列系统可能是明智的。