共用方式為


DirectShow 編輯服務中的時間

[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngine,以及媒體基金會中的 音訊/視訊擷取取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayerIMFMediaEngine 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]

[此 API 不受支持,未來可能會改變或無法使用。]

若要編輯影片,您必須使用一些重要的計時概念。 例如:

  • 每個剪輯都有持續時間。
  • 在專案中,剪輯、轉場和效果會在特定時間出現。
  • 視訊有幀速率,以每秒幀數(fps)表示。

DirectShow 編輯服務 (DES) 提供各種方法,可設定或擷取時間和幀速率。 這些值的意義取決於內容。

時間值

當參數表示時間時,可能會有三個不同的意義:

  • 時間軸時間:相對於時間軸開頭的時間。 例如,剪輯可能會在時間軸的第 2 秒開始,或者轉場可能會在時間軸的第 15 秒發生。 時間軸會決定最終轉譯的專案,因此您也可以將時間軸時間視為「項目時間」。
  • 媒體時間:來源文件中相對於文件開頭的點,是在正常播放時達到的。 例如,如果您有 10 秒的視訊檔案,則中間的點會在 5 秒內以媒體時間表示。
  • 父時間:時間軸中相對於對象的時間。 例如,如果一個物件在時間軸上從 8 秒開始,並且包含另一個在時間軸上從 10 秒開始的物件,那麼子物件將在相對於父物件的 2 秒處開始。 所有虛擬軌道都從時間零開始,相對於時間軸。 因此,對於虛擬追蹤中的任何物件,父時間等於時間軸時間。

媒體時間僅適用於來源物件。 每個來源物件都有媒體開始時間和媒體停止時間。 例如,假設您有 10 秒的視訊剪輯,而且您想要只使用距離剪輯中間的 5 秒,修剪前 2 秒和剪輯的最後 3 秒。 如果您希望剪輯在項目中顯示 20 秒(並假設正常播放速率),您可以指定下列開始和停止時間。

  • 媒體啟動:2 秒

  • 媒體停止:7 秒

  • 時間軸開始:20 秒

  • 時間軸停止:25 秒

    在時間軸上插入來源剪輯

幀速率

幀速率是媒體流的「速度」,以每秒幀數為單位。 與時間值一樣,幀速率的意義取決於內容:

  • 輸出幀速率: 群組所定義的最終轉譯專案的幀速率。 當您轉譯專案時,每個群組都會變成具有本身幀速率的個別媒體數據流。
  • 來源幀速率: 原始撰寫來源檔案的幀速率。 撰寫的幀速率不一定符合群組的輸出幀速率。 DES 會視需要自動向上取樣或向下取樣檔案。 針對大部分媒體格式,DES 可以檢查格式來判斷幀速率。 DIB 序列是例外狀況;您必須指定 DIB 序列的幀速率。 (如需詳細資訊,請參閱 使用資料來源。)

播放速率: 項目中出現來源剪輯的明顯速度。 例如,10 秒的視訊可以在時間軸上調整為 5 秒。 因此,剪輯的速度會增加一倍,如下圖所示。

讓來源播放得更快

(使用音訊來源,音調也會改變。下列公式會決定來源剪輯的播放速率:

  • 播放速率 = (媒體停止 – 媒體啟動) / (時間軸停止 – 時間軸啟動)

請注意,這三個費率中的每一個都與其他費率無關:

  • 您可以藉由調整媒體時間來加快或減緩剪輯的速度;這不會影響最終輸出的幀速率。
  • 您可以增加或減少輸出幀速率,而不會影響檔案播放的速度。
  • 您可以在相同群組內混合具有不同撰寫幀速率的來源檔案,而 DES 會向上取樣或向下取樣每個剪輯,以符合群組的幀速率。

當您渲染專案時,所有時間都會四捨五入到最接近的幀界限,這由群組的幀速率決定。 例如,假設視訊群組的幀速率為 30 fps。 每個畫面大約是33毫秒(毫秒)。 假設您將 1.68 秒的來源剪輯新增至時間軸,從時間零開始。 來源不會完全結束於框架界限,因此 DES 會將停止時間四捨五入為 1.6666 秒(50 個畫面)。 如果您在轉譯的專案中定位到 1.68 秒,實際上會超過來源的結尾,定位到第 51 個畫面格。

不過,DES 不會覆寫來源的停止時間。 您稍後可能會變更群組幀速率,或將來源移至時間軸中的新位置,以便以不同的方式進行四捨五入。 因此,DES 保留原始停止時間,僅在必要時進行四捨五入。 如需詳細資訊,請參閱 IAMTimelineObj::FixTimes

開始使用 DirectShow 編輯服務