使用 Directshow 和 C# 录制视频时的文本叠加

本文关键字:文本 叠加 视频 Directshow 使用 | 更新日期: 2023-09-27 18:35:55

通过使用DirectShowLib,我可以使用ASF写入器录制视频,这是开始录制的代码

 try
        {
            IBaseFilter capFilter = null;
            IBaseFilter asfWriter = null;
            IFileSinkFilter pTmpSink = null;
            ICaptureGraphBuilder2 captureGraph = null;               
            GetVideoDevice();
            if (availableVideoInputDevices.Count > 0)
            {
                //
                //init capture graph
                //
                graphBuilder = (IFilterGraph2)new FilterGraph();
                captureGraph = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
                //
                //sets filter object from graph
                //
                captureGraph.SetFiltergraph(graphBuilder);
                //
                //which device will use graph setting
                //
                graphBuilder.AddSourceFilterForMoniker(AvailableVideoInputDevices.First().Mon, null, AvailableVideoInputDevices.First().Name, out capFilter);
                captureDeviceName = AvailableVideoInputDevices.First().Name;                    
                //
                //check saving path is exsist or not;if not then create
                //
                if (!Directory.Exists(ConstantHelper.RootDirectoryName + "''Assets''Video''"))
                {
                    Directory.CreateDirectory(ConstantHelper.RootDirectoryName + "''Assets''Video''");
                }
                #region WMV                   
                //
                //sets output file name,and file type
                //
                captureGraph.SetOutputFileName(MediaSubType.Asf, ConstantHelper.RootDirectoryName + "''Assets''Video''" + videoFilename + ".wmv", out asfWriter, out pTmpSink);                    
                //
                //configure which video setting is used by graph
                //                
                IConfigAsfWriter lConfig = asfWriter as IConfigAsfWriter;
                Guid asfFilter = new Guid("8C45B4C7-4AEB-4f78-A5EC-88420B9DADEF");
                lConfig.ConfigureFilterUsingProfileGuid(asfFilter);
                #endregion
                //
                //render the stram to output file using graph setting
                //
                captureGraph.RenderStream(null, null, capFilter, null, asfWriter);
                m_mediaCtrl = graphBuilder as IMediaControl;
                m_mediaCtrl.Run();
                isVideoRecordingStarted = true;
                VideoStarted(m_mediaCtrl, null);

现在我想在视频重新编码时在视频上添加文本叠加层,并且通过使用 DirectshowLib 这可能吗?

例如,当视频录制开始时,视频应该使用文本叠加层录制。

使用 Directshow 和 C# 录制视频时的文本叠加

我在我的软件中以一种将过滤器插入图形的方式SampleGrabber并在图片到达后,我将其转换为Bitmap对象,然后用Graphics在上面绘制。

查看 DirectShow.Net 示例中的 DMO 和 DxLogo 示例,以执行所需的操作。 Daniel Mošmondor正在解释的内容,您可以在DxSnap示例中找到...

http://directshownet.sourceforge.net/