Aparando automaticamente um mp3 em php
Pergunta
Existem maneiras de aparar automaticamente um MP3 enviado para um site para 30 segundos (ou algum outro comprimento) no PHP? Caso contrário, existem bons serviços de terceiros que podem ser integrados (transparentemente ao usuário) para obter o mesmo efeito?
Obrigado.
Solução
Você poderia tentar o MP3 Class em phpclasses. Possui o seguinte exemplo:
require_once './class.mp3.php';
$mp3 = new mp3;
$mp3->cut_mp3('input.mp3', 'output.mp3', 0, -1, 'frame', false);
Nesse caso, o 'quadro' pode ser substituído por 'segundo' para basear o corte em um período de tempo.
Outras dicas
Reuni um script que gera um clipe de 30 segundos de um arquivo MP3 em tempo real. Se você deseja salvar o arquivo, uma das outras opções usando uma classe/biblioteca provavelmente será melhor. Mas, se você deseja apenas reproduzir/baixar a visualização, pode ser melhor. Definitivamente salvará o espaço do disco rígido.
Confira em http://www.stephenwalcher.com/2013/06/17/how-to-extract-and-play-part-of-an-mp3-in-php/.
Aqui está o código, mas uma explicação mais profunda pode ser encontrada no meu 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;
Em Debian/Ubuntu, tente instalar mpgtx:
apt-get install mpgtx
mptsplit input.mp3 [00:00:00-00:00:30] -o output.mp3
Tenho certeza de que você encontrará o MPGTX disponível em outras distritos finos do Linux ou apenas instalará a partir da fonte.
Eu tive problemas para processar alguns MP3s com a classe MP3 e o MPGTX. A melhor opção aqui é o FFMPEG, eu acho. Esta página Tem alguns bons exemplos sobre a divisão de arquivos de mídia com o FFMPEG.
I used PHP MP3 for my project.
<?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');
?>
For your case you can use extract(0,30)
or extract(30,60)
.
//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!
source : https://github.com/thegallagher/PHP-MP3/blob/master/README.md
https://github.com/falahati/PHP-MP3
PHP-MP3 is a simple library for reading and manipulating MPEG audio (MP3).
Install:
composer require falahati/php-mp3:dev-master
Cut MPEG Audio:
\falahati\PHPMP3\MpegAudio::fromFile("old.mp3")->trim(10, 30)-saveFile("new.mp3");