2013-07-28 60 views
4

我有我想用PHP腳本隨時轉換爲MP3的WAV數據。 WAV文件源於腳本,因此它不是以文件形式出現的。使用PHP中的LAME將WAV轉換爲MP3

我可以運行這樣的事情:

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

但是,這將要求我先寫in.wav到磁盤上,從磁盤讀取out.mp3,然後清理時,我完蛋了。我寧願不這樣做。相反,我有存儲在$ wav中的wav文件,我想通過LAME運行它,以便輸出的數據存儲在$ mp3中。

我見過對FFMPEG PHP庫的引用,但是我寧願避免在可能的情況下爲此任務安裝任何其他庫。

+2

@Krister Andersson:謝謝你的標題編輯..一個WAV到PHP的轉換將是尷尬的:-)。 –

回答

7

看來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