DirectShow 編輯服務中的時間
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
[此 API 不受支援,未來可能會變更或無法使用。]
若要編輯影片,您必須使用一些重要的計時概念。 例如:
- 每個剪輯都有持續時間。
- 剪輯、轉換和效果會出現在專案中的特定時間。
- 視訊的畫面播放速率以每秒的畫面速率表示, (fps) 。
DirectShow Editing Services (DES) 提供各種方法來設定或擷取時間和畫面播放速率。 這些值的意義取決於內容。
時間值
當參數表示時間時,可能會有三個不同的意義:
- 時間軸時間:相對於時間軸開頭的時間。 例如,剪輯可能會在時間軸中開始 2 秒,或轉換時間軸可能會發生 15 秒。 時間軸會決定最終轉譯的專案,因此您也可以將時間軸時間視為「專案時間」。
- 媒體時間:來源檔案中相對於檔案開頭的點,如正常播放期間所達到。 例如,如果您有 10 秒的視訊檔案,則會在 5 秒之間發生檔案中點,以媒體時程表示。
- 父時間:時間軸中相對於物件的時間。 例如,如果物件在時間軸上的 8 秒開始,且包含時間軸上從 10 秒開始的另一個物件,則子物件會在相對於父系的 2 秒開始。 虛擬會追蹤所有從時間零開始,相對於時間軸。 因此,對於虛擬追蹤中的任何物件,父時間等於時間軸時間。
媒體時間僅適用于來源物件。 每個來源物件都有媒體開始時間和媒體停止時間。 例如,假設您有 10 秒的視訊剪輯,而您想要只從剪輯中間使用 5 秒,修剪前 2 秒和剪輯的最後 3 秒。 如果您希望剪輯在專案中顯示 20 秒 (,並假設) 指定下列開始和停止時間的正常播放速率。
媒體啟動:2 秒
媒體停止:7 秒
時間軸開始時間軸:20 秒
時間軸停止:25 秒
畫面播放速率
畫面播放速率是媒體資料流程的「速度」,以每秒畫面格為單位。 如同時間值,畫面播放速率的意義取決於內容:
- 輸出畫面播放速率: 群組所定義之最終轉譯專案的畫面播放速率。 當您轉譯專案時,每個群組都會變成具有其本身畫面播放速率的個別媒體資料流程。
- 來源畫面播放速率: 原始程式檔最初撰寫的畫面播放速率。 撰寫的畫面播放速率不需要符合群組的輸出畫面播放速率。 DES 會視需要自動向上取樣或向下取樣檔案。 對於大部分媒體格式,DES 可以檢查格式來判斷畫面播放速率。 DIB 順序是例外狀況;您必須指定 DIB 順序的畫面播放速率。 (如需詳細資訊,請參閱 使用 Sources.)
播放速率: 來源剪輯出現在專案中時的明顯速度。 例如,10 秒的視訊可以在時間軸上容納 5 秒。 因此,剪輯的速度會增加 2,如下圖所示。
(使用音訊來源時,音調也會移動。) 下列公式會決定來源剪輯的播放速率:
- 播放速率 = (媒體停止 – 媒體啟動) / (時間軸停止 – 時程表開始)
請注意,這三個費率彼此無關:
- 您可以藉由調整媒體時間來加速或降低剪輯的速度;這不會影響最終輸出的畫面播放速率。
- 您可以增加或減少輸出畫面播放速率,而不會影響檔案播放的速度。
- 您可以在相同群組內混合具有不同撰寫畫面播放速率的來源檔案,而 DES 會向上取樣或向下取樣每個剪輯,以符合群組的畫面播放速率。
當您轉譯專案時,所有時間都會四捨五入到最接近的框架界限,如群組畫面播放速率所決定。 例如,假設影片群組的畫面播放速率為 30 fps。 每個畫面大約為 33 毫秒, (毫秒) 。 假設您將 1.68 秒的來源剪輯新增至時間軸,從時間零開始。 來源不會完全在畫面界限上結束,因此 DES 會將停止時間四捨五入為 1.6666 秒, (50 個畫面格) 。 如果您在轉譯的專案中搜尋 1.68 秒,您實際上會搜尋超過來源結尾到第 51 個畫面格。
不過,DES 不會覆寫來源的停止時間。 您稍後可能會變更群組畫面播放速率,或將來源移至時間軸中以不同方式四捨五入的新位置。 因此,DES 只會保留原始的停止時間,並在必要時才四捨五入。 如需詳細資訊,請參閱 IAMTimelineObj::FixTimes。
相關主題