Simple Video Delay

I’m looking for the ability to delay HDMI 1080p video from 1-7 seconds. So I need to have simultaneous input/output, but with an adjustable time delay in between. I have a Blackmagic Intensity Pro 4K for capture (video input) and don’t care if the OS is MAC or Windows (have 32GB RAM and 8 cores). Can VUO provide this simple video delay capability? The only other solution I have found is pro video hardware which costs $xx,xxx’s.

Hi @loddie,

You can follow this thread: delay  

If your computer has enough VRAM, and if your Blackmagic device supports it, you could accomplish this using the attached Vuo composition. It stores up the video frames as they come in, then starts passing them along to output after a delay.

7 seconds of stored video frames at 1080p is about 3.5 GB. You’d probably want a system with twice that to be safe (leaving room for Vuo’s input and output buffers, and system buffers). The high-end Mac Pro only has 6 GB of VRAM; the baseline iMac Pro has 8 GB of VRAM, so I’d recommend the latter.

Does the Blackmagic Intensity Pro 4K support full-duplex (simultaneous input and output)? If not, you’d need to replace the Send Blackmagic Video node with a Render Image to Window node to play back on the computer.

DelayBlackmagic.vuo (2.74 KB)

@jandraka - Thank-you for the link. I had come across it while searching but wasn’t sure how relevant it was.

@jstrecker - Thank-you for the detailed layout! Very kind of you to share. I’ll give it a try and even if it doesn’t meet my needs, it will be a reference for others. The Blackmagic does have output but I’m pretty sure it is just pass-through so I’ll try your alternate instructions. I have a better idea of the delay as it should be less than 4 seconds. If I use a PCIe card with a lot of RAM, would that work? Also, does VUO default to VRAM as opposed to RAM? I hope so as it seems VRAM would be faster and more reliable.

Actually, it does appear the Blackmagic Intensity Pro 4K is full duplex according a Blackmagic employee on this thread.

The Intensity Pro 4K uses the new architecture of the other Blackmagic Design cards announced in 2014 like SDI 4K and Studio 4K . The family of cards are real time full duplex meaning they can process input and output at same time.

However, I’m not sure that helps. From what I understand of video delay, a memory buffer is used, either RAM (computer) or VRAM (graphics card). Blackmagic doesn’t specify the VRAM of the Intensity Pro 4K, but my guess is it is insufficient for video delay. Thus, even though it is duplex, I will likely have to output video via another graphics card.

Currently I have the NVIDIA GeForce GTX 750 Ti with 2GB of VRAM. While it is likely going to be insufficient for a longer delay, I can use a very small buffer (say 0.25 seconds) for now to confirm everything works before investing in a card with more VRAM.

If I understand video delay correctly, it is generally better to use a VRAM buffer rather than a RAM buffer. However, I’m not sure which memory buffer VUO uses or if you have the option to select. From Jaymie’s comments, it seems VUO uses a VRAM buffer.

I played around with the record/play movie nodes yesterday, and it seems like it should be possible to simultaneously record to- and playback from the same file. I wouldn’t use this in any sort of production environment (or even demo) at this time, but would it be possible to make a node optimized for that to get around the whole RAM stuff? The idea being that the playback part is always at least one or two frames behind the record, and you can adjust your “playhead” from frame 1 to max frame (specified by either seconds or frame number). This way you should be able to skip through the whole recording, scratch playback and timewarp your live inputs. Would be cool (at least if it’s a relatively small adjustment of existing nodes)!

4 seconds (240 frames) should be trivial! I would just try the comp, and if it is a problem gear up, instead of gearing up and waste money if it isn’t needed. I just enqueued 500 frames (at 30fps) scaling up to 1080p from 720p without a hitch. Even with some processing thrown on top for good measure.

I tried Jaymie’s composition, but it won’t work in demo mode as the Blackmagic input/output node’s are only for the Pro version. However, digging around, I found this thread where Chris mentions he had success using the “Receive Live Video” node. And sure enough, I had success! See atttached screenshot of the composition that worked for me:

unnamed-1.jpg

Note: I had to add an additional cable from Fire on Start to Receive Video Live. Also, I did have the Get First From List node installed as Jaymie did, but it automatically disappears after connecting to Render Image to Window. Also, if I tried to Run without a Calculate (delay) value other than 0 seconds, it wouldn’t stream video - but after running I could it back to 0. Also, note my input framerate was 59.94.

I successfully delayed up to 10 seconds (didn’t try higher) of 1080P59.94 OTA live TV without too many artifacts. There is occasional frame stuttering and a few rendering artifacts that could have simply been the broadcast signal - not VUO. It seems very stable, but I haven’t tested it much yet. I did leave it running overnight and the computer had crashed the next morning, but I’m not sure if VUO was the cause.

@MartinusMagneson - actually I do want the video buffering in RAM. I am not an expert, but I have been told buffering in VRAM is best, in RAM next best, and simultaneously writing/reading the same file is the poorest for stable performance. However, each buffering method serves a purpose as more memory means longer buffering times. I’m pretty sure I will only need 2 seconds or less buffering after getting feedback on audio delay DSP times.

The good news is it seems to be buffering in RAM as the CPU load is only around 11% while the GPU load is around 60%, regardless of delay value (2-10 seconds). So this can be done on a older machine. However, when I observe the real time values in Render Image to Window>First Item, I notice the frame rate isn’t a stable 59.94fps - it continuously varies from ~59-62fps (no other software running). Perhaps disabling background processes will improve this or perhaps this is just an estimated frame rate.

I need to do more testing to determine if VUO will be a good solution for me, but so far it seems to be. For example, after 3 hours of playback, I need to determine if the audio and video will still be in sync or if they will drift (audio will be running on a seperate computer).

If the audio/video sync drifts, can the delay be adjusted in real time or will the composition have to be stopped and restarted? When changing from an extreme of 10 seconds to 2 seconds delay, the change doesn’t appear to take effect unless the composition is stopped and restarted. This could be problematic for my application.

So far, I’ve only tested with Seconds as the delay value. Can it also be delayed by number of frames? I’m curious if this may result in smoother playback and stabilize the fps.

Both Receive Live Video and Receive Blackmagic Video use CPU RAM to read the image from the capture device — because that’s how the capture devices provide it — and then Vuo transfers the image to VRAM.

Also, I did have the Get First From List node installed as Jaymie did, but it automatically disappears after connecting to Render Image to Window.

Yep, that’s fine. It’s called a collapsed type-converter. The idea is to make the little helper nodes smaller on the canvas to focus attention on the interesting nodes.

Also, if I tried to Run without a Calculate (delay) value other than 0 seconds, it wouldn’t stream video - but after running I could it back to 0.

That’s because of the Enqueue node. If its Max Item Count is 0, it outputs an empty list. (You can find this out by clicking on the Enqueue node and looking at its documentation in the panel below the node library.) To allow a delay of 0, you’d have to add a second path of nodes that bypasses the Enqueue node. The Select Output node might be helpful here.

If the audio/video sync drifts, can the delay be adjusted in real time or will the composition have to be stopped and restarted?

It can be adjusted in real time. I’m guessing it would either skip frames or repeat frames, depending on the adjustment.

After editing the Calculate input, be sure to fire another event into the node. An event is necessary to make the Calculate node execute and send its output along to Enqueue. Right now the only event it gets is the one from Fire on Start. You can right-click on an input port of the Calculate node and select Fire Event.

So far, I’ve only tested with Seconds as the delay value. Can it also be delayed by number of frames?

Yes. The Calculate node is calculating a number of frames. So actually, you can take that node out and enter the number of frames directly in the Enqueue node’s Max Item Count port if you want. (In that case, you don’t need to fire an extra event, because there are already events from Receive Live Video hitting the Enqueue node every frame.)

I did leave it running overnight and the computer had crashed the next morning, but I’m not sure if VUO was the cause.

Is there a crash report dated that night in Console.app under User Reports, with Vuo or your composition identified as the application? If so, feel free to file a bug report.

Hi Jaymie, Thank-you for the detailed response. I look forward to testing these options as VUO seems to be a great solution! Unfortunately I no longer have the OS installed (just a test computer) so I can’t provide a log report. However, I don’t think VUO was the cause as I had VUO running for hours with no problems. However, if I do observe a problem, I’ll provide a log.

1 Like