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

如何使用Electron实现跨平台音视频录制 解决Linux桌面音频采集问题

可行解决方案

针对Linux下Chromium内核不支持桌面音频采集的问题,有三种落地性较强的实现路径:

方案1:单独采集桌面音频+音视频合并(最易实现)

保留你现有的屏幕录制逻辑不变,Linux环境下单独调用系统能力采集音频,录制结束后合并音视频文件,步骤如下:

  • 做系统适配:Windows、macOS环境继续使用原有desktopCapturer的音频采集逻辑,仅Linux环境走单独音频采集流程
  • 音频采集:调用FFmpeg采集PulseAudio输出的桌面音频,也可指定采集单个应用的音频流
    • 采集全桌面音频命令示例:ffmpeg -f pulse -i default -ac 2 -ar 44100 audio.wav
    • 采集指定应用音频:先执行pactl list sink-inputs获取对应应用的流ID,替换命令中的default为对应ID即可
  • 音视频合并:录制结束后调用FFmpeg合并你原有逻辑输出的视频文件和单独采集的音频文件,命令示例:ffmpeg -i 你的视频文件.webm -i 你的音频文件.wav -c:v copy -c:a opus 最终输出文件.webm,该命令直接拷贝视频流无需二次编码,处理速度极快

你可以直接用ffmpeg-static这个npm包把FFmpeg二进制打包进你的Electron应用,不需要依赖用户系统预装FFmpeg,调用时直接引用包内置的二进制路径即可。

方案2:用Node.js音频采集库直接读音频流

使用naudiodon这个跨平台Node.js音频IO库,Linux下可直接读取PulseAudio设备的PCM音频数据,你可以自行编码为opus等格式,再和视频流合并输出,适合需要实时处理音频流的场景。

注意事项

  • 要做音画同步校准:录制音频和视频时同时记录启动时间戳,合并时如果有偏移可以用FFmpeg的-itsoffset参数调整对齐
  • 如果需要低延迟实时预览音频,可以把采集到的音频流注入AudioContext播放即可
简化示例代码(FFmpeg音频采集+合并逻辑)
const ffmpegPath = require('ffmpeg-static');
const { spawn } = require('child_process');
const fs = require('fs');

// Linux下启动音频采集
let audioProcess, audioWriteStream;
function startAudioCapture(audioSavePath) {
  audioWriteStream = fs.createWriteStream(audioSavePath);
  audioProcess = spawn(ffmpegPath, [
    '-f', 'pulse',
    '-i', 'default',
    '-ac', '2',
    '-ar', '44100',
    '-y',
    audioSavePath
  ]);
}

// 录制结束后合并音视频
function mergeAudioVideo(videoPath, audioPath, outputPath, callback) {
  const mergeProcess = spawn(ffmpegPath, [
    '-i', videoPath,
    '-i', audioPath,
    '-c:v', 'copy',
    '-c:a', 'opus',
    '-y',
    outputPath
  ]);
  mergeProcess.on('close', (code) => {
    if(code === 0) callback(null, outputPath);
    else callback(new Error('合并失败'));
  });
}

内容的提问来源于stack exchange,提问作者Arthur Isnt original

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:15:03