
Zoom(화상 회의 소프트웨어)에서 문제의 사운드를 재생할 수 있도록 프로그램(제 경우에는 ffmpeg)의 사운드를 소스로 리디렉션하려고 합니다. 이를 수행하는 전통적인 방법은 모든 싱크에 모니터가 함께 제공되므로 Zoom의 음원으로 SinkName.monitor 소스를 선택하는 것입니다. 하지만 :
1) Zoom은 마이크 드롭다운에 모니터 소스를 나열하지 않습니다. Zoom이 이를 받아들이도록 속이기 위해 모니터의 device.class 속성을 "sound"("monitor" 대신)로 설정해 보았으나 소용이 없었습니다.
2) Zoom은 pavucontrol에서 소스를 직접 설정하는 것을 거부하는 것 같습니다. 녹음 탭에서 Zoom에서 들을 수 있는 다른 소스를 직접 설정하려고 하면 무엇을 선택하든 내 선택이 무시됩니다. 드롭다운 옵션도 변경되지 않습니다. ~/.alsoftrc를 생성하고 "[pulse]"(새 줄) "allow-moves=yes"를 작성하면 도움이 될 수 있다는 내용을 어딘가에서 읽었지만 아무 소용이 없었습니다.
따라서 나는 나만의 소스를 설정하고 "사운드를 해당 소스로 리디렉션"하려고 합니다. 나는 널 싱크, 널 소스 및 루프백을 만들었지만 pavucontrol을 열 때 아마도 거꾸로 된 것 같다는 것을 깨달았습니다. 루프백은 소스를 싱크로 리디렉션하는 데 사용되는 것으로 보입니다. 그 반대는 아닙니다(pavucontrol은 재생 아래에서 "[...] MySink의 MySource 루프백"이라고 말합니다. MySink는 오른쪽에 있는 드롭다운 목록의 값입니다. ).
내가하려는 일을 달성 할 수있는 방법이 있습니까? 어느 하나:
a) 일반 마이크처럼 보이도록 모니터를 수정하거나
b) 싱크의 소리를 소스로 리디렉션합니까?
감사해요.
답변1
다음 설정은 Linux에서 Zoom과 애플리케이션 오디오를 공유하는 데 효과적입니다. 설정은 그대로 마이크와 애플리케이션 오디오를 Zoom에 제공합니다. 하지만 마지막에 설명했듯이 둘 중 하나만 사용하도록 변경할 수도 있습니다.
마이크와 일부 애플리케이션 오디오를 믹싱할 싱크를 만듭니다.
pactl load-module module-null-sink sink_name=mix-for-virtual-mic \
sink_properties=device.description=Mix-for-Virtual-Microphone
애플리케이션 오디오를 가져와서 스피커와 방금 만든 특수 믹싱 싱크로 보내는 싱크를 만듭니다( alsa_output….analog-stereo
싱크 이름으로 바꾸세요. 참조 pactl list sinks short
).
pactl load-module module-combine-sink sink_name=virtual-microphone-and-speakers \
slaves=mix-for-virtual-mic,alsa_output.pci-0000_00_1b.0.analog-stereo
실제 마이크를 믹싱 싱크로 루프백합니다( alsa_input…analog-stereo
소스 이름으로 교체, 참조 pactl list sources short
).
pactl load-module module-loopback source=alsa_input.pci-0000_00_1b.0.analog-stereo \
sink=mix-for-virtual-mic latency_msec=20
Zoom이 실제로 마이크가 무엇인지 어떻게 결정하는지 확실하지 않습니다. 모니터를 사용하라고 말할 수는 없지만 (Paul이 설명한 대로) 소리를 듣습니다 echo-cancel
. 실제로 취소하려는 에코가 없으므로 취소할 가짜 싱크를 만듭니다.
pactl load-module module-null-sink sink_name=silence \
sink_properties=device.description=silent-sink-for-echo-cancel
마지막으로 Zoom이 감지하는 마이크 역할을 할 에코 제거 소스를 만듭니다.
pactl load-module module-echo-cancel \
sink_name=virtual-microphone source_name=virtual-microphone \
source_master=mix-for-virtual-mic.monitor sink_master=silence aec_method=null \
source_properties=device.description=Virtual-Microphone \
sink_properties=device.description=Virtual-Microphone
이제 Zoom의 마이크 섹션에 가상 마이크가 표시됩니다.
애플리케이션 오디오를 가상 마이크에 보내려면 에서 pavucontrol
애플리케이션의 싱크를 Mix-for-Virtual-Microphone(가상 마이크로만 보내기 위해) 또는 "Mix-for-Virtual-Microphone에 대한 동시 출력, …"으로 설정합니다. 마이크와 스피커로 보내려면
에서 "동시 출력..."의 볼륨을 변경하여 마이크의 실제 볼륨과 관계없이 가상 마이크 및 스피커의 애플리케이션 오디오 볼륨을 음소거하거나 변경할 수도 있습니다 pavucontrol
.
당연히 "입력 장치" 섹션에서 마이크를 음소거하여 애플리케이션 오디오만 공유할 수 있습니다.
다음은 더 쉽게 이해할 수 있도록 이 설정을 시각화한 것입니다.
답변2
다른 방법을 찾았습니다: 모듈-파이프-소스.
pactl load-module module-pipe-source source_name=virtualmic file=/tmp/virtualmic format=s16le rate=44100 channels=1
그 다음에:
ffmpeg -re -i movie.mkv -f v4l2 /dev/video2 -f s16le -ar 44100 -ac 1 - > /tmp/virtualmic
(이것은 또한 v412loopback 모듈을 사용하여 웹캠을 가짜로 만듭니다.)
답변3
OBS를 Zoom으로 라우팅하고 싶었습니다. V4l2loopback을 사용하여 비디오를 연결했습니다(참조https://www.eigenmagic.com/2020/04/22/how-to-use-obs-studio-with-zoom/). 오디오를 연결하려면 다음이 작동합니다.
#!/bin/sh
# This created something I could see in OBS. Set it as the monitor device in Settings->Audio. Then
# turn on monitoring for the microphone and the video.
pactl load-module module-null-sink sink_name=Virtual-Speaker sink_properties=device.description=Virtual-Speaker
# Now I need to take the monitor stream from the Virtual-Speaker and turn it into a source that Zoom can use
# as a microphone.
pactl load-module module-remap-source source_name=Remap-Source master=Virtual-Speaker.monitor
OBS에서 동영상을 재생하면서 오디오/비디오가 정렬된 상태에서 동영상 위에 해설을 추가하려고 하면 올바르게 동기화되지 않습니다.
업데이트:
한동안 이것을 사용해 본 결과 내 흐름은 다음과 같습니다.
- 컴퓨터 부팅,
- 스크립트 실행,
- OBS를 시작합니다(카메라를 제어하고 가상 비디오 피드를 시작합니다).
- Zoom을 시작합니다(가상 피드를 캡처하지만 때로는 오디오 지연이 발생함).
- OBS를 종료하고,
- OBS를 시작합니다(이제 오디오가 지연되지 않습니다).
- 수업을 가르치다.
다른 수업을 가르쳐야 하는 경우:
- 줌 종료,
- 새로운 Zoom 회의를 시작하세요.
- OBS를 종료하고,
- OBS를 시작하세요.
- 2학년을 가르치다
이 프로세스는 한동안 나에게 신뢰할 수 있었습니다. 프로세스에 추가 자동화를 추가하려고 시도하지 않았습니다. 이론(실제 증거 없음): 프로그램이 올바른 장치를 잡을 수 있도록 ZOOM 전에 OBS를 시작해야 합니다. OBS는 오디오 파이프라인에 항목을 넣기 시작하므로 파이프라인을 플러시하려면 OBS를 중지했다가 다시 시작해야 합니다.
답변4
Zoom에서도 같은 문제가 발생했습니다. 대안은 module-echo-cancel
. 기존 모니터 소스에서 새 소스를 생성할 수 있습니다. 기본 설정에서는 처리가 거의 이루어지지 않는다고 생각합니다.
pactl load-module module-echo-cancel \
sink_name="echo_cancel" \
source_master="YourSink.monitor" \
sink_master="DefaultSink" \
aec_method="webrtc"
DefaultSink
기본 출력 장치와 YourSink.monitor
싱크 모니터(이 경우 스트림 싱크)로 설정합니다 .
나는이 솔루션을 얻었습니다ipwebcam-gst 스크립트.