我正在使用DirectShow.Net,并且正在从网络摄像头捕获视频并将其保存到AVI文件。 AVI文件可能会变大,我想将其保存为其他格式。我正在使用ICaptureGraphBuilder2 :: SetOutputFileName(MediaSubType.type,name,out,out)。 ICaptureGraphBuilder只允许我使用.AVI或.ASF的MediaSubType保存文件。如果我尝试更改尝试另存为的类型,它将崩溃:
graphBuilder = (IGraphBuilder) new FilterGraph();
//Create the Capture Graph Builder
ICaptureGraphBuilder2 captureGraphBuilder = null;
captureGraphBuilder = (ICaptureGraphBuilder2) new CaptureGraphBuilder2();
//Create the media control for controlling the graph
mediaControl = (IMediaControl) this.graphBuilder;
// Attach the filter graph to the capture graph
int hr = captureGraphBuilder.SetFiltergraph(this.graphBuilder);
DsError.ThrowExceptionForHR(hr);
//Add the Video input device to the graph
hr = graphBuilder.AddFilter(theDevice, "source filter");
DsError.ThrowExceptionForHR(hr);
//Add the Video compressor filter to the graph
hr = graphBuilder.AddFilter(theCompressor, "compressor filter");
DsError.ThrowExceptionForHR(hr);
//Create the file writer part of the graph. SetOutputFileName does this for us, and returns the mux and sink
IBaseFilter mux;
IFileSinkFilter sink;
hr = captureGraphBuilder.SetOutputFileName(MediaSubType.MPEG1Video, textBox1.Text, out mux, out sink);
captureGraphBuilder.SetOutputFileName
DsError.ThrowExceptionForHR(hr);
//Render any preview pin of the device
hr = captureGraphBuilder.RenderStream(PinCategory.Preview, MediaType.Video, theDevice, null, null);
DsError.ThrowExceptionForHR(hr);
有没有一种方法可以保存到AVI或ASF之外的其他任何内容而没有太多麻烦呢?
最佳答案
问题很可能不是AVI容器格式,而是您用来压缩视频的编解码器。
您将需要添加一个不同的视频压缩过滤器(可能是MPEG4或AVC),无论您在哪里获得它,都可能会提供一个MP4多路复用器,您可以并且应该使用它,而不是现在使用的avi多路复用器。
关于c# - 还有另一种方法可以将视频保存为DirectShow,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6051491/