您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:110 来源:vckbase.com

本文章共5529字,分3页,当前第1页,快速翻页:
 

基于DirectShow非线性编辑DES

作者:freepublic

下载源代码
逆风编程精品

关键词 Timeline,Virtual Track,Transition,Audio Group和Video Group

摘要 
  本文详细阐述了基于DirectShow核心框架的非线性编辑的基本原理,并提供了一个编辑的源代码,演示如何拼接两个音视频文件,实现视频过渡效果,并预览。

编译环境 WindowsXP,VC6.0 sp5,DX9 SDK.

技术原理
  DES (DirectShow Editing Services),是一套基于DirectShow核心框架的编程接口。DES的出现,简化了视频编辑任务,弥补了DirectShow对于媒体文件非线性编辑支持的先天性不足。但是,就技术本身而言,DES并没有超越DirectShow Filter架构,而只是DirectShow Filter的一种增强应用。我们可以从下图中了解到DES在我们整个多媒体处理应用中的位置。



  下面,我们举个例子来看一下DES能够给我们带来些什么。假如我们现在有三个文件A、B和C,使用这三个文件做成一个合成的文件。我们想取A的4秒钟的内容,紧接着取B的10秒钟的内容,再紧接着C的5秒钟的内容。如果仅仅是这样,我们直接使用DirectShow Filter是不难实现的。(一般情况下,应用程序级会维持各个文件的编辑信息,由应用程序根据这些信息动态创建/控制功能单一的Filter Graph,以顺序对各个文件进行处理。)但是,如果我们的"创意"是随时改变的,我们现在想让C在B之前出现,或者我们想取A的不同位置的10秒钟内容,或者我们想给整个合成的文件加上一段美妙的背景音乐。如果我们仍然直接使用DirectShow Filter去实现,情况就变得很复杂了。然而,对于DES,这真的是小Case!(将所有的编辑信息以DES提供的接口告诉DES,其它的如Filter Graph的创建/控制输出,就完全交给DES来负责吧!这时候,DES创建的Filter Graph带有各个Source输出的控制功能,一般比较复杂。)

  如果我们使用DES,我们还可以得到如下的便利:

  1. 基于时间线(Timeline)的结构以及Track的概念,使得多媒体文件的组织、编辑变得直观而高效;
  2. 支持即时的预览;
  3. 视频编辑项目支持XML文档的形式保存;
  4. 支持对视频/音频的效果处理,以及视频之间切换的过渡处理;
  5. 可以直接使用DES提供的100多种SMPTE过渡效果,以及MS IE自带的各种Transform、Transition组件;
  6. 支持通过色调、亮度、RGB值或者alpha值进行图像的合成;
  7. 自动对源文件输出的视频帧率、音频的采样率进行调整,直接支持视频的缩放。

  接下去,我们来看一下DES的结构(Timeline模型),如下图所示:



  这是一个树形结构。在这棵树中,音视频文件是叶结点,称作为Source;一个或多个Source组成一个Track,每个Track都有统一的媒体格式输出;Track的集合称作为Composition,每个Composition可以对其所有的Composition或Track进行各种复杂的编辑;顶级的Composition或Track就组成了Group;每个Group输出单一格式的媒体流,所有的Group组成一个Timeline, Timeline表示一个视频编辑的项目,它是这棵树的根节点。一个Timeline项目必须至少包含一个Group,最典型的情况一般包含两个Group:Audio Group和Video Group。
 下面,我们来看一个典型的基于Timeline的Source Track编排。如下图:



  图中,箭头方向即是Timeline的方向。这个Timeline由两个Group组成,每个Group中包含两个Source Track。在Group中,Track是有优先级的(Track 0具有最低的优先级,依次类推)。运行时,总是输出高优先级的Track中的Source内容。如果此时高优先级的Track中没有Source输出,则让低优先级的Track中的Source输出。如上图中Video Group的输出顺序为Source A->Source C->Source B。而对于Audio Group,它的所有Track的输出只是简单的合成。
 

本文章更多内容1 - 2 - 3 - 下一页>>
相关文章

COM 组件设计与应用(十七)——持续性
使用
教你如何作弊玩扫雷
杂谈:项目管理的是与非
定制调试诊断工具和实用程序——摆脱DLL“地
托管应用中的意外错误
利用RFC868协议编写网络对时程序
Branch,docking和volatile objects
Ado 实现C 对象的存取
利用IEHelper实现IE弹出窗口过滤
阻止全局钩子的加载
类似 MSN 信息发送框的制作(上)
Python 的数据库操作
对《一个完善的ODBC数据库程序》一文的补充
盗QQ,我也会
用微软的实时通信API集成丰富的客户端通信
用DirectShow抓取影片帧
在MDI程序中实现类似WPS2000的文件切换标签
对话框模板,RegexTest
高效开发与彻底测试

相关评论


本文章所属分类:首页 VC++

  热门关键字: