Google Colab下Selenium+Xvfb+FFmpeg录屏无音频问题求助
解决方案
核心修改点
- 补充pulseaudio相关依赖,启动音频服务并配置虚拟声卡为系统默认输出设备,保证Chrome播放的音频会流入你创建的虚拟sink
- 给Chrome新增音频、自动播放相关启动参数,无需手动点击播放按钮也能正常输出音频
- FFmpeg命令新增pulseaudio音频输入源,捕获虚拟sink的监听流作为音频轨道
- 调整音视频编码和同步参数,避免音画不同步、文件损坏问题
完整可运行代码
# 安装完整依赖 !sudo apt update !sudo apt install ffmpeg xvfb pulseaudio pulseaudio-utils -y !pip install selenium xvfbwrapper # 启动pulseaudio服务,创建并配置虚拟声卡为默认输出 !pulseaudio --start !pacmd load-module module-null-sink sink_name=MySink !pacmd set-default-sink MySink from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait as wait from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By import os import time from xvfbwrapper import Xvfb import subprocess, shlex print('Start screencast with audio') xvfb = Xvfb(width=720, height=720, colordepth=24) xvfb.start() chrome_options = Options() chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36') # 新增音频、自动播放相关配置 chrome_options.add_argument('--autoplay-policy=no-user-gesture-required') chrome_options.add_argument('--use-fake-ui-for-media-stream') wd = webdriver.Chrome('chromedriver', options=chrome_options) url = "https://www.youtube.com/watch?v=bdlfdBiSzKw" wd.get(url) wd.save_screenshot("1.png") # FFmpeg命令新增音频输入,绑定虚拟sink的监听流 ffmpeg_stream = f'ffmpeg -y -r 30 -f x11grab -s 720x720 -i :{xvfb.new_display}+nomouse -f pulse -i MySink.monitor -c:v libx264 -crf 23 -preset ultrafast -c:a aac -b:a 192k -af aresample=async=1:first_pts=0 -vsync 2 ouxkt.mkv' args = shlex.split(ffmpeg_stream) p = subprocess.Popen(args) time.sleep(10) # 录制10秒 # 优雅停止FFmpeg,避免文件损坏 p.terminate() p.wait() wd.quit() xvfb.stop()
排查说明
如果运行后依然没有音频,可执行!pactl list sinks确认MySink虚拟声卡正常加载,执行!pactl list sink-inputs确认Chrome的音频流已经挂载到MySink设备上。
内容的提问来源于stack exchange,提问作者kl kl
相关产品推荐
相关产品推荐

