VCR 服務
[與此頁面相關聯的功能 MCI是舊版功能。 MediaPlayer已取代它。 MediaPlayer 已針對 Windows 10 和 Windows 11 優化。 Microsoft強烈建議新程式代碼盡可能使用 MediaPlayer,而不是 MCI。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]
Windows 透過裝置驅動程式提供 VCR 服務,該驅動程式是以 VCR 的 MCI 命令集為基礎。 本節說明 MCI 影片系統控制架構 (VISCA) 驅動程式,並說明如何使用它來控制 VCR。
vcr 裝置類型控制 VCR。 如需 VCR 裝置所辨識的 MCI 命令清單,請參閱 VCR 命令集。
MCI VISCA 驅動程式
MCI VISCA 驅動程式會控制索尼 VISCA 相容的 VCR,例如 CVD-1000 VDeck。 VISCA 驅動程式會控制磁帶傳輸、通道微調器和 VCR 輸入和輸出通道。
使用 VCR 搜尋和定位
VISCA 驅動程式會使用兩種方法來追蹤 VCR 磁帶傳輸內的視訊帶移動:timecode 資訊 和 磁帶計數器。 Timecode 資訊是錄像帶上錄製的計時資訊。 大部分的 VCR 允許錄製時間碼,而不會終結音訊和視訊曲目。 磁帶計數器會估計經過錄像帶頭部以取得位置的錄像帶數量。
當錄像帶從頭到尾移動時,時間代碼資訊和磁帶計數器都會增加。 由於精確度,使用時間代碼資訊來定位錄像帶,幾乎一律最好使用磁帶計數器。
指定位置資訊的 MCI 命令旗標會以時間相依性表示:「時間格式」、“持續時間”、“from”、“to”和 “seek”。 (此外,狀態 “position” 命令會以目前時間格式傳回其時間值。
VISCA 驅動程式會使用 set “time mode” 命令來選取要與視訊帶搭配使用的定位類型。 當時間模式設定為 「timecode」 時,狀態 「位置」,並 設定 「時間格式」命令時,會在視訊帶上使用 timecode。 當時間模式設定為 「counter」時,狀態 「位置」,使用計數器「時間格式」命令來設定。
應用程式可以將時間模式設定為「偵測」,如果可能有兩個位置資訊來源並不重要。 當處於偵測模式時,VISCA 驅動程式會使用 timecode 資訊來定位下列任一情況:
- 開啟驅動程式時,會出現 timecode 資訊。
- 您可以使用 集「開門」命令變更錄像帶,並在視訊帶上顯示時間碼資訊。
- 重新發出「時間模式」命令集。
如果找不到 timecode 資訊,驅動程式會使用磁帶計數器。
若要判斷目前的定位方法,請發出 狀態 “time type” 命令,此命令會傳回 “timecode” 或 “counter”。 您也可以使用 狀態「時間模式」命令來識別目前的位置模式,此命令會傳回 “timecode”、“counter” 或 “detect”。
狀態 「counter」 命令會擷取目前的磁帶計數器值,而不論目前定位方法為何;不過,您只能搭配 集 “counter” 命令使用此計數器讀取。
VISCA 驅動程式可以使用 狀態“timecode 類型”,並 狀態「幀速率」命令,擷取在視訊帶上錄製的原生時間代碼格式。 例如,如果 timecode 類型為 “smpte”,且幀速率為 25,則視訊錄帶上錄製的原生時間代碼格式為 SMPTE 25。
VISCA 驅動程式也可以使用 狀態「計數器解析」命令來擷取計數器解析,此命令會傳回「秒」或「畫面格」。 計數器格式可能仍設定為 SMPTE 30,但傳回值只會傳回 0 的框架。 如果目前的時間類型是計數器,則此解析度也適用於 狀態所傳回的值,「位置」。
擷取框架
畫面格擷取命令會為 畫面擷取裝置提供影像。 畫面擷取裝置是一個獨立的硬體,能夠讀取和儲存視訊影像。 VISCA 驅動程式支援 凍結 (MCI_FREEZE) 命令,以穩定仍要擷取的影像。 此外,解除凍結 (MCI_UNFREEZE) 命令可用來在 凍結 命令之後重新啟動磁帶傳輸。
凍結 命令會為畫面擷取裝置提供高品質、穩定、時間基底的影像。 此命令存在,因為裝置可能不會在播放期間或暫停時提供其最大品質輸出影像;這類視訊影像不適合擷取。
解除凍結 命令會解除鎖定磁帶傳輸,並在 凍結 命令之前繼續傳輸模式。
當您的應用程式需要在 VCR 上錄製視訊影像時,請使用 凍結「輸入」命令或 提示 (MCI_CUE) 命令來錄製影像。
選取輸入
VISCA 驅動程式支援三種輸入類型:視訊、音訊和時間碼。 視訊輸入包括兩個標準通道(第 1 和 2 行)、SVideo 通道、輔助通道,以及來自內部微調器的通道。 音訊輸入包括兩個標準通道(第 1 行和第 2 行),以及來自內部微調器的通道。 timecode 輸入是 VCR 的內部。
當 VCR 正在錄製或磁帶傳輸停止時,一般輸出會攜帶目前選取的輸入,並在磁帶傳輸播放或暫停時攜帶視訊帶的內容。 受監視的輸出會攜帶與一般輸出相同的資訊,以及目前的 timecode 和通道資訊。
假設適當的外部輸入已連線到您的 VCR,而且您已決定要記錄的內容,您可以選取要記錄的輸入。 例如,若要從 「svideo」 視訊和 「line 1」 音訊輸入錄製或檢視,您可以使用 setvideo (MCI_SETVIDEO) 和 setaudio (MCI_SETAUDIO) 命令來選取這些輸入來源。 您可以使用 狀態 (MCI_STATUS) 命令來驗證這些選取專案。
根據預設,監視器會顯示完全顯示為輸出的內容。 不過,有時候,您可能會想要從另一個來源錄製時檢視一個來源。 這是使用微調器的常見作法。 例如,您可能會想要在錄製通道 7 時監看通道 4。 在此情況下,您有兩個邏輯微調器輸入。 您可以使用下列命令來設定 VCR:
從另一個來源錄製時檢閱一個來源
- 使用 settuner (MCI_SETTUNER) 命令來選取要監看和錄製的通道。
- 使用 setvideo 命令來選取視訊錄製來源。
- 使用 setaudio 命令來選取音訊錄製來源。
- 使用 setvideo 命令,將通道 4 視訊輸入路由傳送至受監視的輸出,以在畫面上顯示。
- 使用 setaudio 命令,將通道 4 音訊輸入路由傳送至受監視的輸出,以播放音訊。
- 使用 狀態 命令來確認您的選取專案。
VISCA 驅動程式也支援音訊和視訊的特殊輸入類型,稱為 靜音。 靜音允許選取「無輸入」,這在錄製空白訊號時很有用。
選取錄製曲目
錄像帶上存在三種類型的錄製曲目:視訊、音訊和時間碼。 您只有一個視訊或時間代碼曲目,但您可以使用多個音訊播放軌。當您這樣做時,請將曲目 1 設為主要音訊播放軌。
VISCA 驅動程式支援兩種作業模式:組合和插入。 在 元件模式中,系統會選取所有曲目來記錄。 在 插入模式中,可以獨立選取曲目進行錄製。 根據預設,大部分的 VCR 會處於組合模式。 使用 set (MCI_SET) 命令來變更這些模式。
錄製和編輯
記錄 (MCI_RECORD) 命令提供簡單的錄製,且精確到大約 1 秒的起始位置。 若要更準確地錄製,或如果您預期在同時作多個甲板時編輯視訊內容,您應該使用 提示 (MCI_CUE) 命令。
提示 命令會準備裝置進行錄製或播放。 使用 提示「輸入」命令來準備裝置進行錄製。 需要 提示 命令,因為應用程式必須知道裝置何時準備好執行命令(而且可能需要幾分鐘的時間才能準備 播放(MCI_PLAY)或 記錄 命令)。
VCR 會藉由搜尋 點內來準備錄製或播放,這是使用 提示 “from” 命令所指定的目前位置或位置。 不過,如果使用 提示 命令來指定「預先標籤」旗標,VCR 就會將預先標籤距離置入點。 「預先標籤」旗標也表示 VCR 使用任何適用的編輯模式,因此請務必使用「預先標籤」,特別是當您想要最精確的錄製時。 (使用 功能 (MCI_GETDEVCAPS) 命令搭配 「可以預先標籤」旗標來檢查預製模式是否受到支援。
注意
當您使用 「from」 和 「to」 位置錄製時,編輯中包含 「from」 位置,而 「to」 位置則不是。
如需錄製的詳細資訊,請參閱 錄製。
在編輯時使用時鐘
編輯時,您可能會想要將區段從一個 VCR 記錄到另一個 VCR。 您可以藉由指定動作(播放或錄製)、位置,以及每個 VCR 的時間,開始錄製於某個 VCR 的特定時間和位置,另一個 VCR 開始同時播放和位置。
這兩個 VCR 都必須針對這種類型的編輯使用相同的時鐘;時鐘有助於同步處理這兩個裝置。 您可以使用 狀態 (MCI_STATUS) 命令搭配 “clock id” 旗標來查詢每個 VCR,來判斷兩個 VCR 是否共用相同的時鐘。 如果 狀態 命令傳回的標識符相同,裝置會使用相同的時鐘。 作為共用資源,時鐘可以連線到多個 VCR。 VISCA 驅動程式僅支援一個共享時鐘。
您也可以使用 狀態「時鐘遞增速率」命令來判斷時鐘解析度。 此命令會傳回時鐘每秒支援的遞增數目。 例如,如果時鐘每毫秒更新一次,命令就會傳回 1000 作為時鐘遞增速率。 使用遞增速率的優點是速率是以整數表示;否則,遞增會是 (單精度或雙精確度) 浮點數。 做為整數,作遞增速率是一個簡單的作業,而且不容易四捨五入錯誤。 您可以使用 set (MCI_SET) 命令搭配 “clock 0” (zero) 旗標來重設時鐘。
發出 播放(MCI_PLAY),記錄(MCI_RECORD),或 搜尋(MCI_SEEK)命令時,您可以指定何時執行命令。 所使用的 VCR 特性會決定何時啟動每個 VCR。 時間必須考慮到每個裝置所需的預先註冊量,以及完成用來設定編輯會話之 MCI 命令所需的時間量。 若要這樣做,請擷取時鐘時間,並新增 5 到 10 秒的等候間隔。 (等候間隔必須足夠長,才能讓預先標籤和任何未完成的MCI命令完成執行。
為了確保等候期間夠長,請將 記錄 命令放在應用程式最後,並立即檢查時間。 如果間隔太短,請重新啟動 播放 命令。 或者,您可以在腳本的最後一個命令之後立即檢查時間,以確認有足夠的時間傳送和完成所有命令。