Display video or video frames?

I’m making a piece that includes frames from a video - is there any way to display video (or single frames from video) in SC?

I’ve been using OSC to locate a REAPER timeline but…

I saw that there was a MovieView class as part of some or another GUI scheme but this seems to be no more… any thoughts appreciated!

Not to my knowledge.

I would do it in Pure Data + Gem (or Ofelia, but for simple display of video frames, Gem’s [pix_film] is much much simpler).

[gemhead] --> [pix_film] --> [pix_texture] --> [rectangle 4 3] or other aspect ratio, play with the numbers for a reasonable display size

Then a [netreceive -u -b 7771] --> [oscparse] to get OSC messages from SC.

If Reaper is working for you, then no need to switch away from that, though.

hjh

Thanks James you’re a prince!

Ardour comes to mind as alternative to Reaper. It has video functionality and OSC.

https://manual.ardour.org/video/

It does seem like it would be nice to have natively! I read a blog post about someone using Blender to send OSC to SC by way of scoring video so there are others with the use case…

Ardour offloads video display to a second program, xjadeo, so if you’re going that way, better to use xjadeo directly (less weight).

Stupidest software name I’ve ever seen but it promises OSC-synced video display. I’ve used it through Ardour and it works cleanly.

It’s a matter of development priorities. Currently there are 131 open enhancements (not counting bugs!) so, unfortunately, the driving factor is not that people want it – the driving factor is, who will do it.

It seems that there’s no open or closed issue for a movie view – you could open a feature request. That’s how to communicate that you would like it as a a feature.

hjh

Done - I hate to ask, lacking the chops to help materially… Perhaps one day…

(Already 2020 in China! Americans have a few hours to go.)

Anyway, here’s a working example with xjadeo driven by OSC.

(
f = { |port(rrand(57131, 57151))|
	var pid = ("xjadeo -O " ++ port).unixCmd;
	[NetAddr("127.0.0.1", port), pid]
};
)

#n, p = f.(57135);  // help: Assignment Statements -> Multiple Assignment

n.sendMsg("/jadeo/load", "path-to-your/video-file.mp4");
n.sendMsg("/jadeo/jack/disconnect");  // necessary for /seek to work

// random seek
(
r = fork {
	loop {
		n.sendMsg("/jadeo/seek", rrand(1000, 8000).asInteger);
		exprand(0.05, 0.5).wait;
	}
};
)

r.stop;

// play forward
(
r = fork {
	var perFrame = 1/23.9;
	(1000 .. 4000).do { |i|
		n.sendMsg("/jadeo/seek", i);
		perFrame.wait;
	};
};
)

r.stop

n.sendMsg("/jadeo/quit");

Or, to sync with server latency, n.sendBundle(s.latency, ["/jadeo/seek", frameNumber]);.

hjh

3 Likes