19

有没有办法在 PHP 中自动将上传到网站的 MP3 修剪为 30 秒(或其他长度)?如果没有,是否有任何好的第三方服务可以集成(对用户透明)以达到相同的效果?

谢谢。

4

7 回答 7

21

您可以尝试 PHPClasses 上的MP3 类。它具有以下示例:

require_once './class.mp3.php';
$mp3 = new mp3;
$mp3->cut_mp3('input.mp3', 'output.mp3', 0, -1, 'frame', false);

在这种情况下,可以将“帧”替换为“秒”,以根据时间帧进行剪辑。

于 2009-09-10T12:30:07.300 回答
3

我编写了一个脚本,可以即时输出一个 30 秒的 MP3 文件剪辑。如果您要保存文件,使用类/库的其他选项之一可能是最好的。但是,如果您只想播放/下载预览,动态可能会更好。它肯定会为您节省硬盘空间。

http://www.stephenwalcher.com/2013/06/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;
于 2012-01-17T19:51:27.807 回答
3

我在我的项目中使用了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)

于 2016-12-04T08:07:33.690 回答
2

在 Debian/ubuntu 中尝试安装mpgtx

apt-get install mpgtx

mptsplit input.mp3 [00:00:00-00:00:30] -o output.mp3

我相信你也会在其他优秀的 Linux 发行版中找到 mpgtx,或者只是从源代码安装。

于 2009-09-10T12:30:57.697 回答
2

我在处理一些带有 MP3 Class 和 mpgtx 的 mp3 时遇到了问题。我认为这里最好的选择是 ffmpeg。这个页面有一些关于使用 ffmpeg 分割媒体文件的好例子。

于 2011-10-18T05:18:40.407 回答
0

https://github.com/falahati/PHP-MP3

PHP-MP3 是一个用于读取和处理 MPEG 音频 (MP3) 的简单库。

安装:

composer require falahati/php-mp3:dev-master

剪切 MPEG 音频:

\falahati\PHPMP3\MpegAudio::fromFile("old.mp3")->trim(10, 30)-saveFile("new.mp3");
于 2017-09-18T10:25:41.050 回答
0
//Merge two files
 $path = 'path.mp3';
 $path1 = 'path1.mp3';
 $mp3 = new PHPMP3($path);

 $newpath = 'path.mp3';
$mp3->striptags();

$mp3_1 = new PHPMP3($path1);
$mp3->mergeBehind($mp3_1);
  $mp3->striptags();

 $mp3->setIdv3_2('01','Track Title','Artist','Album','Year','Genre','Comments','Composer','OrigArtist','Copyright','url','encodedBy');

$mp3->save($newpath);

//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 the exact length of time
$path = 'path.mp3';
$mp3 = new PHPMP3($path);
$mp3->setFileInfoExact();
echo $mp3->time;
//note that this is the exact length!

来源:https ://github.com/thegallagher/PHP-MP3/blob/master/README.md

于 2018-03-09T07:26:05.130 回答