5

我有 WAV 数据,我想使用 PHP 脚本即时转换为 MP3。WAV 文件源自脚本,因此它不是作为文件开始的。

我可以运行这样的东西:

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

但这需要我先将 in.wav 写入磁盘,然后从磁盘中读取 out.mp3,然后在完成后进行清理。我不想那样做。相反,我将 wav 文件存储在 $wav 中,我想通过 LAME 运行它,以便将输出的数据存储在 $mp3 中。

我已经看到对 FFMPEG PHP 库的引用,但如果可能的话,我宁愿避免为此任务安装任何其他库。

4

1 回答 1

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

于 2013-07-28T07:21:57.940 回答