Конвертируйте wav в mp3 с помощью avconv, используя каналы

Я пытаюсь преобразовать файл .wav в .mp3, используя avconv / «ffmpeg» из Libav с каналами для stdin и stdout, однако мой вывод .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

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]