【发布时间】:2019-02-17 14:35:30
【问题描述】:
我需要将 ffmpeg 输出读取为管道。 有一个代码示例:
public static void PipeTest()
{
Process proc = new Process();
proc.StartInfo.FileName = Path.Combine(WorkingFolder, "ffmpeg");
proc.StartInfo.Arguments = String.Format("$ ffmpeg -i input.mp3 pipe:1");
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
FileStream baseStream = proc.StandardOutput.BaseStream as FileStream;
byte[] audioData;
int lastRead = 0;
using (MemoryStream ms = new MemoryStream())
{
byte[] buffer = new byte[5000];
do
{
lastRead = baseStream.Read(buffer, 0, buffer.Length);
ms.Write(buffer, 0, lastRead);
} while (lastRead > 0);
audioData = ms.ToArray();
}
using(FileStream s = new FileStream(Path.Combine(WorkingFolder, "pipe_output_01.mp3"), FileMode.Create))
{
s.Write(audioData, 0, audioData.Length);
}
}
这是来自ffmpeg的日志,第一个文件被读取:
输入 #0,mp3,来自“norm.mp3”: 元数据: 编码器:Lavf58.17.103 时长:00:01:36.22,开始:0.023021,比特率:128 kb/s 流 #0:0:音频:mp3,48000 Hz,立体声,fltp,128 kb/s 元数据: 编码器:Lavc58.27
然后管道:
[NULL @ 0x7fd58a001e00] 无法为“$”找到合适的输出格式 $: 无效参数
如果我运行“-i input.mp3 pipe:1”,日志是:
无法为 'pipe:1' pipe:1 找到合适的输出格式:无效 论据
如何设置正确的输出? ffmpeg应该怎么知道输出格式是什么?
【问题讨论】:
-
ffmpeg 是一个转换程序。你给它一个输入,但没有告诉它如何处理输入。你想要什么作为 ffmpeg 的输出?
标签: c# audio ffmpeg .net-core pipe