ShareX 多音轨录制:从单源到多源的代码改造
ShareX 多音轨录制从单源到多源的代码改造【免费下载链接】ShareXShareX is a free and open-source application that enables users to capture or record any area of their screen with a single keystroke. It also supports uploading images, text, and various file types to a wide range of destinations.项目地址: https://gitcode.com/GitHub_Trending/sh/ShareX录教程视频时最典型的需求是把麦克风讲解和系统声音收进同一个文件这就是多音轨录制的场景。ShareX 当前的录屏音频链路建立在 FFmpeg 的 dshow 设备输入上配置层只保存一个音频设备因此一次只能选一个源。接下来直接看代码确认这条链路上哪里卡住了。从设置窗口到 FFmpeg 命令一条只传单值的链路设置窗口里的单选槽位入口在 FFmpegOptionsWindow.axaml.cs。RefreshSourcesAsync()先跑设备枚举再把结果写进下拉框bool wasLoaded _settingsLoaded; _settingsLoaded false; VideoSourceComboBox.ItemsSource videoSources; AudioSourceComboBox.ItemsSource audioSources; VideoSourceComboBox.SelectedItem videoSources.First(x EqualsSource(x, options.VideoSource)); AudioSourceComboBox.SelectedItem audioSources.First(x EqualsSource(x, options.AudioSource)); _settingsLoaded wasLoaded;问题在SelectedItem上就能看出来整个面板只给音频源留了一个选择槽位写回的options.AudioSource是单值。配置层 FFmpegOptions.cs 里的AudioSource确实就是一个string数据模型层面就没预留第二个。设备枚举的两个桶枚举逻辑在 FFmpegCLIManager.cs。GetDirectShowDevices()先跑一次ffmpeg -list_devices true -f dshow -i dummy再把输出逐行分类if (isAudio) { devices.AudioDevices.Add(deviceName); } else { devices.VideoDevices.Add(deviceName); }平铺地分成视频、音频两个桶。它不区分麦克风和立体声混音因为下游只消费一个设备名没动力去区分。命令拼装里没有第二个输入位链路最后一步是 ScreenRecordingOptions.cs 的命令拼装。GetFFmpegArgs()的纯音频分支把一路音频输入写进参数串gdigrab 和 ddagrab 分支里也是同样这两行else if (FFmpeg.IsAudioSourceSelected) { AppendInputDevice(args, dshow, true); args.Append($-i audio{Helpers.EscapeCLIText(FFmpeg.AudioSource)} ); }AppendInputDevice会为这一路输入补-f dshow、-thread_queue_size 1024、-rtbufsize 256M和-audio_buffer_size 80这组缓冲参数。从这里往后就是-c:a编码器、-t时长这类输出参数。整个文件没有一处-filter_complex——第二个-i audio...塞得进去吗目前没有位置。为什么当前架构不做多音轨录制先把目标命令摆出来。想让两个音频源进同一个文件手写的 FFmpeg 命令长这样ffmpeg -f gdigrab -i desktop -f dshow -i audio麦克风 -f dshow -i audio立体声混音 -filter_complex amergeinputs2 out.mp4关键点在amerge滤镜这一环先合并多路流再交给编码器。现在的实现里没有这个环节。这其实是个设计取舍不是疏忽单输入时命令拼装可以保持线性字符串拼接配置面板只需要一个下拉框支持多源后一个设备一组参数的结构就得重新定义面板复杂度也跟着涨。当前版本选了简单。能力维度现状缺什么设备选择单选 ComboBox多个音频源的多选命令拼装单路-i audio...第二路输入与amerge合并环节数据模型AudioSource单个字符串多个音频设备的列表两条先绕过去的办法️办法一虚拟声卡。装一个虚拟混音设备VB-Cable、VoiceMeeter 这类工具原理是把多路系统音频路由成一块虚拟设备然后在 ShareX 里选它安装虚拟音频混音工具系统设置里把麦克风和立体声混音都路由到虚拟设备在 ShareX 的录屏音频源中选中该虚拟设备代码里其实留了伏笔FFmpegCaptureDevice.cs 预留了VirtualAudioCapturer这个常量官方也在往这条路上走。办法二两轨录制后期合成。分别录一份带声音的屏幕和一份麦克风音频再用剪辑工具或手动跑一次 FFmpeg 把音轨混进去。适合不赶时间的离线场景。注意虚拟设备会引入约 10~30ms 的额外延迟对直播类实时场景要提前评估。想提 PR 的话改三处 改动集中在三个文件范围都是在现有结构里加一个第二值FFmpegOptions.cs给AudioSource增加第二个音频源字段或改成列表。ScreenRecordingOptions.csGetFFmpegArgs()中为每个选中的设备各拼一路-i audio...并在编码器参数前插入-filter_complex amergeinputsN合并环节AppendInputDevice要按输入路数各调用一次。FFmpegOptionsWindow.axaml.cs 及对应 axaml把音频源区从单选 ComboBox 改成多选RefreshSourcesAsync()回写多值。对录屏工具来说讲解声和系统声同轨是教程类内容的基本需求这个功能值得做。等改动落地想一次收两路声音的人就不用再绕虚拟声卡了。【免费下载链接】ShareXShareX is a free and open-source application that enables users to capture or record any area of their screen with a single keystroke. It also supports uploading images, text, and various file types to a wide range of destinations.项目地址: https://gitcode.com/GitHub_Trending/sh/ShareX创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

最新新闻

日新闻

周新闻

月新闻