【问题标题】:Automatically trimming an mp3 in PHP在 PHP 中自动修剪 mp3
【发布时间】:2010-11-27 03:49:10
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: php upload mp3 trim


    【解决方案1】:

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

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

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

    【讨论】:

    • 更具体地说,$mp3->cut_mp3('input.mp3', 'output.mp3', 0, 30, 'second', false);
    【解决方案2】:

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

    【讨论】:

    • 尽管这是一个很好的脚本,但我知道它在 LGPL 下可用,我认为它不像其他许可证那样灵活。
    • @Antony,LGPL 非常灵活,除非您更改库本身的某些内容,否则您不需要做任何特别的事情,除了随包分发许可证文本文件。您也可以在商业项目中使用它。
    【解决方案3】:

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

    查看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;
    

    【讨论】:

    • 我不知道 getID3 库中是否发生了某些更改,或者它是您的代码中的错误:id3_info 数组中没有长度元素。应该是 playtime_string。
    • 顺便说一下链接坏了。
    【解决方案4】:

    在 Debian/ubuntu 中尝试安装 mpgtx:

    apt-get install mpgtx
    
    mptsplit input.mp3 [00:00:00-00:00:30] -o output.mp3
    

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:
        //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

        【讨论】:

          【解决方案7】:

          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");
          

          【讨论】:

            猜你喜欢
            • 2019-06-02
            • 2012-04-07
            • 1970-01-01
            • 1970-01-01
            • 2015-11-17
            • 1970-01-01
            • 2010-10-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多