ffmpeg输出pipe道到命名的windowspipe道

这个问题与我以前的问题有关: 将原始帧转换成webm直播stream

我想pipe一个video到ffmpeg并通过另一个pipe道读回来,但是我不能将ffmpeg.exe的输出传送到windows上的一个命名pipe道。

我在C#中定义pipe道:

 NamedPipeServerStream p_to_ffmpeg; NamedPipeServerStream p_from_ffmpeg; p_to_ffmpeg = new NamedPipeServerStream("to_ffmpeg", PipeDirection.Out, 1, PipeTransmissionMode.Byte); p_from_ffmpeg = new NamedPipeServerStream("from_ffmpeg", PipeDirection.In, 1, PipeTransmissionMode.Byte); 

然后我在一个单独的进程中使用以下选项启动ffmpeg.exe-f rawvideo -vcodec rawvideo -video_size 656x492 -r 10 -pix_fmt rgb24 -i \\.\pipe\to_ffmpeg -c:v libvpx -pass 1 -f webm \\.\pipe\from_ffmpeg

ffmpeg.exe拒绝写入具有以下错误的pipe道: File '\\.\pipe\from_ffmpeg' already exists. Overwrite ? [y/N] File '\\.\pipe\from_ffmpeg' already exists. Overwrite ? [y/N]

当我用文件名replace“输出pipe道”时,它的工作方式如下: -f rawvideo -vcodec rawvideo -video_size 656x492 -r 10 -pix_fmt rgb24 -i \\.\pipe\to_ffmpeg -c:v libvpx -pass 1 -f webm output.webm

我如何获得ffmpeg写入Windows命名pipe道?

编辑:当我强制使用ffmpeg的-y选项写入pipe道时,出现以下错误: Could not write header for output file #0 (incorrect codec parameters ?): Error number -32 occurred

看起来问题可以通过向ffmpeg命令添加-y选项并指定管道的缓冲区大小来解决。

我的ffmpeg命令(见aergistal的评论为什么我也删除了-pass 1标志):- -y -f rawvideo -vcodec rawvideo -video_size 656x492 -r 10 -pix_fmt rgb24 -i \\.\pipe\to_ffmpeg -c:v libvpx -f webm \\.\pipe\from_ffmpeg

并定义命名管道如下:

 p_from_ffmpeg = new NamedPipeserverStream(pipename_from, PipeDirection.In, 1, PipeTransmissionMode.Byte, System.IO.Pipes.PipeOptions.WriteThrough, 10000, 10000);