2016-07-28 86 views
3

我需要削减ffmpeg可能的视频剪辑的一部分,但不想使用ffmpeg并希望严格使用asp.net中的Media Foundation方法。任何人都可以建议我怎么可能。 要求是希望将直播流从结束位置剪切为4分钟,然后保存在视频文件中。我们必须从实时流中剪切视频,而不是已经保存的视频。使用媒体基础c剪切视频剪辑#

回答

4

我可以推荐你使用ffmpeg或其他视频编辑器。 Media Foundation是用于播放或编码视频的低级框架。它不包括任何剪辑视频剪辑的功能。当然,可以使用Media Foundation编写视频剪辑代码,但它需要从头开始编写所有代码。我对媒体基金会有丰富的经验,我可以将它与'乐高'积木进行比较 - 收集非常“微小”的元素。我认为实施你的想法可能需要半年或更长的时间。

顺便说一句 - 您可以通过Media Foundation Capturing Live-video from Web-camera on Windows 7 and Windows 8找到我的相机源代码,您可以查看代码的复杂性。它支持在两个流上分割视频 - 查看和其他(例如录制)。可以通过其他流将视频录制到文件中,然后在完成视频录制后创建Media Foundation Media Session,打开临时视频文件,将位置视频阅读器设置为开启数分钟,然后重新写入目标文件。但是,您必须非常了解媒体基础。有一本关于媒体基金会的书。它包括媒体基础媒体会话的代码。

+0

完全同意...你只需要调用一个简单的命令...并且你不需要打扰视频内容的胡斯尔 –

+0

当使用媒体捕获使用媒体class.I保存mediaCapture到文件。我从总字节流中挑选从最后位置开始的字节到固定大小。但我无法播放视频。您能否为此建议解决方案,如何将元数据附加到已损坏的字节以便播放视频。 - @Evgeny pergeguda –

+0

您可以使用[MSDN]中的MediaClip.CreateFromFileAsync'(https://msdn.microsoft.com/en-us/library/windows/apps/windows.media.editing.mediaclip.createfromfileasync.aspx) ,但它可以在Windows 10上使用 - 它使用公共接口IStorageFile:IStorageItem, IRandomAccessStreamReference,IInputStreamReference'Windows.Media - 是Media Foundation的高级包装器。 –

0

从MP4文件创建子剪辑的一种方法是使用Media Foundation API的Source ReaderSink Writer,以便您可以分别从特定位置的所有感兴趣的流开始“读取”。数据将被传递给Sink Writer实例以生成子剪辑文件。

这可以在有或没有视频重新压缩的情况下完成。请注意,Media Foundation是本机代码API,您可能需要一个包装库,它提供了各自的ASP.NET接口。

另一种方法是带有TrimStartTime/TrimStopTime属性的UWP MediaTranscoder API。 Transcoding media sample应该给你一个见解。