播放,编辑然后使用directshow在c#中重播视频

时间:2014-12-08 12:20:01

标签: c# opencv video directshow axwindowsmediaplayer

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

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

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

感谢您的任何建议:)

1 个答案:

答案 0 :(得分:0)

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

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