ffmpeg 输出管道到命名 windows 管道
ffmpeg output pipeing to named windows pipe
这个问题与我之前的问题有关: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]
当我用文件名替换 "output 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 中的命名管道?
编辑:当我使用 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);
这个问题与我之前的问题有关: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]
当我用文件名替换 "output 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 中的命名管道?
编辑:当我使用 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);