<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Extended Video (and Audio) Delay]]></title><description><![CDATA[<p>Hey all! — I've gone through all the previous threads on Video Delay limitations, but since a lot of those are from 2014, I thought I'd see if there had been any breakthroughs.</p><p>I'm currently imagining a Brady Bunch style grid setup that allows me to delay a live video (including audio) up to 13-15 minutes — with the express hope of being able to interact with past incarnations of myself. The result would ideally be fed to 9 mounted flatscreens, so I'm hoping to maintain the highest quality possible. I've made a little diagram.</p><img src="/assets/uploads/files/1716986436894-untitled-miniature-delay-map.png" /><p>Obviously video delay chews up a lot of memory, but I was wondering if in the past 10 years there have been any advancements worth taking into consideration. Could I string a series of computers together? Is there a way to utilize a switcher or some other interface? And any thoughts on how I might be able to calculate what would be needed?</p><p>As always, I appreciate the insight and expertise of the group. Thanks!</p>]]></description><link>https://community.troikatronix.com/topic/8844/extended-video-and-audio-delay</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 04:19:01 GMT</lastBuildDate><atom:link href="https://community.troikatronix.com/topic/8844.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 May 2024 12:55:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Extended Video (and Audio) Delay on Wed, 24 Jul 2024 14:25:15 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/291">@antc</a></p><p>Absolutely! Go for it.</p><p>Getting the crossfade between videos takes a little finessing — and sometimes there's a little ghosting/misalignment but in general I'm finding it really effective!</p>]]></description><link>https://community.troikatronix.com/post/54546</link><guid isPermaLink="true">https://community.troikatronix.com/post/54546</guid><dc:creator><![CDATA[joshuawg]]></dc:creator><pubDate>Wed, 24 Jul 2024 14:25:15 GMT</pubDate></item><item><title><![CDATA[Reply to Extended Video (and Audio) Delay on Mon, 22 Jul 2024 16:04:47 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/4004">@joshuawg</a></p><p>Very nice patch! as an <em>minimalist</em> alternative for that "probably expensive hardware" way, this one seems a wonderful solution! </p><p>Hope you don't mind if I take some ideias from there.. ;)</p>]]></description><link>https://community.troikatronix.com/post/54539</link><guid isPermaLink="true">https://community.troikatronix.com/post/54539</guid><dc:creator><![CDATA[antc]]></dc:creator><pubDate>Mon, 22 Jul 2024 16:04:47 GMT</pubDate></item><item><title><![CDATA[Reply to Extended Video (and Audio) Delay on Fri, 19 Jul 2024 23:30:44 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/4004">@joshuawg</a> Wow, I would not have tried to do all this in Isadora, that amazing and so much more efficient that saving frames in memory.</p>]]></description><link>https://community.troikatronix.com/post/54524</link><guid isPermaLink="true">https://community.troikatronix.com/post/54524</guid><dc:creator><![CDATA[Fred]]></dc:creator><pubDate>Fri, 19 Jul 2024 23:30:44 GMT</pubDate></item><item><title><![CDATA[Reply to Extended Video (and Audio) Delay on Fri, 19 Jul 2024 14:59:51 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/1435">@woland</a></p><p>Doesn't happen until April actually — but I'm about to head out on a retreat tomorrow so I'm going to be working with the new patch then!</p>]]></description><link>https://community.troikatronix.com/post/54510</link><guid isPermaLink="true">https://community.troikatronix.com/post/54510</guid><dc:creator><![CDATA[joshuawg]]></dc:creator><pubDate>Fri, 19 Jul 2024 14:59:51 GMT</pubDate></item><item><title><![CDATA[Reply to Extended Video (and Audio) Delay on Wed, 17 Jul 2024 17:42:21 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/4004">@joshuawg</a> said:</p>
<blockquote>Just wanted to send a quick update, since I seem to have gotten this to work! Sadly I wasn't able to go the gstreamer route with my limited coding abilities, but having a vague idea of the underlying theory, I was able to get it working in Isadora. As <a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/8">@fred</a> suggested, it's a rolling capture of videos that are then played back on a trigger delay to create the illusion of a video delay. Of course the blip between videos using a single capture-camera-to-movie actor was a bit of a giveaway, so I ended up using an hdmi splitter to split my camera signal across two camera inputs (using loopback to split the audio signal as well), so I can alternately capture the two feeds with a bit of an overlap and crossfade between them — which has the benefit of letting me capture consistent audio! Anyway, thanks again for all of your suggestions. The load is super low and I'm excited to start playing with it. </blockquote>
<p> Wow that sounds fantastic! Did the performance already happen, if so, is there a recording available to watch? If not, where and when is it?</p>]]></description><link>https://community.troikatronix.com/post/54452</link><guid isPermaLink="true">https://community.troikatronix.com/post/54452</guid><dc:creator><![CDATA[Woland]]></dc:creator><pubDate>Wed, 17 Jul 2024 17:42:21 GMT</pubDate></item><item><title><![CDATA[Reply to Extended Video (and Audio) Delay on Wed, 17 Jul 2024 17:40:37 GMT]]></title><description><![CDATA[<p>Just wanted to send a quick update, since I seem to have gotten this to work! Sadly I wasn't able to go the gstreamer route with my limited coding abilities, but having a vague idea of the underlying theory, I was able to get it working in Isadora. As <a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/8">@fred</a> suggested, it's a rolling capture of videos that are then played back on a trigger delay to create the illusion of a video delay. Of course the blip between videos using a single capture-camera-to-movie actor was a bit of a giveaway, so I ended up using an hdmi splitter to split my camera signal across two camera inputs (using loopback to split the audio signal as well), so I can alternately capture the two feeds with a bit of an overlap and crossfade between them — which has the benefit of letting me capture consistent audio! Anyway, thanks again for all of your suggestions. The load is super low and I'm excited to start playing with it. </p><img src="/assets/uploads/files/1721237877713-screenshot-2024-07-17-at-1.26.58-pm-resized.png" /><img src="/assets/uploads/files/1721237892402-screenshot-2024-07-17-at-1.27.54-pm-resized.png" /><img src="/assets/uploads/files/1721237916367-screenshot-2024-07-17-at-1.28.17-pm-resized.png" />]]></description><link>https://community.troikatronix.com/post/54451</link><guid isPermaLink="true">https://community.troikatronix.com/post/54451</guid><dc:creator><![CDATA[joshuawg]]></dc:creator><pubDate>Wed, 17 Jul 2024 17:40:37 GMT</pubDate></item><item><title><![CDATA[Reply to Extended Video (and Audio) Delay on Tue, 04 Jun 2024 18:17:39 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/8">@fred</a> said:</p>
<blockquote>gstreamer is an open source library that lets you do command line controlled video processing. It has a lot of features like fork and branch of video streams as well as recording and joining. It is very fast with low overhead and many functions are threaded. </blockquote>
<p> You always know about the coolest things &lt;3</p>]]></description><link>https://community.troikatronix.com/post/54186</link><guid isPermaLink="true">https://community.troikatronix.com/post/54186</guid><dc:creator><![CDATA[Woland]]></dc:creator><pubDate>Tue, 04 Jun 2024 18:17:39 GMT</pubDate></item><item><title><![CDATA[Reply to Extended Video (and Audio) Delay on Tue, 04 Jun 2024 16:13:16 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/8">@fred</a> I hadn't heard of gstreamer — really excited to look into it! Will let you know if I can get it working!</p>]]></description><link>https://community.troikatronix.com/post/54179</link><guid isPermaLink="true">https://community.troikatronix.com/post/54179</guid><dc:creator><![CDATA[joshuawg]]></dc:creator><pubDate>Tue, 04 Jun 2024 16:13:16 GMT</pubDate></item><item><title><![CDATA[Reply to Extended Video (and Audio) Delay on Sun, 02 Jun 2024 04:46:46 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/4004">@joshuawg</a> you can also do this in another way. I’m not sure if it’s easily possible Isadora but if you can precisely record and playback the right sized sections of video this should be able to be done on a single computer. <br /><br />The issues to solve would be precise starting and stopping of the record process with no gaps and the seamless loading and playback of the chunks of video. With a modern computer these limitations will not be from hardware but from how the software lets you control these processes.</p><p>I would use another platform with more prefixes control to do the recording and playback of smaller chunks- gstreamer is a good option because it can do this, it’s free, and it supports NDI so you can get the streams back in isadora  </p><p>gstreamer is an open source library that lets you do command line controlled video processing. It has a lot of features like fork and branch of video streams as well as recording and joining. It is very fast with low overhead and many functions are threaded. <br /></p><p>You can ask it to record a stream into chunks and also to rebuild those chunks into streams. You can add chunks to a stream in real time. You can also stream playback with NDI. <br /></p><p>Here is a bash script that outlines how this might work. You can use chatgpt or copilot to help you debug this on hardware. <br /><br /></p><p>#!/bin/bash</p>
<p># Parameters<br />CAMERA_SOURCE="/dev/video0"    # Adjust according to your system<br />SEGMENT_DURATION=10            # Duration in seconds for each segment<br />MAX_DELAY=780                  # Maximum delay in seconds (13 minutes)<br />SEGMENT_DIR="/path/to/segments"  # Directory to store video segments<br />NDI_OUTPUT_BASE_NAME="NDI_Delayed_Stream"  # Base name for NDI output streams<br />DELAYS=(60 120 180 240 300 360 420 480 540)  # Delays in seconds for NDI streams</p>
<p># Ensure the segment directory exists<br />mkdir -p $SEGMENT_DIR</p>
<p># Function to segment live video<br />segment_live_video() {<br />    gst-launch-1.0 -e \<br />        v4l2src device=$CAMERA_SOURCE ! videoconvert ! x264enc ! h264parse ! splitmuxsink location="$SEGMENT_DIR/segment_%05d.mp4" max-size-time=$(($SEGMENT_DURATION * 1000000000))<br />}</p>
<p># Function to clean up old segments<br />cleanup_old_segments() {<br />    while true; do<br />        current_time=$(date +%s)<br />        for segment in "$SEGMENT_DIR"/segment_*.mp4; do<br />            segment_time=$(stat -c %Y "$segment")<br />            segment_age=$((current_time - segment_time))<br />            if ((segment_age &gt; MAX_DELAY)); then<br />                rm -f "$segment"<br />            fi<br />        done<br />        sleep 10  # Check every 10 seconds<br />    done<br />}</p>
<p># Function to create and manage delayed streams<br />create_delayed_stream() {<br />    local delay_seconds=$1<br />    local ndi_output_name=$2<br />    local segment_pattern="$SEGMENT_DIR/segment_%05d.mp4"</p>
<p>    gst-launch-1.0 -e \<br />        multifilesrc location="$segment_pattern" index=0 ! decodebin ! videoconvert ! queue ! ndisink name=$ndi_output_name &amp;<br />}</p>
<p># Start segmenting live video in the background<br />segment_live_video &amp;</p>
<p><strong># Start cleanup of old segments in the background<br />cleanup_old_segments &amp;</strong></p>
<p><strong># Create delayed streams<br />for delay in "${DELAYS[@]}"; do<br />    ndi_output_name="${NDI_OUTPUT_BASE_NAME}_${delay}s"<br />    create_delayed_stream $delay $ndi_output_name &amp;<br />done</strong></p>
<p><strong># Wait for all background processes to finish</strong><br />wait</p>]]></description><link>https://community.troikatronix.com/post/54161</link><guid isPermaLink="true">https://community.troikatronix.com/post/54161</guid><dc:creator><![CDATA[Fred]]></dc:creator><pubDate>Sun, 02 Jun 2024 04:46:46 GMT</pubDate></item><item><title><![CDATA[Reply to Extended Video (and Audio) Delay on Fri, 31 May 2024 14:25:15 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/1435">@woland</a></p><p>Thanks so much for teasing out the less expensive option. This seems very doable! (Also you were right to catch my bad simple addition, sorry!) </p><p>Just for comparison's sake, what sort of load are you getting on your Mac Pro when running the 9 video delays? Any recommendations for minimum system requirements? </p><p>Thanks again! </p>]]></description><link>https://community.troikatronix.com/post/54155</link><guid isPermaLink="true">https://community.troikatronix.com/post/54155</guid><dc:creator><![CDATA[joshuawg]]></dc:creator><pubDate>Fri, 31 May 2024 14:25:15 GMT</pubDate></item><item><title><![CDATA[Reply to Extended Video (and Audio) Delay on Wed, 29 May 2024 20:08:54 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/1435">@woland</a> said:</p>
<blockquote>Connect three computers to the same beefy ethernet router/switch</blockquote><p><a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/4004">@joshuawg</a> Here's a template Isadora Patch that shows the actors and steps needed for each of the three computers when using this method: <a href="/assets/uploads/files/1717013300187-patch-triple-computer-video-delay-2024-05-29-3.2.6.zip">patch-triple-computer-video-delay-2024-05-29-3.2.6.zip</a></p><hr /><p>Computer 1</p><p><img src="/assets/uploads/files/1717012957315-computer-1.png" /></p><hr /><p></p><hr /><p>Computer 2</p>
<img src="/assets/uploads/files/1717012972749-computer-2.png" /><hr />
<p>Computer 3</p><img src="/assets/uploads/files/1717013289915-computer-3.png" />
<p></p>]]></description><link>https://community.troikatronix.com/post/54135</link><guid isPermaLink="true">https://community.troikatronix.com/post/54135</guid><dc:creator><![CDATA[Woland]]></dc:creator><pubDate>Wed, 29 May 2024 20:08:54 GMT</pubDate></item><item><title><![CDATA[Reply to Extended Video (and Audio) Delay on Fri, 31 May 2024 12:10:54 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/4004">@joshuawg</a> said:</p>
<blockquote>Excited to think this can be done without having to get hold of multiple computers. </blockquote>
<p>Using multiple computers would probably be cheaper though. You could:</p>
<ol><li>Connect three computers to the same beefy ethernet router/switch</li><li>Have computer 1 do the first three times and send them to three Stages</li><li>Have computer 1 output the 3:00 delayed video feed over NDI by enabling NDI for Stage 3 in Stage Setup</li><li>Have computer 2 pick up the 3:00 delayed video feed over NDI with an NDI Watcher actor</li><li>On computer 2, use Video Delay actors to make the next three delay times for three more Stages</li><li>Have computer 2 output the 7:30 delayed video feed over NDI by enabling NDI for Stage 3 in Stage Setup</li><li>Have computer 3 pick up the 7:30 delayed video feed over NDI with an NDI Watcher actor</li><li>On computer 3, use Video Delay actors to make the last three delay times for the final three Stages</li></ol>
<p>Computer 1 has to do the live feed and keep 3:00 of camera live feed in Video Delay actors at all times.<br />Computer 2 has to keep 4:30 of the live feed from Computer 1's Stage 3 NDI output in Video Delay actors at all times.<br />Computer 3 has to keep 5:30 of the live feed from Computer 2's Stage 3 NDI output in Video Delay actors at all times. (I'm not sure if the 2-minute and 30 second jump from 9 minutes to 11:30 was intentionally breaking the pattern of just adding 90 seconds to the previous time or not.)</p>
<pre>
3:00 = 180 seconds
180 seconds x 30 fps = 5400 frames
Each Video Delay actor can hold a max of 1000 frames
5400 frames / 1000 frames per Video Delay actor = 5.4 Video Delay actors, rounded up is 6 Video Delay actors.
So computer 1 would need to be running 5 Video Delay actors at max capacity and 1 at 4/10ths max capacity.</pre>
<pre>
4:30 = 270 seconds
270 seconds x 30 fps = 8100 frames
Each Video Delay actor can hold a max of 1000 frames
8100 frames / 1000 frames per Video Delay actor = 8.1 Video Delay actors, rounded up is 9 Video Delay actors.
So computer 2 would need to be running 8 Video Delay actors at max capacity and 1 at 1/10th max capacity.    
</pre>
<pre>
5:30 = 330 seconds
330 seconds x 30 fps = 9900 frames
Each video delay actor can hold a max of 1000 frames
9900 frames / 1000 frames per Video Delay actors = 9.9 Video Delay actors, rounded up is 10 Video Delay actors 
So computer 3 would need to have 9 Video Delay actors at full capacity and 1 Video Delay actor at 9/10ths capacity.</pre>]]></description><link>https://community.troikatronix.com/post/54134</link><guid isPermaLink="true">https://community.troikatronix.com/post/54134</guid><dc:creator><![CDATA[Woland]]></dc:creator><pubDate>Fri, 31 May 2024 12:10:54 GMT</pubDate></item><item><title><![CDATA[Reply to Extended Video (and Audio) Delay on Wed, 29 May 2024 17:39:56 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/1435">@woland</a> Thanks so much! This is incredible. Right now I'm pretty sure that I wouldn't need individual control over the delayed videos, but of course you never know how things might shake out. I'll definitely look into the av delay units. Excited to think this can be done without having to get hold of multiple computers. </p><p></p><p>—J</p>]]></description><link>https://community.troikatronix.com/post/54133</link><guid isPermaLink="true">https://community.troikatronix.com/post/54133</guid><dc:creator><![CDATA[joshuawg]]></dc:creator><pubDate>Wed, 29 May 2024 17:39:56 GMT</pubDate></item><item><title><![CDATA[Reply to Extended Video (and Audio) Delay on Wed, 29 May 2024 17:00:52 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/4004">@joshuawg</a></p>
<p>My first thought involves a lot of probably expensive hardware.</p>
<p>I started writing it out but it got too complex so I just made a diagram. The major drawback with this is that you do not have immediate, individual control of any of the delayed audio and video streams, only the live one. You also cannot apply audio or video effects to the delayed content before it's sent out. This would mean you'd have to rehearse everything really tightly because you wouldn't be able to control when any particular video or audio stream is on or off.</p>
<p>I have another idea that involves additional computers which would allow you to add effects to/modify the delayed video and audio feeds in Isadora or other software before sending the delayed feeds out to their respective displays (video) or the mixer (audio) as well as giving you immediate control of each video and audio stream programmatically or interactively.</p>
<p>I also have a few other ideas on how to do this, but many involve these AV delay unit devices used for professional broadcast situations. (I haven't worked with a device like this, I'm just sure that there's either an AV delay unit out there or that you could get separate delay units for the video and audio if need be.)</p>
<p><img src="/assets/uploads/files/1717001422809-multi-delay-av-v2-resized.jpeg" style="cursor:pointer" /><br /></p>]]></description><link>https://community.troikatronix.com/post/54132</link><guid isPermaLink="true">https://community.troikatronix.com/post/54132</guid><dc:creator><![CDATA[Woland]]></dc:creator><pubDate>Wed, 29 May 2024 17:00:52 GMT</pubDate></item><item><title><![CDATA[Reply to Extended Video (and Audio) Delay on Wed, 29 May 2024 14:48:29 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://community.troikatronix.com/uid/4004">@joshuawg</a></p><p>Oh! And just to clarify. I've done a little stress testing on my show computer, which is a fully decked out 2021 Macbook Pro M1 Max. Daisy-chaining 8 video delays to 9 projectors I have maxed out the frame rate to 1000, which I guess has the last projector operating at a delay of 8000 frames. </p><p>At that rate, the scene is running at a variable load of 160-200% / with a variable frame rate of 13.7-15.7 / and a differential between the live feed and the last projector of 570 seconds or 9.5 minutes!</p><p>Surprisingly the image remained rather smooth, with no stuttering, despite the reduced frame rate. So this seems to be within the realm of possibility. I'm just wondering if there's a way to reduce the strain on the machine and maybe spread out the labor.</p><img src="/assets/uploads/files/1716993782696-screenshot-2024-05-29-at-10.39.25-am-resized.png" />]]></description><link>https://community.troikatronix.com/post/54129</link><guid isPermaLink="true">https://community.troikatronix.com/post/54129</guid><dc:creator><![CDATA[joshuawg]]></dc:creator><pubDate>Wed, 29 May 2024 14:48:29 GMT</pubDate></item></channel></rss>