使用管道将avav转换为带有avconv的mp3

时间:2016-07-06 06:26:02

标签: php pipe avconv

我正在尝试使用来自Libav的avconv /“ffmpeg”使用stdin和stdout的管道将.wav文件转换为.mp3,但是,我的输出.mp3导致0字节。

这就是我目前所做的事情:

$desc = array(
  0 => array('pipe', 'r'),
  1 => array('pipe', 'w'),
);

$cmd = "/usr/bin/ffmpeg -loglevel quiet -i pipe:0 -acodec libmp3lame -q:a 5 pipe:1";

$p = proc_open($cmd, $desc, $pipes);

fwrite($pipes[0], $wav); // $wav contains the wav file data.
fclose($pipes[0]);

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

// At this point doing strlen($mp3) returns 0

proc_close($p);

如何使用管道输入和输出将.wav文件转换为.mp3和ffmpeg?

PS:作为一个完整性测试,从命令行运行以下命令会导致转换为.mp3:

/usr/bin/ffmpeg -loglevel quiet -i test.wav -acodec libmp3lame -q:a 5 test.mp3

更新

在应用LordNeckbeard的建议后,ffmpeg命令似乎挂了。我还启用了ffmpeg输出以获得一些反馈,现在它似乎确实在等待。不确定为什么,输入.wav有一个固定的持续时间......

avconv version 9.18-6:9.18-0ubuntu0.14.04.1+fdkaac, Copyright (c) 2000-2014 the Libav developers
  built on Apr 10 2015 23:18:58 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
[wav @ 0x150e460] max_analyze_duration reached
Guessed Channel Layout for  Input Stream #0.0 : mono
Input #0, wav, from 'pipe:0':
  Duration: 00:00:15.04, bitrate: N/A
    Stream #0.0: Audio: pcm_s16le, 48000 Hz, mono, s16, 768 kb/s
Output #0, mp3, to 'pipe:1':
  Metadata:
    TSSE            : Lavf54.20.4
    Stream #0.0: Audio: libmp3lame, 48000 Hz, mono, s16p
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le -> libmp3lame)
Press ctrl-c to stop encoding

0 个答案:

没有答案