Преобразование WAV в MP3 с помощью LAME из PHP

У меня есть данные WAV, которые я хотел бы преобразовать в MP3 на лету с помощью PHP-скрипта. Файл WAV создается вместе со сценарием, поэтому он не запускается как файл.

Я могу запустить что-то вроде этого:

exec( "lame --cbr -b 32k in.wav out.mp3" );

Но это потребует, чтобы я сначала записал in.wav на диск, прочитал .mp3 с диска, а затем очистил, когда закончу. Я бы предпочел этого не делать. Вместо этого у меня есть wav-файл, хранящийся в $wav, и я хотел бы запустить его через LAME, чтобы выходные данные затем сохранялись в $mp3.

Я видел ссылки на библиотеку FFMPEG PHP, но я бы предпочел по возможности не устанавливать какие-либо дополнительные библиотеки для этой задачи.


person Nick Coons    schedule 28.07.2013    source источник
comment
@Krister Andersson: Спасибо за редактирование заголовка ... преобразование WAV в PHP было бы неудобным :-).   -  person Nick Coons    schedule 28.07.2013


Ответы (1)


Похоже, что proc_open() — это то, что я искал. Вот фрагмент кода, который я написал и протестировал, и он делает именно то, что я искал:

Где:

  • $wav — это исходные данные WAV, которые необходимо преобразовать.
  • $mp3 содержит преобразованные данные MP3,
$descriptorspec = array(
    0 => array( "pipe", "r" ),
    1 => array( "pipe", "w" ),
    2 => array( "file", "/dev/null", "w" )
);

$process = proc_open( "/usr/bin/lame --cbr -b 32k - -", $descriptorspec, $pipes );

fwrite( $pipes[0], $wav );
fclose( $pipes[0] );

$mp3 = stream_get_contents( $pipes[1] );
fclose( $pipes[1] );

proc_close( $process );

Окончательные выходные данные идентичны, если бы я запустил /usr/bin/lame --cbr -b 32k in.wav out.mp3.

person Nick Coons    schedule 28.07.2013