查看原文
其他

Max/MSP/Jitter 教程06 - 控制视频播放

kidult00 科技无障碍 2022-11-03

Max/MSP/Jitter 教程 01 - 什么是矩阵?
Max/MSP/Jitter 教程 02 - Jitter 对象的属性
Max/MSP/Jitter 教程 03 - 播放 QuickTime 视频
Max/MSP/Jitter 教程 04 - 创建矩阵
Max/MSP/Jitter 教程 05 - 矩阵的数学运算

00 翻译自 Cycling74 的 Max/MSP/Jitter 官方文档:Tutorial 4: Controlling Movie Playback
https://docs.cycling74.com/max7/tutorials/jitterchapter04

本教程讲解在 Jitter 中播放 QuickTime 视频的进阶知识。我们将学习如何获得正在播放的视频的信息,以及如何更改速度、音量和循环点来控制视频的播放。

你应该已经熟悉 patch 中的两个 Jitter 对象: jit.moviejit.pwindow。其余部分尝试改变已加载到 jit.movie 对象中的视频的播放行为。

patch 的左边部分我们很熟悉了:


打开并播放视频

点击消息框 read crashtest.mov,打开文件。

jit.movie 一读入视频就开始播放。这个视频有配乐,因此视频加载后会立即听到音乐。视频配乐由计算机内置音响而不是 MSP 播放。如果不希望听到声音,可以将消息框 vol $ 的数字 1 改为 0。

即使视频正在播放,jit.pwindow 没有显示任何东西,因为 jit.movie 需要 bang 消息才能发送矩阵到 jit.pwindow。单击连接到其入口的开关,启动 metro 对象。这时视频图像出现在 jit.pwindow 中。先忽略 gettime 消息,等会我们会提到。

获取视频信息

jit.movie 打开新的视频时,会读取视频的大量信息(包含在视频的标题中),包括视频的长度、有多少帧、播放速度等。我们用这些元数据来控制视频播放。

要点:与许多可手动设置或由对象本身设置的 Jitter 属性不同, jit.movie 的许多属性都依赖于当前的视频文件。不同视频生成不同的设置。

要对 QuickTime 视频做的第一件事是读取元数据属性。可以向 jit.movie 发送 get 消息来检索。然后解析对象最右输出口的响应消息。我们需要的信息是帧速率,时间单位(time scale)(一秒钟内 “QuickTime 时间单位” 的数量),持续时间(QuickTime 的单位),播放速率和音量。这些都通过带有 getfps, gettimescale, getduration, getrate, getvol的消息框获得。

jit.movie 打开一个视频并播放时(发送read消息),它会向右输出口发送一条消息,告诉你它已找到视频并知道如何播放。如果要将打印对象连接到 jit.movie 的右输出口并重新加载影片,会在 Max Console 中看到:read crashtest.mov 1

在这个 patch 中,jit.movie 的右输出口连接了一个 route 对象。加载成功后它收到 read 消息并传递给 unpackselect,再触发 get消息。如果无法找到 crashtest.mov 文件,会在文件名后看到 1 以外的数字,并且不会发出请求。

自动查询 jit.movie 对象

除了捕获 read 消息之外,route 对象在接收到视频信息后做分发。Jitter 属性一般都由在 patch 中设置为相同格式的对象输出:属性的名称,后跟需要设置的信息。route 出口连接了数字框,以显示分发的值。虽然还不知道那些值代表什么,但是每次 jit.movie 成功加载新视频时都会显示属性。

开始,停止和减速

一些简单的视频播放控件

patch 的顶部有一些可以更改 jit.movie 回放行为的控件。向 jit.movie 发送 stop消息,将在视频当前帧停止播放。发送 start 消息将从上次停止的位置恢复播放。视频播放停止时,视频文件中的所有音轨也都将停止。停止和启动视频对 jit.movie 对象的矩阵输出没有影响,该输出仍然由 metro 对象控制。如果在开启 metro 的情况下停止播放视频,仍将以 metro 的速度收到新的矩阵对象(这里是每秒 25 次),虽然所有矩阵都是相同的。

更改视频的速率将改变音视频内容的播放速度。正的速率值使视频向前播放,值为 1 表示正常播放速度。负值将使视频倒退,速率为 0 将停止播放。jit.movie 的速度属性以浮点数为参数,因此值 0.5 会使视频播放速度减半,值 -2.3 以超过两倍的速度向后回放。调整这个值时,音轨会加速、减速、向后播放,跟视频保持同步。一旦视频到达其最后一帧(或回放时的第一帧),它将循环到文件的另一端。将 jit.movie 的 loop 属性设置为 0(无循环),1(常规循环)或 2(回文循环),可以更改此行为。

vol 属性控制视频音轨的音量(响度)。1 为全音量,0 将关闭声音。

加载视频时,速率和音量属性都由 pathc 中间的消息框初始化。它们会给出每个 QuickTime 影片中存储的值。

时间属性

之前查询了三个属性:duration,timescale 和 fps,告诉我们视频文件如何处理时间。Duration 说明了视频的总长度。这个值不以毫秒或帧表示,而是以 QuickTime 时间单位表示。每个时间单位的实际长度,取决于视频的时间单位。视频的 timescale 是每秒视频的分辨率。视频的duration / timescale 会得出视频的大致长度,以秒为单位。

例如, crashtest.mov 文件有一个持续时间为 2836 个时间单位和 600 的 timescale。视频大约持续 4.73 秒。如果想要用 2 秒钟播放视频,可以将 jit.movie 设置 time 1200(1200 时间单位除以 600 单位/秒的时间刻度得到 2 秒)。

视频中的 fps (或每秒帧数)说明每秒显示多少单独的视频图像。fps 越高,视频播放就越平滑(假设每帧都不一样)。常见的 fps 速率是15, 24, 29.97 和 30。这个例子中的视频以每秒 15 帧的速度播放,也就是每 40 个时间单位,或大约每 66.7毫秒,会更新一个视频帧。如果用 crashtest.mov 的持续时间,除以视频中每帧的 time units,可以得到视频文件有 70 帧。如果需要,可以用 getframecount 消息查询 jit.movie 视频中的总帧数。

截取和循环


显示和设置当前播放帧

patch 底部区域包含两个进一步操作视频播放的控件。左侧的数字框显示视频当前正在播放的帧。该值由 patch 顶部的 metro 对象发送到 jit.moviegettime 消息更新; 每次输出新的一帧时,时间都会更新。如果停止视频传输(向 jit.movie 发送 stop消息),可以拖动数字框来“截取”视频。视频会跳转到 frame 消息指定的参数那一帧。


设置视频中的循环点

用两个整数参数设置 looppoints属性,可以将循环点(指定循环开始和结束的时间值)发送到 jit.movie。教程 patch 中的 rslider 可以指定 jit.movie 的循环区间。在加载视频时查询属性,将 rslider 的大小设置为视频的时长。可以发送不带参数的  looppoints 消息重置循环点。

小结

jit.movie 提供了一些简单的属性来改变 QuickTime 播放内容的方式。可以使用这些消息停止和开始播放视频。速度属性可以改变播放速度和视频播放的方向。使用 vol 属性控制视频音轨的音量。

查询 duration,time scale 和 fps 等属性可获取加载到 jit.movie 中视频的属性。用 frame 消息可跳转到视频中的特定帧,并且可以设置和检索循环点。发送 gettime 消息可以查询视频的当前时间位置。

更多强大的功能(例如编辑和保存视频)将在后面的教程中讨论。


友情提示:独自折腾 Max 易患上癔症……不妨入群互助

👇👇👇


更多 Max/MSP 应用,请翻阅 MakeNoise 系列

MakeNoise01 - 声音是什么?
MakeNoise02 - 频率和音高
MakeNoise03 - 振幅/响度/音量/增益 大乱斗
MakeNoise04 - 波形和相位
MakeNoise05 - Envelope 包络(ADSR)
MakeNoise06 - 音色和均衡器(EQ)
MakeNoise07 - 音频的「分辨率」
MakeNoise08 - 振荡器和滤波器
MakeNoise09 - 压缩 Compression
MakeNoise10 - 延时和混响

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存