VCR 服务
Windows 通过基于 VCR 的 MCI 命令集的设备驱动程序提供 VCR 服务。 本部分介绍 (VISCA) 驱动程序的 MCI 视频系统控制体系结构,并说明如何使用它来控制 VCR。
vcr 设备类型控制 VCR。 有关 VCR 设备可识别的 MCI 命令的列表,请参阅 VCR 命令集。
MCI VISCA 驱动程序
MCI VISCA 驱动程序控制与索尼 VISCA 兼容的 VCR,例如 CVD-1000 VDeck。 VISCA 驱动程序控制磁带传输、通道调谐器以及 VCR 输入和输出通道。
使用 VCR 进行搜索和定位
VISCA 驱动程序使用两种方法跟踪 VCR 磁带传输中的录像带移动:时间代码信息和磁带计数器。 Timecode 信息是录制在录像带上的计时信息。 大多数 VCR 允许在不破坏音频和视频轨道的情况下录制时间代码。 磁带计数器估计通过录像带头获取位置的录像带的数量。
随着录像带从头到尾的移动,时间代码信息和磁带计数器都增加。 由于它的准确性,使用时间代码信息定位录像带几乎总是比使用磁带计数器更可取。
用于指定定位信息的 MCI 命令标志表示为时间依赖项:“时间格式”、“持续时间”、“from”、“to”和“seek”。 (状态“位置 ”命令以当前时间格式返回其时间值。)
VISCA 驱动程序使用 set “time mode”命令来选择要用于录像带的定位类型。 当时间模式设置为“timecode”时, 状态 “位置”和 设置 “时间格式”命令将使用录像带上的时间码。 当时间模式设置为“计数器”时, 状态 “位置”和 设置 “时间格式”命令使用计数器。
如果位置信息可能有两个源并不重要,应用程序可以将时间模式设置为“检测”。 处于检测模式时,当出现以下任一情况时,VISCA 驱动程序使用时间代码信息进行定位:
- 打开驱动程序时,会出现时间代码信息。
- 使用 设置 的“开门”命令更改录像带,录像带上会显示时间代码信息。
- 将重新发出 设置 的“时间模式”命令。
如果找不到时间码信息,驱动程序将使用磁带计数器。
若要确定当前定位方法,请发出 状态 “时间类型”命令,该命令返回“timecode”或“counter”。 还可以通过使用 状态 “时间模式”命令(返回“timecode”、“counter”或“detect”)来标识当前定位模式。
无论当前定位方法如何, 状态 “counter”命令都会检索当前磁带计数器值;但是,只能将此计数器读取与 设置 的“counter”命令一起使用。
VISCA 驱动程序可以通过同时使用 状态 “时间码类型”和 状态 “帧速率”命令来检索录像带上记录的本机时间码格式。 例如,如果时间码类型为“smpte”且帧速率为 25,则录像带上记录的本机时间码格式为 SMPTE 25。
VISCA 驱动程序还可以使用 状态 “计数器解析”命令检索计数器分辨率,该命令返回“秒”或“帧”。 计数器格式可能仍设置为 SMPTE 30,但返回值仅返回 0 帧。 如果当前时间类型为计数器,则此解析也适用于 状态 “位置”返回的值。
捕获帧
帧捕获命令为 帧捕获设备提供静态图像。 帧捕获设备是一个单独的硬件,能够读取和存储视频图像。 VISCA 驱动程序支持 冻结 (MCI_FREEZE) 命令来稳定静态图像以供捕获。 此外,解 冻 (MCI_UNFREEZE) 命令可用于在 冻结 命令后重启磁带传输。
冻结命令为帧捕获设备提供高质量、稳定、基于时间的更正图像。 之所以存在此命令,是因为设备在播放期间或暂停时可能并不总是提供其最高质量的输出图像;此类视频图像不适合捕获。
取消冻结命令会解锁磁带传输,并在冻结命令之前恢复有效的传输模式。
当应用程序需要在 VCR 上录制视频图像时,请使用 冻结 “输入”命令或 提示 (MCI_CUE) 命令来录制图像。
选择输入
VISCA 驱动程序支持三种输入类型:视频、音频和时间代码。 视频输入包括两个标准通道 (第 1 行和第 2 行) ,一个 SVideo 通道、一个辅助通道和一个来自内部调谐器的通道。 音频输入包括两个标准通道 (第 1 行和第 2 行) ,以及一个来自内部调谐器的通道。 时间代码输入在 VCR 内部。
当 VCR 正在录制或停止磁带传输时,正常输出会携带当前选择的输入,并在播放或暂停磁带传输时携带录像带的内容。 受监视的输出与正常输出以及当前时间代码和通道信息携带相同的信息。
假设相应的外部输入已连接到 VCR,并且已确定要记录的内容,则可以选择要记录的输入。 例如,若要录制或查看“svideo”视频和“第 1 行”音频输入,可以使用 setvideo (MCI_SETVIDEO) 和 setaudio (MCI_SETAUDIO) 命令来选择这些输入源。 可以使用状态 (MCI_STATUS) 命令来验证这些选择。
默认情况下,监视器显示输出的确切内容。 但有时,你可能希望在从另一个源进行录制时查看一个源。 这是使用调谐器的常见做法。 例如,在录制通道 7 时,可能需要watch通道 4。 在本例中,你有两个逻辑优化器输入。 可以使用以下命令设置 VCR:
从另一个源进行录制时查看一个源
- 使用 settuner (MCI_SETTUNER) 命令选择要watch和录制的通道。
- 使用 setvideo 命令选择视频录制源。
- 使用 setaudio 命令选择音频录制源。
- 使用 setvideo 命令将通道 4 视频输入路由到受监视的输出,使其在屏幕上显示。
- 使用 setaudio 命令将通道 4 音频输入路由到受监视的输出以播放音频。
- 使用 status 命令验证所选内容。
VISCA 驱动程序还支持音频和视频的特殊输入类型,称为 静音。 静音允许选择“无输入”,这在录制空白信号时很有用。
选择录制轨道
录像带上存在三种类型的录制曲目:视频、音频和时间代码。 你只有一个视频或时间代码轨道,但可以使用多个音频轨道。执行此操作时,使曲目 1 成为main音轨。
VISCA 驱动程序支持两种操作模式:装配和插入。 在 汇编模式下,选择要记录的所有轨迹。 在 插入模式下,可以独立选择轨道进行录制。 默认情况下,大多数 VCR 处于汇编模式。 使用 set (MCI_SET) 命令更改这些模式。
录制和编辑
记录 (MCI_RECORD) 命令提供简单的记录,精确到大约 1 秒的起始位置。 若要更准确地录制,或者如果希望在同时操作多个幻灯片时编辑视频内容,应使用 提示 (MCI_CUE) 命令。
提示命令准备设备以进行录制或播放。 使用 提示 “input”命令准备设备以进行录制。 提示 命令是必需的 ,因为应用程序必须知道设备何时准备好 (执行命令,并且可能需要几分钟时间才能准备 播放 (MCI_PLAY) 或 记录 命令) 。
VCR 通过查找到 点(即当前位置或使用 提示 “from”命令指定的位置)来准备录制或播放。 但是,如果使用 提示 命令指定了“预滚动”标志,则 VCR 会将自身定位到点的预滚动距离。 “预滚动”标志还指示 VCR 使用任何适用的编辑模式,因此请务必使用“预滚动”,尤其是在需要最准确的录制时。 (使用功能 (MCI_GETDEVCAPS) 命令与“can preroll”标志检查是否支持预生成模式。)
注意
使用“from”和“to”位置进行录制时,编辑中包含“from”位置,“to”位置则不包含。
有关录制的详细信息,请参阅 录制。
编辑时使用时钟
编辑时,可能需要将段从一个 VCR 记录到另一个 VCR。 可以通过为每个 VCR 指定一个操作 (播放或录制) 、位置和时间,开始录制一个 VCR 上的特定时间和位置,而另一个 VCR 开始同时播放和位置。
对于这种类型的编辑,两个 VCR 必须使用相同的时钟;时钟有助于同步两个设备。 可以使用 状态 (MCI_STATUS具有“时钟 ID” 标志的) 命令来查询每个 VCR,从而确定两个 VCR 是否共享同一个时钟。 如果 status 命令返回的标识号相同,则设备使用相同的时钟。 作为共享资源,时钟可以连接到多个 VCR。 VISCA 驱动程序仅支持一个共享时钟。
还可以使用 状态 “时钟递增率”命令来确定时钟分辨率。 此命令返回时钟每秒支持的增量数。 例如,如果时钟每毫秒更新一次,该命令将返回 1000 作为时钟增量速率。 使用递增率的优点是速率表示为整数;否则,增量为 (单精度或双精度) 浮点值。 作为整数,操作递增率是一个简单的操作,不容易出现舍入错误。 可以通过将 set (MCI_SET) 命令与“clock 0” (零) 标志结合使用来重置时钟。
发出 播放 (MCI_PLAY) 、 记录 (MCI_RECORD) 或 查找 (MCI_SEEK) 命令时,可以指定何时执行命令。 正在使用的 VCR 的特征决定了何时启动每个 VCR。 计时必须考虑每个设备所需的预注册量,以及完成用于设置编辑会话的 MCI 命令所需的时间量。 为此,请检索时钟时间并添加 5 到 10 秒的等待间隔。 (等待间隔必须足够长,才能让预滚动和任何未完成的 MCI 命令完成执行。)
若要确保等待期足够长,请将记录命令放在应用程序中的最后一个位置,并检查紧靠前的时间。 如果间隔太短,请重启 play 命令。 或者,可以在脚本的最后一个命令之后立即检查时间,以验证是否有足够的时间发送和完成所有命令。