【问题标题】:Text overlay when video is recording using Directshow and C#使用 Directshow 和 C# 录制视频时的文本叠加
【发布时间】:2012-06-01 09:09:29
【问题描述】:

通过使用 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 是否可行?

例如,当视频录制开始时,视频应该与文本叠加一起录制。

【问题讨论】:

  • 您需要修改流数据以添加叠加层。通常,您为此使用特定的专用过滤器。没有库存过滤器,因此它是第三方或定制开发的。
  • 您通常在管道中使用额外的过滤器,它会在 int 到达编码器之前修改图像。很可能,您需要为此使用第三方过滤器,因为在 C# 中编写过滤器有些复杂。

标签: c# text overlay directshow directshow.net


【解决方案1】:

我在我的软件中以将SampleGrabber 过滤器插入图形的方式进行操作,当图片到达时,我将其转换为Bitmap 对象,然后使用Graphics 在其上绘制。

【讨论】:

  • 感谢 Buddy 的宝贵回复。但是先生,我是 DirectShowLib 的新手。你能给我示例代码吗。是否可以一次使用两个过滤器。意味着我已经使用 ASF 过滤器来记录video.and 我在我的第二篇文章中也看到了你的回答 link
  • 感谢@Daniel Mošmondor 经过这么长时间和这么多的努力,我能够在录制视频上放置一个文本叠加层。但是叠加层的问题是它在某些帧中不可见。为什么会出现这个问题我在做什么错??
【解决方案2】:

查看 DirectShow.Net 示例中的 DMO 和 DxLogo 示例来满足您的需求。 Daniel Mošmondor 解释的内容可以在 DxSnap 示例中找到...

http://directshownet.sourceforge.net/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2018-01-16
    • 1970-01-01
    相关资源
    最近更新 更多