用 FFmpeg 自动混合游戏录屏多条音轨并实现右键一键处理
在使用 Outplayed / OBS 录屏 时,经常会遇到视频有多条音轨,但上传到 QQ 或其他平台时只保留了主声轨的问题。本文分享一个轻量级解决方案,用 FFmpeg + BAT 脚本实现多条音轨自动混合,并生成新的 AAC 音频视频文件。
背景
在使用 Outplayed 录制游戏视频时,我发现视频里存在 多条音轨:
- Track 0:麦克风声音
- Track 1:游戏声音
- Track 2:其他音效
问题出现了:
当我把录屏发给朋友或者上传到 QQ 时,只能听到 自己麦克风声音,游戏声音丢失。
我希望能把多条音轨合并为 单条音轨,同时:
- 尽量保持原音质
- 视频保持原画质(不重新编码)
- 能够快速处理,最好拖入视频即可
- 最终希望在 Windows 资源管理器右键直接处理视频
第一步:使用 FFmpeg 命令混音
初始尝试命令如下:
1 | ffmpeg -i "input.mp4" -filter_complex "[0:a]amix=inputs=N:duration=longest" -c:v copy -c:a aac -b:a 192k "output.mp4" |
- 使用 FFmpeg 的
amix滤镜合并音轨 [0:a]自动匹配视频内所有音轨inputs=N指定音轨数量duration=longest保证音轨长度匹配视频- 避免了手动拼接
[0:a:0][0:a:1]…导致多 1 输入的报错
问题1:文件变小
- 原因:原视频可能是多条高码率音轨或无损音轨
- 解决方法:可以选择高码率 AAC 或无损 PCM 音频
- 这里为了方便传输,选择默认
192k即可
问题2:音轨数量只能手动确认
解决方法:使用 FFprobe 可以快速检测视频内的音轨数量:
1
2for /f %%a in ('ffprobe -v error -select_streams a -show_entries stream^=index -of compact "视频路径" ^| find /c /v ""') do set audioCount=%%a
%audioCount%保存音轨数量若检测到 0 条音轨,则提示用户并退出
第二步:写 bat 脚本实现拖入处理
为了快速处理,我写了一个 bat 脚本:
1 | @echo off |
注意事项
- 输入路径不要加双引号,脚本会自动处理
- 视频文件名会生成
_audioMix后缀,不覆盖原文件 - 自动检测音轨数量并进行合并操作
第三步:实现右键一键处理
为了方便,我将 bat 文件加入 右键菜单:
- 按下 Win + R,输入:
1 | shell:sendto |
- 把
mix_audio.bat复制到打开的文件夹
- 优点:
- 无需改注册表,简单安全。
- 可以直接右键处理视频
总结
- Outplayed 多轨录屏直接发送只听到麦克风,是因为音轨未合并
- 用 FFmpeg + amix 可以轻松混合音轨
- 用 bat 脚本 可以实现拖入视频自动处理
- 加入 右键菜单 后,可直接在资源管理器操作,极大提升效率
💡 PS.
- 默认音频 192k AAC 足够清晰且文件体积小
- 视频不转码,保持原画质
- 输出文件自动加
_audioMix后缀,不覆盖原文件
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Veeink's Blog!
评论
