У меня есть данные WAV, которые я бы хотел конвертировать в MP3 на лету с помощью PHP-скрипта. WAV-файл возникает из сценария, поэтому он не запускается как файл.
Я могу запустить что-то вроде этого:
exec( "lame --cbr -b 32k in.wav out.mp3" );
Но для этого потребуется сначала записать in.wav на диск, прочитать.mp3 с диска, а затем очистить, когда я закончу. Я бы предпочел не делать этого. Вместо этого у меня есть wav-файл, хранящийся в $ wav, и я хотел бы запустить его через LAME, чтобы затем полученные данные были сохранены в формате $ mp3.
Я видел ссылки на PHP-библиотеку FFMPEG, но я предпочел бы избежать необходимости устанавливать какие-либо дополнительные библиотеки для этой задачи, если это возможно.
Похоже, что 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
.