2009-09-10 19 views
17

Esistono modi per tagliare automaticamente un file MP3 caricato su un sito Web a 30 secondi (o qualche altra lunghezza) in PHP? In caso contrario, esistono buoni servizi di terze parti che potrebbero essere integrati (in modo trasparente per l'utente) per ottenere lo stesso effetto?Taglio automatico di un mp3 in PHP

Grazie.

risposta

19

Si potrebbe provare il MP3 Class su PHPClasses. Caratterizza il seguente esempio:

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

In questo caso, il 'telaio' può essere sostituito con 'secondo' basare il taglio su un arco di tempo.

2

In Debian/Ubuntu provare a installare mpgtx:

apt-get install mpgtx 

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

Sono sicuro che troverete mpgtx disponibili in altre distribuzioni Linux sottili troppo, o semplicemente installare dai sorgenti.

2

Ho avuto problemi nell'elaborare alcuni mp3 con MP3 Class e mpgtx. L'opzione migliore qui è ffmpeg credo. This page ha alcuni buoni esempi sulla divisione di file multimediali con ffmpeg.

3

Ho creato uno script che emette al volo una clip di 30 secondi di un file MP3. Se stai cercando di salvare il file, una delle altre opzioni che usa una classe/libreria sarà probabilmente la migliore. Ma se vuoi solo giocare/scaricare l'anteprima, al volo potrebbe essere meglio. Ti farà sicuramente risparmiare spazio sul disco rigido.

Verificare a http://www.stephenwalcher.com/2013/06/17/how-to-extract-and-play-part-of-an-mp3-in-php/.

Ecco il codice, ma una spiegazione più approfondita può essere trovata sul mio blog.

$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; 
+2

io don'y so se qualcosa è stato cambiato nel lib getID3 o 'un bug nel codice: non esiste un elemento di lunghezza nell'array id3_info. Dovrebbe essere playtime_string. – latata

+0

Il collegamento è interrotto a proposito. –

+0

risolto il collegamento. Dovrebbe essere buono per andare ora. –

0

Ho utilizzato PHP MP3 per il mio progetto.

<?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'); 
?> 

Per il vostro caso è possibile utilizzare extract(0,30) o extract(30,60).

+0

Per quanto buona sia la sceneggiatura, sarei consapevole che è disponibile sotto la LGPL che non credo sia flessibile come le altre licenze. – Antony

+0

@Antony, LGPL è abbastanza flessibile e, a meno che non si cambi qualcosa nella libreria stessa, non è necessario fare nulla di speciale tranne la distribuzione del file di testo della licenza con il pacchetto. E puoi usarlo anche in progetti commerciali. –

0

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

PHP-MP3 è una semplice libreria per la lettura e la manipolazione di audio MPEG (MP3).

Installare:

composer require falahati/php-mp3 

Cut MPEG Audio:

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

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