【问题标题】:Playing, editing then replaying a video in c# using directshow使用directshow在c#中播放、编辑然后重播视频
【发布时间】:2015-02-06 02:26:41
【问题描述】:

如上所述,我希望创建一个带有两个视频播放器的基本 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 是否可以工作。

我查看了各种问题,例如:

Take image from video playing on windows media player in C#

C# Windows Forms capture a image from embeded Windows Media Player

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

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

感谢您的建议:)

【问题讨论】:

    标签: c# opencv video directshow axwindowsmediaplayer


    【解决方案1】:

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

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

    【讨论】:

    • 所以你会建议只使用 DirectShow,试图绕过没有它的实验室 PC​​(你可以在本地安装 Directx/它需要的库吗?)我希望在 PC 上实现处理然后在开发上。稍后通过以太网板。那么您是否建议也使用 DirectShow 来显示视频,完全摆脱 AxWMP?
    • 我认为它需要特定版本的 DirectX,但我不确定是否已安装,我的错误 :)
    • 嗯,需要 9.0 或更高版本,我认为您今天找不到具有旧 DirectX 版本的 PC。
    • 我知道我可以使用 getcurrentbuffer 来提取原始像素数据,并且我编辑了一个示例,因此我提取了帧,转换为位图,然后执行双线性插值以检查算法是否正常工作,看起来到。但是我不确定如何提取帧,执行插值,然后在另一个视频播放器中播放,有什么建议吗?真的不想每次都转换为位图来执行插值,但我想我可以解决这个问题,但也不想保存新的视频文件来播放。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2011-07-09
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    相关资源
    最近更新 更多