ffmpeg输出管道到命名的windows管道

3qpi33ja  于 2023-08-07  发布在  Windows
关注(0)|答案(1)|浏览(146)

我想通过管道将视频传输到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]
当我用一个文件名替换“输出管道”时,它的工作原理就像charm:-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

xoshrz7s

xoshrz7s1#

这个问题似乎可以通过向ffmpeg命令添加-y(override)选项并指定管道的缓冲区大小来解决。
我的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('from_ffmpeg', 
    PipeDirection.In, 
    1, 
    PipeTransmissionMode.Byte, 
    System.IO.Pipes.PipeOptions.WriteThrough, 
    10000, 10000);

字符串

相关问题