Connecting OBS with Zoom without AV syncing issues

Function

New Member
Hi everyone! Sorry for the 1,000th post about audio and video syncing issues but I have been trying to address them for three days without any luck. I primarily use OBS to capture video from my digital camera to use in video conference calls on Zoom. I do not record or stream.
There is a ~500ms lag on the video coming through the capture card and I would love to eliminate it by delaying the audio being sent to Zoom. No matter how much I've tried to fiddle with different settings, I haven't been able to get everything to work in harmony. I think the difficulty has been with how to properly route the microphone audio through OBS, add the delay, and then send it out to Zoom. Virtual audio cables are tough to work with!
If anyone could offer up any suggestions for what's worked for them, I would be super super thankful!

I mirrored my setup based on the guide here: Streamgeeks Tutorial and associated YouTube video.

This is my getup:
  • Modestly powered computer with i3 processor and W10 v10.0.19041 (Release 2004)
  • OBS 25.0.08 64-bit
  • Zoom 5.0.2 (24046.0510), an older version so that it works with VirtualCam
  • Sony a6000
  • AverMedia LGP Lite (GL310)
  • Fifine USB microphone
  • VB-Audio Cable A and B
These are my settings:

obs64_2020-06-05_18-59-56.png
-- Virtualcam enabled and no buffered frames
2020-06-05_19-24-29.png
-- Capture card Source Properties. I disabled buffering under the source properties as some have claimed it helped them get rid of AV sync problems, but not in my case.
obs64_2020-06-05_19-20-08.png-- OBS Settings
obs64_2020-06-05_19-15-44.png -- Advanced Audio Properties
2020-06-05_19-15-29.png
-- Audio mixer shows incoming sound from the microphone but none relaying through Audio Cable A or B (Mic 1 and Mic 2).
Zoom_2020-06-05_19-01-40.png -- Zoom Settings

I have also tried fiddling with the input/outputs in Windows without much luck:
2020-06-05_19-16-50.png


Any suggestions or advice would be greatly appreciated! Thanks everyone.
 

Function

New Member
Simple. I am trying to output my webcam to Zoom and have the audio and video synced up.
My video comes from a webcam and audio comes from a USB mic.

Happy to start over by replicating someone else's setup that works. I feel like I've overcomplicated things for a fairly simple issue....
 

BensTechLab

New Member
Simple. I am trying to output my webcam to Zoom and have the audio and video synced up.
My video comes from a webcam and audio comes from a USB mic.

Happy to start over by replicating someone else's setup that works. I feel like I've overcomplicated things for a fairly simple issue....
@Function On the screenshot you provided labelled "Advanced Audio Properties" you can see a column labelled "Sync Offset" for which all rows were set to 0ms in your provided screenshot. You want to increase that sync offset for the microphone you are using to something likely in the 100-300ms range. That will delay that microphone's capture some ms to ideally lineup with the video processing delay you are experiencing.
 

Function

New Member
Ahh sorry about that. I must've posted the wrong image. The delay is set to 500Ms and does not have any effect. I tried longer delays and it leads to the same result.
 

Function

New Member
Hi does anyone have a suggestion on how to fix this, happy to start over with a guide or link to another post that covers the topic well.
 

BensTechLab

New Member
@Function I think you have all the information and just need to experiment a bit more.

I've been having the same problem and bought a video clapper board off amazon (but you can probably just clap your hands or grab two children's blocks and bang them together - the sharper the clap the more pointed it will be on the audio waveform). I then recorded a clip in OBS, with sync offset set to 0, to hard drive with me talking for a few seconds, 2 or 3 claps in a rows and finish. Then I remuxed this recording to MP4 and loaded it into my video editor (Davinci Resolve Free version). Then I stepped through the timeline and compared number of frames difference between the visual clap on the video and the audio clap in the audio waveform. On my computer it was around 167ms (2 core Microsoft Surface Pro 5 with a USB HDMI capture device). Faster computers with better graphics card/pcie lanes and more direct USB connectivity will be lower delay below 100ms. But apparently no HDMI capture devices are any faster than about 60-70ms minimum just for the capture device itself (not counting any delay in the computer you are using).

After I measured my delay, I repeated the above, record OBS to disk with sync offset set as calculated. Then review the recording. Does the lip sync look good now? You must confirm the recorded version looks good before moving on to streaming, as streaming can add more points of latency. The recorded version sync offset should be a very reproduceable number from one session to the next.

After this success, I started testing more in-app use mostly in Microsoft Teams. However, I did find the sync offset would drift based on computer load (remember this is a 2 core microsoft surface - not a multitasking beast). So just having Microsoft Teams open with a bunch of other people in the meeting would make my latency worse and I bumped up the sync offset another 30 ms. I haven't yet figured out if it makes a difference how many people are in my Microsoft Teams meeting, but I think it does. Because I went back to a 1 on 1 meeting and he said my audio was way delayed after my video. (where it may have been spot on in a 6 person teams meeting).

Ultimately, I'm going to build an OBS Streaming machine with more cores/better graphics to get rid of the variability in the sync offset. But at least with the above recording test, you should be able to prove to yourself that your configuration works! You can always try delays of various amounts to see if its working (even set the sync offset to like 2 seconds just to prove that it is working in your audio path).
 

Function

New Member
I cannot get the sync offset to work at all. No matter what value I set it to, the delay continues. This appears to be a configuration issue that I still have not been able to tackle. Can you share with me your setup and/or how you have all of the virtual cables connected. Thanks.
 

BensTechLab

New Member
@Function Hope this helps, consider giving my post a like for doing this up.

OBS Audio Sync with Zoom.png


So in the picture you can see:
- Mic input goes to OBS
- OBS Audio output ("monitor out") goes to Zoom input ("microphone")

Starting at the OBS input side, moving from left to right on my diagram above:
  1. Open OBS, Go to menu File -> Settings, choose "Audio" on settings dialog.
  2. Under "Devices" section, disable all devices except the one you want to test (in your case "Fifine (USB PnP Audio Device)"). This is mostly just to eliminate confusion, you will now only see 1 audio device in your OBS mixer area. In my case I have a Steinberg UR12 USB Audio interface listed under "Mic/Auxilliary Audio" which lets me attach an XLR mic to the computer via USB.
  3. Still on the OBS Audio Settings, scroll down to "Advanced" and set the "Monitoring Device" to your chosen virtual audio cable. In my case this is called "VoiceMeeter Aux Input (VB-Audio Cable)". I also have "Disable Windows Audio Ducking" checked.
  4. Click "Apply" -> "OK" to close OBS Settings.
  5. Back on your main OBS View, you should now just see your preferred Audio device in the "Audio Mixer" area as we disabled any distractions earlier. Click the "Gear" icon to configure this audio device, and from the menu select "Advanced Audio Properties".
  6. Look for your audio device in the advanced audio properties dialog and adjust the "Sync Offset" to perhaps 150ms (see above notes about measuring this and testing with an OBS recording before trying streaming). In my case I also checked the "Mono" option as my audio input is not stereo. For this audio device I also set "Audio Monitoring" option to "Monitor and Output" so that it both goes to the virtual audio cable and to recordings so I can test the settings.
  7. Click close on the Advanced Audio Settings dialog to return to the main OBS screen. You may test the configuration to this point, by recording a sample video in OBS using the settings we just configured - see my above post about measure the delay with a video editing software. Then when your local recordings have perfect lip sync, move on to configuring Zoom or other meeting software.
  8. Now in Zoom, configure the "Microphone" to be the output of the virtual audio cable that you configure for OBS to send monitoring audio to. In my case the microphone says "VoiceMeeter VAIO3 Ouput (VB-Audio Virtual Cable)". At this point the Zoom output "Speakers" should just be any normal computer output (speakers or headphones).
You should now have one direction of audio all working with sync offset. From Mic -> OBS -> Zoom. You need to get to this point before you try adding any more complexity to your setup (such as a return audio path).

P.S. In my case I also learned that having a lot of browser tabs open with some poorly coded websites, can hog your GPU resources, not just CPU. I downloaded "HWiNFO64" hardware monitoring app and monitored both my CPU and GPU usage while testing various setups. The reason my video delay was "variable" number of milliseconds is because my GPU was maxing out at 100% usage. Closing all browsers and restarting the computer, the GPU now stays at 0-20% usage with OBS even on a low-ish power Microsoft Surface. So watch out if you are running too many background processes it may be very frustrating as the "Sync Offset" value will be changing continuously if your hardware is maxed out.
 

LXsource

New Member
I am (at last setup) I have the audio going though OBS and I can confrim this as if I adjust the input level of the mic in obs the volume adjusts on the differnt computer via zoom. However I have the same issue that the delay is just not working I can see how and where you put the sync off set in bit even when set 9000ms the picture is still 2.5 seconds behind.

Any ideas how I can delay the sound??
 

ByronWillis

New Member
Hey guys,
Went through this myself and was able to find a solution. The sync offset that you apply in OBS only applies to either the recording from OBS or the output stream from OBS. It does not apply to the monitor. When you use a virtual cable, and you set it up as a monitor in OBS, you will hear the inputs without any sync delay. As far as I know there is no way to apply your delays to the audio monitor output. So what I did, and what I recommend you try, is to separate your sounds in Voicemeeter into two mixes. One mix is everything but your mic that you want sent to Zoom, and the other mix is your mic. Apply delays in Voicemeeter, menu > system settings / option... > Monitoring Synchro Delay. You can then input a number of milliseconds on both your mic and your other sounds and that will apply before sending to OBS. Then you mix them in OBS to one audio monitor output and take that to Zoom using a virtual cable.
 

dnatale

New Member
@Function Hope this helps, consider giving my post a like for doing this up.

View attachment 58211


Back on your main OBS View, you should now just see your preferred Audio device in the "Audio Mixer" area as we disabled any distractions earlier. Click the "Gear" icon to configure this audio device, and from the menu select "Advanced Audio Properties"

This saved my life. I couldn't figure out why my audio was passing to my virtual cable (I use Loopback by Rogue Amoeba) even though I had the virtual cable selected as my monitor. It's that last step where you have to check the box in "Advanced Audio Properties" - for that specific device. THANKS!!!!!
 

BensTechLab

New Member
Went through this myself and was able to find a solution. The sync offset that you apply in OBS only applies to either the recording from OBS or the output stream from OBS. It does not apply to the monitor. When you use a virtual cable, and you set it up as a monitor in OBS, you will hear the inputs without any sync delay. As far as I know there is no way to apply your delays to the audio monitor output. So what I did, and what I recommend you try, is to separate your sounds in Voicemeeter into two mixes. One mix is everything but your mic that you want sent to Zoom, and the other mix is your mic. Apply delays in Voicemeeter, menu > system settings / option... > Monitoring Synchro Delay. You can then input a number of milliseconds on both your mic and your other sounds and that will apply before sending to OBS. Then you mix them in OBS to one audio monitor output and take that to Zoom using a virtual cable.
Thanks @ByronWillis!! I ended up same as you figuring out to add the audio sync in VoiceMeeter. I had installed the full Voice Meeter Banana first, then downgraded to just the audio cable and then back and must have mixed these up.

But I can confirm the sync offset in OBS applies to recordings and streaming, but not monitoring. Voice Meeter can do it there though!
 

Function

New Member
Thanks for the write-up @BensTechLab . Tried this and the audio delay is still not being added.
I do not use VoiceMeeter, and don't want to given the added complexity that it adds (happy to guess and check what a 'close enough' delay is needed).

As an FYI I do not do any recording or streaming, only output to Zoom.
 

KelsangChodor

New Member
Thanks for the write-up @BensTechLab . Tried this and the audio delay is still not being added.
I do not use VoiceMeeter, and don't want to given the added complexity that it adds (happy to guess and check what a 'close enough' delay is needed).

As an FYI I do not do any recording or streaming, only output to Zoom.
I'm having exactly the same problem. It's a shame there's not a way to set a delay on the virtual cable.
 

frob

New Member
I am looking for the virtual cam equivalent for audio out of OBS. The only things that I have found require monitoring through OBS which means hearing myself in my headphones with the delay which isn't desirable for me.

One thing that you might try is a VST plugin that adds the delay to the audio source.
 

ByronWillis

New Member
I am looking for the virtual cam equivalent for audio out of OBS. The only things that I have found require monitoring through OBS which means hearing myself in my headphones with the delay which isn't desirable for me.

One thing that you might try is a VST plugin that adds the delay to the audio source.
I second this recommendation from frob. If you don't want to add Voicemeeter to your software lineup, and you prefer to do all your audio mixing in OBS, then I think you'll want to look into VST plugins for OBS that can apply sync delay on audio inputs.

I also think that a virtual output for audio (similar to virtual cam for video) would be super handy.
 

Duevelocita

New Member
I am looking for the virtual cam equivalent for audio out of OBS. The only things that I have found require monitoring through OBS which means hearing myself in my headphones with the delay which isn't desirable for me.

One thing that you might try is a VST plugin that adds the delay to the audio source.
@frob, have you found a VST plugin that works well for adjusting the sync delay?
 

rolinger

New Member
@frob, have you found a VST plugin that works well for adjusting the sync delay?
I've had the same problem and currently testing readelay-standalone from Reaper.fm which works for me, but adds its own 1000ms approx latency. That's OK for me as my setup has longer latency (!). Other options I tried were
  • a delay in the mixing desk I was using (Soundcraft Ui series, but it was a bit kludgy to set up and maximum delay was 1000ms) and
  • a Behringer Shark FBQ (external low-cost does-everything get-you-out-of-trouble audio toolkit), it would work perfectly but for this system lower cost and less hardware is appealing
Hope the VST plugin continues to work for me, and the above alternatives help someone else.

And most of all, please OBS can you add synchronised or independently delayed audio to the virtual camera output? That would be amazingly helpful.
 
Top