代码之家  ›  专栏  ›  技术社区  ›  Meep3D

在PHP中自动剪裁MP3

  •  18
  • Meep3D  · 技术社区  · 15 年前

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

    谢谢。

    7 回复  |  直到 6 年前
        1
  •  20
  •   Sampson    15 年前

    你可以试试 MP3 Class 关于PHP类。它具有以下示例:

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

    在这种情况下,“帧”可以替换为“秒”,以使切割基于时间帧。

        2
  •  3
  •   Stephen Walcher    6 年前

    我编写了一个脚本,可以实时输出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;
    
        3
  •  2
  •   Paul Dixon    15 年前

    在debian/ubuntu中尝试安装 mpgtx :

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

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

        4
  •  2
  •   Vincent    13 年前

    我在处理MP3类和MPGTX的MP3时遇到问题。我认为最好的选择是ffmpeg。 This page 在使用ffmpeg拆分媒体文件方面有一些很好的例子。

        5
  •  1
  •   Poohspear    8 年前

    我用过 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) .

        6
  •  0
  •   Soroush Falahati    7 年前

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

    php-mp3是一个简单的库,用于读取和操作mpeg音频 (MP3)。

    安装:

    composer require falahati/php-mp3
    

    切割MPEG音频:

    \falahati\PHPMP3\MpegAudio::fromFile("old.mp3")->trim(10, 30)-saveFile("new.mp3");
    
        7
  •  0
  •   Pooja Khatri    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

    推荐文章