directshowdes:DirectShow非线性编辑DES学习



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



\"\"

  下面我们举个例子来看下DES能够给我们带来些什么假如我们现在有 3个文件A、B和C使用这 3个文件做成个合成文件我们想取A4秒钟内容紧接着取B10秒钟内容再紧接着C5秒钟内容如果仅仅是这样我们直接使用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

下面我们来看个典型基于TimelineSource 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输出只是简单合成[Page]

  我们再看个典型Track的间加入了TransitionTimeline结构如下图:

\"\"

  图中Video Group中是两个Track以及Track上几个Source编排;Rendered video中表示这个Group最终输出效果我们可以看到在Track 1上有个Transition表示这个时间段上从Track 0过渡到Track1效果Transition位于高优先级Track上Transition也是有方向默认是从低优先级Track过渡到高优先级Track当然我们也可以改变Transition方向如下图所示个Transition是从Track 0到Track 1第 2个Transition是从Track 1到Track 0

\"\"

  值得注意DES使用Transition采用了叫做DirectX Transform Object技术任何两输入输出DirectX Transform Object都可以用作Transition遗憾微软现在DirectX SDK不再支持这种组件开发我们能够使用只有DES本身提供几种效果还有就是Microsoft Internet Explorer自带效果DES使用Effect情况类似只不过DES Effect是单输入单输出DirectX Transform Object

  讲到这里我们已经对DES结构有了个初步了解我们需要回过去再看看这个Timeline树结构我们会发现Group下面般都有个Composition而随后图例中我们看到般Group下直接嵌入是Track那么Composition有什么用呢?熟悉设计模式人很容易就明白了微软采用就是对象结构型模式其中种叫Composite(组合)模式Composition可以包装几个Track(这几个Track的间可能是包含Transition)组成个Virtual Track并且和其他普通Track接口保持我们完全可以把这个Virtual Track和普通Track样操作进而很方便地进行更加复杂、丰富效果编辑我们知道DES是在Filter的上做了层封装为了更进步地理解DES我们就必须从Filter Graph这个层次对DES进行剖析

  下面我们看个典型DES Filter Graph图:



\"\"

  上图中有两个Filter外形很大:个含有20个Input pin和20个Output pin个含有15个Input pin和10个Output pin前者是DESVideo控制Filter后者是DESAudio控制Filter这两个Filter也就是DES核心所在他们知道用户编辑Timeline结构并且它们能够在Filter Graph运行时候创建各个Source解码链路

  下面我们再看下当个Timeline结构“翻译”成Filter Graph时是什么样子先看Video部分:

\"\"

  从上图可以看出我们加入了个Mpeg1File sourceDES 会自动给这个File source进行解码首先经过Splitter这个File source是加在Video group所以DES只取Splitter出来Video部分然后经过Resizer这个Filter调整Video输出Size然后经过Frame Rate Converter这个Filter调整Video输出帧率最后连接到DES Video控制Filter某个Input pin上DES“自动对源文件输出视频帧率、音频采样率进行调整直接支持视频缩放”奥妙也就在此
值得注意这条解码链路是通过微软“智能连接”来创建采用这种思路方法DES可以最大限度地使用本地系统中已经安装Filter但同时也给基于DES应用带来了麻烦应用运行系统环境是不可预见DES对Source解码链路构建也就不稳定相应地应用稳健性受运行环境影响也会比较大[Page]

  下面我们再来看下Audio部分:

\"\"

  可以看出Audio解码链路和Video部分是相似需要介绍说明Audio Repackager这个Filter负责将Audio数据按设定每秒钟输出多少个Sample重新进行打包类似于Video部分Frame Rate Converter

  理论上说DES支持任何格式媒体文件只要系统中注册了对这种格式文件解码Filter我们看下下图DES对静态图片支持:

\"\"

  接下去我们再来看下DES对Effect/Transition实现情况我们知道DES并没有直接实现Effect/TransitionDES只是在Timeline中建立了个包装而具体工作交给了所谓”Subobject”去做这个”Subobject”就是DirectX Transform Object它是种COM组件而且遗憾这种组件开发技术在微软新DirectX SDK中已经找不到了也就是说如果我们开发基于DES应用我们只能使用DES提供以及微软IE自带Effect/Transition这种限制同样是令人头疼!下面看下两个图例:

\"\"

\"\"

  从图中可以看出Effect/Transition都使用了Wrapper filter(这两个FilterCLSID是相同)区别是Effect是而Transition是两进我们还可以看到Video控制FilterOutput pin经过Effect/ Transition后重新作为Video控制Filter个输入

  接下去我们再来看下DES对Audio Mixing实现典型Timeline会有个Video Group和个Audio Group如果整个Audio Group没有个Audio source或者个10sTimelineAudio file仅有0-5s输出DES是如何处理呢?我们看下图:

\"\"

  DES会自动创建个Source这个Source产生Mute PCM Audio这样就保证了Audio Group在整个Timeline过程中肯定是有输出下图是Audio Mixing个例子DESAudio控制Filter将所有输入PCM Audio做简单混合后输出

\"\"

  最后我们来看下DES Filter Graph创建过程我们可以看到最开始创建只有那两个控制Filter还有Effect/Transition包装Filter以及Audio/Video各自Renderer filter当Filter Graph开始运行控制Filter就开始创建Timeline上第个Source解码链路;而当Filter Graph运行到最后时候整个Filter结构可能看起来非常复杂DES能够根据Timeline上各个ObjectTimeline Time进行动态创建、动态连接

  对于编写基于DES应用开发者来说了解这些DESFilter Graph结构不是十分必要方面DES局限性(而且或许对于某些大型商业应用软件Software来说是致命)我们直接使用DES可能性很小我们研究在于汲取DES设计精华以开发套适合于我们自己使用、提供强大编辑功能DirectShow Filter应用架构



Tags:  非线性编辑 directshow 学习非线性编辑 directshowdes

延伸阅读

最新评论

发表评论