?

基于Directshow的視頻縮放分析研究

2013-09-30 06:39俞俊杰魏振鋼
中國信息化·學術版 2013年6期
關鍵詞:視頻文件剪切算法

俞俊杰 魏振鋼

[中圖分類號]F224.39 [文獻標識碼]A [文章編號]1672-5158(2013)06-0045-01

引言

在日常學習工作中經常會對各種視頻文件進行分析,比如視頻的剪切、縮放等,但是對于這些操作可能會用到專業的視頻分析卡等硬件的支持。針對硬件價值較高,微軟提供了一套基于COM的流媒體處理開發包

DirectShow。在DirectShow中提供了完整的視頻分析處理接口DES,負責對各類視頻進行分析處理。

通過DES、Filter Graph可以對視頻進行縮放處理,使視頻的縮放脫離硬件的直接支持,適合于個人PC機上的視頻處理。本文主要分析了3中視頻縮放的方法,通過這些方法可以進一步加快視頻縮放的速度和效率。

1 Directshow簡介

利用Directshow對視頻進行縮放處理,必須對Directshow的架構,DES(Directshow Editing Services)以及Filter Graph Manager等知識有所了解。

1.1 Directshow的體系結構

Directshow本質上就是基于COM組建的流媒體開發包,它為我們用戶提供了一整套完整的視頻處理接口。該體系結構大致可分為3層:用戶應用層、Directshow接口層、底部設備層。

1.2 Filter以及Filter Graph Manager

Filter其實就是一種叫做過濾器的COM組件,一共有三種類型的Filter:Source Filter、Transforill Filter、Rendering Filter。它們都包含一個或多個Pin,Source Filter負責視頻的采集,輸入等;Transform Filter負責對視頻進行格式轉換、傳輸等;Rendering Filter負責視頻文件的渲染,輸出。

由于每一個Filter都有Pin針,我們可以根據不同的任務、需求,將各種Filter利用Pin針連接起來,就構成了一個Filter Graph。Filter Graph的構建都是有Filter Graph Manager管理的,每一個Filter Graph MaRager都對所有的Filter有所了解(Filter必須在該電腦上進行注冊)。并且,它能通過命令與事件的方式與用應層進行交流,應用層也可以更加方便的對Directshow的各種接口進行處理。

1.3 非線性編輯(DES)

DES是一套基于Directshow核心框架的編程接口,它的目的是為了簡化視頻編輯任務,彌補Directshow對于媒體文件的非線性編輯支持的不足之處。其實,DES并沒有超越Directshow Filter架構,只是在它之上的一層增強應用。

2 視頻縮放分析

有了以上的幾個Directshow基本知識后,我們就可以有以下幾種視頻的縮放方法。

2.1 Filter Graph Manager的視頻縮放

我們知道Filter Graph Manager可以建立并控制Filter Graph。它是學習Directshow的核心,為了方便我們更加方便的操作,Directshow為我們提供了一整套完善的接口,通過實現這些接口我們可以完成我們想要的工作。

我們想要實現視頻的縮放,可以通過FiRer Graph Manager中的IVideo Window接口來實現。IvideoWindow可以設置視頻窗口的各種屬性,當用戶改變視頻的大小的時候,操作系統以命令的方式發送給應用程序,應用程序可以調用IvideoWindow的put Height(long Height)和put_Width((long Width)改變大小。但是這種改變視頻大小的方法只是單純的改變面積并沒有涉及對圖像的算法剪切,因此在改變大小的過程中可能出現圖像的失真等狀況,下面的這種方法可以對圖像進行設計。

2.2 DES的視頻縮放

要利用DES對視頻進行處理,首先必須要知道DES的內部結構模型如下圖:

2.3 Resize Filter的視頻縮放

除了在進行非線性編輯的時候在組上進行視頻大小的設置之外,還有另外一種方法可以進行視頻的縮放控制,這便是通過第三方的視頻圖像縮放Filter來控制視頻的縮放。一般的DES創建的視頻解碼鏈路如下圖:

在DES中默認的使用的是微軟公司的Resize Filter,它采用的是簡單拉伸的圖像算法,使用該Filter之后可能引起視頻圖像的質量損壞。由此,我們可以采用第三方的Filter或是自己定制自己所需要的視頻縮放Filter。一般的Resize Filter都是一個Transform Filter,因此我們在定制Filter的時候必須要繼承CtransforinFilter這個父類,對于CtransfonnFilter的子類我們必須要重載以下五個純虛函數:CheckInputType、CheckTransform、DecideBufferSize、GetMediaType、Transform。通過CheckInputType來檢查本Filter的輸入媒體是否合法,CheckTransform來檢查開發的filter的輸出是否和合法,通過GetMediaType來獲取該輸出端口支持的媒體格式供下游filter的枚舉,通過DecideBufferSize來確定buffer的數量和大小。而上游Filter傳過來的sample,我們可以繼承CTransformFilter::Transform方法來處理該sample的相關數據。大體流程如下:

3 結束語

在日常生活中各種我們可以獲得各種視頻資源,它們作為一種信息的傳播載體在信息的傳播中發揮了越來越重要的作用,但是不能否認的是從視頻資源中獲取我們所需的信息需要更多的時間更多的心思,因此個人視頻編輯越來越重要,如何將手中的視頻資源進行編輯(剪切,縮放等)就越來越重要。本文中提出的3種基于Directshow的視頻縮放的處理方案基本上可以解決日常個人視頻縮放處理所需,當然論文中也有很多不足之處,尤其是自己定制Filter中視頻縮放的算法只是一種高效的算法,可能還有更多更高效的算法,因此對于視頻縮放的方法還有待優化和提高,作者也將繼續研究更加高效的方法以實現真正的適合于個人PC機上的視頻處理方案。

猜你喜歡
視頻文件剪切算法
連退飛剪剪切定位控制研究與改進
隨心定制視頻文件的縮略圖
Travellng thg World Full—time for Rree
快速檢索,抓取電影中的精彩篇章
機械法制備石墨烯球磨過程的能量層分析
學習算法的“三種境界”
算法框圖的補全
算法初步知識盤點
剪切與沖切的辨析及工程算例
一種解決軋機和剪切線共享一臺WINCC服務器所產生的弊端的方法
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合