使用 DirectShow 在 C# 中播放、编辑和重播视频

本文关键字:编辑 视频 播放 DirectShow 使用 | 更新日期: 2023-09-27 18:33:27

如上所述,我希望创建一个基本的Windows.Forms GUI,有两个视频播放器,一个显示原始视频,另一个显示编辑版本。看看使用 C#,但如果有特殊的原因,我愿意使用 C/C++,它也不一定是 Windows.Forms,但由于它不需要在视觉上特别令人印象深刻,我认为这将是最好的,因为简单/我在这方面有一点经验(虽然不是多年(。

目前我正在使用AxWindowsMediaPlayer控件:

    private void loadMedia_btn_Click(object sender, EventArgs e)
    {         
        OpenFileDialog openFileDialog1 = new OpenFileDialog();
        openFileDialog1.AddExtension = true;
        openFileDialog1.DefaultExt = "*.*";
        openFileDialog1.ShowDialog();
        initialVideoPlayer.URL = openFileDialog1.FileName;
        string fileName = openFileDialog1.FileName;
    }

快速浏览了其他方法,例如DirectShow和OpenCV(主要用于编辑(,但我不确定最好的方法,因为我似乎无法非常轻松地从WMP控件中提取帧,我不知道是否有更整洁的方法?一个问题是实验室中的计算机似乎没有DirectX(或者至少没有新版本(,所以我不确定DirectShow是否有效。

我看过各种问题,例如:

从 C# 中的窗口媒体播放器上播放的视频中获取图像

C# Windows 窗体从嵌入的Windows Media Player捕获图像

但是它们似乎

创建了似乎并不理想的图像,因为我想要提取每一帧以处理它们(应用插值,希望运动估计,边缘检测(。

因此,我希望播放视频,提取帧并执行一些处理,然后将所有内容重新组合在一起以在第二个播放器中播放。

感谢您的任何建议:)

使用 DirectShow 在 C# 中播放、编辑和重播视频

您可以使用自定义转换 DirectShow 过滤器来执行视频处理,或者使用带回调的样本抓取器过滤器直接在代码中执行处理(在 C# 中可能很慢,但您可以使用英特尔 IPP 调用使其非常快(。

要编辑视频,您可以使用带有源、采样采集器和编码器/复用器或 DirectShow 编辑服务的简单图形(如果您计划在未来提供更多功能(。