c# - ffmpeg 输出管道到命名的 Windows 管道

标签 c# windows ffmpeg pipe named-pipes

这个问题与我之前的问题有关:Converting raw frames into webm live stream

我想将视频传输到 ffmpeg 并通过另一个管道读回,但我无法通过管道传输 ffmpeg.exe 的输出到 Windows 上的命名管道。

我在 C# 中对管道的定义:

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 拒绝写入管道并出现以下错误:File '\\.\pipe\from_ffmpeg' already exists. Overwrite ? [y/N]

当我用文件名替换“输出管道”时,它的工作原理就像魅力:-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 中的命名管道?

编辑:当我用 ffmpeg 的 -y 强制写入管道时选项,我收到以下错误: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);

关于c# - ffmpeg 输出管道到命名的 Windows 管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32157774/

相关文章:

windows - 如何在 VBS 中使用文件名

ffmpeg 转置源和缩放水印以适应不同的视频大小

react-native - 使用ffmpeg进行 native react 的视频压缩

windows - 无需额外的外部软件即可将 .bat 转换为 .exe(创建 SFX)

android - FFmpeg:如何转换背景模糊的垂直视频

c# - 如何旋转 System.Drawing.Image x 度?

c# - HttpWebRequest 调用 GetResponse,使用 .net 4.5 失败但使用 net 4.6 通过

c# - foreach 循环为 mvc View 中的所有帖子显示相同的图像

c# - 请求的身份验证范围不足。 【403】c#

c++ - 将屏幕绘图翻译到屏幕的另一部分