【发布时间】:2020-03-27 12:33:05
【问题描述】:
这一定是一件非常愚蠢的事情——如果是这样的话,我很抱歉:)——但我确实已经被这个简单的问题困扰了很长时间,而且我似乎无法理解它。在 processing.org 文档或论坛上找不到任何内容。
所以基本上,我所做的只是加载.mp4 Movie,设置framerate,并将其设置为loop()。一切都按原样绘制,但唯一的问题是.framerate() 似乎不会影响电影本身。这是我的简化代码以供理解:
String urlCam1 = "Something.mp4";
Movie camera1;
Movie currentCam;
boolean drawNextFrame = false;
void setup() {
fullScreen();
camera1 = new Movie(this, urlCam1);
camera1.frameRate(1);
camera1.loop();
background(0);
}
void draw() {
if (drawNextFrame) {
image(currentCam, 0, 0, 100, 100);
drawNextFrame = false;
}
}
void movieEvent(Movie m) {
print("Video Read");
m.read();
drawNextFrame = true;
currentCam = m;
}
您可能想知道我为什么要使用如此奇怪的结构(尤其是currentCam),那是因为我同时绘制了多部电影。但我只用一部电影(如代码所示)尝试了代码,但问题仍然存在。
注意camera1.framerate 是如何设置为 1 fps 的。出于某种原因,即使没有给出错误,这行似乎也被忽略了。 movieEvent() 不是每秒调用一次,而是更多,因此,视频的当前帧也不是每秒绘制一次,即使我已将电影的帧速率明确设置为 1fps...
这是为什么呢?我在这里遗漏了什么吗?
提前致谢! :)
【问题讨论】:
-
我能够重现此问题。我没有看到代码有任何问题。我发现了一个 hack 来重现预期的结果,但没有解决真正的问题。让我知道您是否想要 hack(即,如果您只想要视觉效果而没有较低帧速率的好处)。
-
感谢@laancelot 的评论。在尝试了很长时间之后,我决定使用 speed() 来代替它,它得到了我想要的结果,基本上只是视频的帧速率变慢了。但是,如果您无法重现该问题,则 framerate() 必须有效,所以我一定是在这里做错了...虽然它的精确度要低得多,因为它需要速度的倍数而不是速度本身。但我会管理的,谢谢:) 另外,你知道 framerate() 和 speed() 之间的区别吗?谢谢!
-
我能够重现该问题。我什至用 Processing Foundation 展示的示例代码来解释
framerate()。函数本身可能有问题,或者我们可能共享了错误的设置。 -
framerate不会改变视频的速度,它只会减少每秒显示的帧数。半速 10 秒的视频将持续 20 秒。半帧率的同一视频仍将持续 10 秒。 -
哦,谢谢@laancelot!我虽然这两个功能基本上做同样的事情,但你的解释澄清了事情。当我想到它时,这很合乎逻辑。我想一定让我感到困惑的是,草图 framerate() 函数会改变草图的速度。但是,是的, speed() 是我正在寻找的,但是 framerate() 似乎并没有像你解释的那样工作。再次感谢你!如果你愿意,你可以发布这个评论作为答案,我会接受它:)
标签: video processing frame-rate