2009-09-10 27 views
17

¿Hay alguna manera de recortar automáticamente un MP3 cargado en un sitio web a 30 segundos (o alguna otra longitud) en PHP? De lo contrario, ¿hay algún buen servicio de terceros que pueda integrarse (de forma transparente para el usuario) para lograr el mismo efecto?Recortando automáticamente un mp3 en PHP

Gracias.

Respuesta

19

Puede probar el MP3 Class en PHPClasses. Cuenta con el siguiente ejemplo:

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

En este caso, el 'marco' puede estar sustituido con 'segunda' basar el corte en un marco de tiempo.

2

En Debian/Ubuntu intente instalar mpgtx:

apt-get install mpgtx 

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

Estoy seguro de que encontrará mpgtx disponible en otras distribuciones de Linux demasiado finas, o simplemente instalar desde el código fuente.

2

Tuve problemas para procesar algunos mp3 con MP3 Class y mpgtx. La mejor opción aquí es ffmpeg, creo. This page tiene algunos buenos ejemplos sobre la división de archivos multimedia con ffmpeg.

3

Armado un script que genera un clip de 30 segundos de un archivo MP3 sobre la marcha. Si está buscando guardar el archivo, una de las otras opciones usando una clase/biblioteca será probablemente la mejor. Pero, si solo quieres reproducir/descargar la vista previa, sobre la marcha podría ser mejor. Definitivamente le ahorrará espacio en el disco duro.

Échale un vistazo al http://www.stephenwalcher.com/2013/06/17/how-to-extract-and-play-part-of-an-mp3-in-php/.

Aquí está el código, pero una explicación más profunda se puede encontrar en mi 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

I Don'y sé si algo ha cambiado en el lib getID3 o 'a es un error en su código: no hay elemento de longitud en la matriz id3_info. Debería ser playtime_string. – latata

+0

El enlace está roto por cierto. –

+0

Se corrigió el enlace. Debería ser bueno ir ahora. –

0

He usado PHP MP3 para mi proyecto.

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

Para su caso se puede usar extract(0,30) o extract(30,60).

+0

Al igual que este es un buen script, sabré que está disponible bajo la LGPL, que no creo que sea tan flexible como otras licencias. – Antony

+0

@Antony, LGPL es bastante flexible y, a menos que cambie algo en la biblioteca, no necesita hacer nada especial, excepto distribuir el archivo de texto de licencia con el paquete. Y también puedes usarlo en proyectos comerciales. –

0

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

PHP-MP3 es una simple biblioteca para leer y manipular audio MPEG (MP3).

Instalar:

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! 

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