You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:24:10