如上所述,我希望创建一个带有两个视频播放器的基本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
但他们似乎创造了看似不理想的图像,因为我想要提取每个帧以便处理它们(应用插值,希望运动估计,边缘检测可能)。
所以我正在播放视频,提取帧并执行一些处理,然后将所有内容重新组合起来在第二个播放器中播放。
感谢您的任何建议:)
答案 0 :(得分:0)
您可以使用自定义转换DirectShow过滤器执行视频处理或带回调的Sample Grabber过滤器直接在您的代码中执行处理(在C#中可能很慢,但您可以使用Intel IPP调用使其非常快)。
要编辑视频,您可以使用包含源,样本采集器和编码器/复用器或DirectShow编辑服务的简单图形(如果您计划在将来提供更多功能)。