VCR サービス
Windows では、VCR の MCI コマンド セットに基づくデバイス ドライバーを介して VCR サービスが提供されます。 このセクションでは、MCI Video System Control Architecture (VISCA) ドライバーについて説明し、それを使用して VCR を制御する方法について説明します。
vcr デバイスの種類は、VCR を制御します。 VCR デバイスによって認識される MCI コマンドの一覧については、「 VCR コマンド セット」を参照してください。
MCI VISCA ドライバー
MCI VISCA ドライバーは、CVD-1000 VDeck などの Sony VISCA 互換 VR を制御します。 VISCA ドライバーは、テープ トランスポート、チャネル チューナ、VCR 入出力チャネルを制御します。
VCR を使用した検索と配置
VISCA ドライバーは、2 つの方法を使用して、VCR テープ トランスポート内のビデオテープの移動を追跡します。 タイムコード情報 と テープ カウンターです。 タイムコード情報は、ビデオテープに記録されたタイミング情報です。 ほとんどの VVC では、オーディオトラックとビデオトラックを破棄せずにタイムコードを記録できます。 テープ カウンターは、位置を取得するために videotape ヘッドを越えて移動するビデオテープの量を推定します。
ビデオテープが最初から最後に移動すると、タイムコード情報とテープ カウンターの両方が増加します。 その精度のため、タイムコード情報を使用してビデオテープを配置することは、ほとんどの場合、テープ カウンターを使用する方が望ましいです。
位置情報を指定するための MCI コマンド フラグは、時間の依存関係として表されます。"time format"、"duration"、"from"、"to"、"seek" です。 (また、 状態 "position" コマンドは、現在の時刻形式で時刻値を返します。
VISCA ドライバーでは、 set "time mode" コマンドを使用して、videotape で使用する配置の種類を選択します。 時刻モードが "timecode" に設定されている場合、 状態 "position" コマンドと set "time format" コマンドは videotape のタイムコードを使用します。 時刻モードが "counter" に設定されている場合、 状態 "position" と set "time format" コマンドはカウンターを使用します。
アプリケーションは、位置情報のソースが 2 つある可能性が問題でない場合に、時間モードを "検出" に設定できます。 検出モードの場合、VISCA ドライバーは、次のいずれかの条件が発生したときに位置付けにタイムコード情報を使用します。
- タイムコード情報は、ドライバーを開いたときに存在します。
- "door open" コマンドを 設定 して videotape を変更すると、videotape にタイムコード情報が存在します。
- set "time mode" コマンドが再発行されます。
タイムコード情報が見つからない場合、ドライバーはテープ カウンターを使用します。
現在の配置方法を確認するには、 状態 "time type" コマンドを発行します。このコマンドは"timecode" または "counter" を返します。 また、"timecode"、"counter"、または "detect" を返す 状態 "time mode" コマンドを使用して、現在の配置モードを識別することもできます。
状態 "counter" コマンドは、現在の配置方法に関係なく、現在のテープ カウンター値を取得します。ただし、このカウンター読み取りは、設定された "counter" コマンドでのみ使用できます。
VISCA ドライバーは、状態 "タイムコードの種類" コマンドと状態 "フレーム レート" コマンドを一緒に使用して、videotape に記録されたネイティブ タイムコード形式を取得できます。 たとえば、タイムコードの種類が "smpte" で、フレーム レートが 25 の場合、videotape に記録されるネイティブ タイムコード形式は SMPTE 25 になります。
VISCA ドライバーは、"秒" または "フレーム" を返す 状態 "counter resolution" コマンドを使用してカウンター解決を取得することもできます。 カウンター形式は引き続き SMPTE 30 に設定できますが、戻り値は 0 のフレームのみを返します。 現在の時刻型がカウンターの場合、この解決は 状態 "position" によって返される値にも適用されます。
フレームのキャプチャ
フレーム キャプチャ コマンドは、 フレーム キャプチャ デバイスの静止画像を提供します。 フレーム キャプチャ デバイスは、ビデオ イメージの読み取りと格納が可能な別のハードウェアです。 VISCA ドライバーは、 固定 (MCI_FREEZE) コマンドをサポートして、キャプチャ用の静止画像を安定させます。 また、 フリーズ解除 (MCI_UNFREEZE) コマンドを使用して、 freeze コマンドの後にテープ・トランスポートを再始動することもできます。
freeze コマンドは、フレーム キャプチャ デバイスの高品質で安定した時間ベースの修正済み画像を提供します。 このコマンドは、デバイスが再生中または一時停止中に常に最大品質の出力イメージを提供するとは限らないため、存在します。このようなビデオ画像はキャプチャには適していません。
unfreeze コマンドは、テープ トランスポートのロックを解除し、freeze コマンドの前に有効なトランスポート モードを再開します。
アプリケーションで VCR にビデオ イメージを記録する必要がある場合は、 freeze "input" コマンドまたは cue (MCI_CUE) コマンドを使用して画像を記録します。
入力の選択
VISCA ドライバーは、ビデオ、オーディオ、タイムコードの 3 種類の入力をサポートしています。 ビデオ入力には、2 つの標準チャネル (1 行目と 2 行目)、SVideo チャネル、補助チャネル、および内部チューナからのチャネルが含まれます。 オーディオ入力には、2 つの標準チャネル (1 行目と 2 行目) と内部チューナからのチャネルが含まれます。 タイムコード入力は、VCR の内部です。
通常の出力は、VCR が記録されている場合、またはテープ トランスポートが停止したときに現在選択されている入力を保持し、テープ トランスポートの再生または一時停止時に videotape の内容を保持します。 監視対象の出力には、通常の出力と同じ情報と、現在のタイムコードとチャネル情報が含まれます。
適切な外部入力が VCR に接続されていて、何を記録するかを決定した場合は、記録する入力を選択できます。 たとえば、"svideo" ビデオと "1 行目" のオーディオ入力を記録または表示するには、 setvideo (MCI_SETVIDEO) コマンドと setaudio (MCI_SETAUDIO) コマンドを使用して、これらの入力ソースを選択します。 これらの選択は、 status (MCI_STATUS) コマンドを使用して確認できます。
既定では、モニターには出力として表示される内容が正確に表示されます。 ただし、あるソースを別のソースから記録するときに表示したい場合があります。 これは、チューナを使用する一般的な方法です。 たとえば、チャネル 7 を記録するときにチャネル 4 をwatchできます。 この場合、2 つの論理チューナ入力があります。 次のコマンドを使用して、VCR を設定できます。
別のソースからの記録中に 1 つのソースを確認するには
- settuner (MCI_SETTUNER) コマンドを使用して、watchして記録するチャネルを選択します。
- setvideo コマンドを使用して、ビデオ記録ソースを選択します。
- setaudio コマンドを使用して、オーディオ録音ソースを選択します。
- setvideo コマンドを使用して、チャネル 4 のビデオ入力を監視対象の出力にルーティングし、画面に表示します。
- setaudio コマンドを使用して、チャネル 4 のオーディオ入力を監視対象の出力にルーティングしてオーディオを再生します。
- status コマンドを使用して、選択内容を確認します。
VISCAドライバーは、 ミュートと呼ばれるオーディオとビデオのための特別な入力タイプもサポートしています。 ミュートを使用すると、空の信号を記録するときに便利な「入力なし」を選択できます。
録音トラックの選択
ビデオテープには、ビデオ、オーディオ、タイムコードの 3 種類の録音トラックが存在します。 ビデオ トラックまたはタイムコード トラックは 1 つだけですが、複数のオーディオ トラックを使用できます。その場合は、トラック 1 をオーディオ トラックメインにします。
VISCA ドライバーは、アセンブルと挿入の 2 つの動作モードをサポートしています。 アセンブルモードでは、録音するすべてのトラックが選択されます。 挿入モードでは、録音用にトラックを個別に選択できます。 ほとんどの VCR は、既定でアセンブル モードになっています。 set (MCI_SET) コマンドを使用して、これらのモードを変更します。
記録と編集
record (MCI_RECORD) コマンドは簡単な記録を提供し、開始位置の約 1 秒まで正確です。 より正確に記録するには、または複数のデッキを同時に操作しながらビデオコンテンツを編集する場合は、 キュー (MCI_CUE)コマンドを使用する必要があります。
キュー コマンドは、録音または再生用にデバイスを準備します。 キュー "input" コマンドを使用して、記録用のデバイスを準備します。 キュー コマンドは、デバイスがいつコマンドを実行できるかをアプリケーションが認識する必要があるためです (また、再生 (MCI_PLAY) またはレコード コマンドの準備に数分かかる場合があるためです。
VCR は、イン ポイント (現在の位置または キュー "from" コマンドを使用して指定された位置) をシークして、記録または再生用に自身を準備します。 ただし、 キュー コマンドで "preroll" フラグが指定されている場合、VCR はそれ自体をインポイントからの事前ロール距離に配置します。 "preroll" フラグは、VCR が適用可能な編集モードを使用していることを示します。そのため、特に最も正確な記録が必要な場合は、"preroll" を使用することが重要です。 (プリロール モードがサポートされているかどうかをチェックするには、"プリロール可能" フラグを指定して capability (MCI_GETDEVCAPS) コマンドを使用します)。
注意
"from" と "to" の位置を使用して記録する場合、"from" の位置は編集に含まれ、"to" の位置は含まれません。
記録の詳細については、「 記録」を参照してください。
編集中のクロックの使用
編集時に、ある VCR から別の VCR にセグメントを記録することが必要になる場合があります。 1 つの VCR で特定の時刻と位置に記録を開始し、別の VCR で同時に再生を開始し、各 VCR のアクション (再生または記録)、位置、および時刻を指定します。
両方の VCR は、この種類の編集に同じクロックを使用する必要があります。クロックは両方のデバイスを同期するのに役立ちます。 2 つの VCR が同じクロックを共有しているかどうかを確認するには、 status (MCI_STATUS) コマンドと "clock id" フラグを使用して各 VCR に対してクエリを実行します。 status コマンドによって返される識別番号が同じ場合、デバイスは同じクロックを使用します。 共有リソースとして、クロックを複数の VCR に接続できます。 VISCA ドライバーは、共有クロックを 1 つだけサポートします。
また、 状態 "clock increment rate" コマンドを使用して、クロックの解像度を確認することもできます。 このコマンドは、クロックが 1 秒あたりにサポートする増分の数を返します。 たとえば、クロックがミリ秒ごとに更新される場合、コマンドはクロック 増分レートとして 1000 を返します。 増分レートを使用する利点は、レートが整数で表される点です。それ以外の場合、増分は (単精度または倍精度) 浮動小数点値になります。 整数として、増分レートの操作は単純な操作であり、丸めエラーの影響を受けにくいです。 "clock 0" (ゼロ) フラグを指定して set (MCI_SET) コマンドを使用してクロックをリセットできます。
再生 (MCI_PLAY)、レコード (MCI_RECORD)、または seek (MCI_SEEK) コマンドを発行する場合は、コマンドをいつ実行するかを指定できます。 使用される VCR の特性によって、各 VCR を開始するタイミングが決まります。 タイミングは、各デバイスに必要なプリロールの量と、編集セッションの設定に使用される MCI コマンドの完了に必要な時間を考慮する必要があります。 これを行うには、クロック時間を取得し、5 秒から 10 秒の待機間隔を追加します。 (待機間隔は、プリロールと未処理の MCI コマンドの実行を完了するのに十分な長さである必要があります)。
待機期間が十分に長くならないようにするには、record コマンドをアプリケーションの最後に配置し、直前の時刻をチェックします。 間隔が短すぎる場合は、 play コマンドを再起動します。 または、スクリプトの最後のコマンドの直後の時刻をチェックして、すべてのコマンドを送信して完了するのに十分な時間があることを確認することもできます。