在使用 Outplayed / OBS 录屏 时,经常会遇到视频有多条音轨,但上传到 QQ 或其他平台时只保留了主声轨的问题。本文分享一个轻量级解决方案,用 FFmpeg + BAT 脚本实现多条音轨自动混合,并生成新的 AAC 音频视频文件。


背景

在使用 Outplayed 录制游戏视频时,我发现视频里存在 多条音轨

  • Track 0:麦克风声音
  • Track 1:游戏声音
  • Track 2:其他音效

问题出现了:

当我把录屏发给朋友或者上传到 QQ 时,只能听到 自己麦克风声音,游戏声音丢失。

我希望能把多条音轨合并为 单条音轨,同时:

  1. 尽量保持原音质
  2. 视频保持原画质(不重新编码)
  3. 能够快速处理,最好拖入视频即可
  4. 最终希望在 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"
  • 使用 FFmpegamix 滤镜合并音轨
  • [0:a] 自动匹配视频内所有音轨
  • inputs=N 指定音轨数量
  • duration=longest 保证音轨长度匹配视频
  • 避免了手动拼接 [0:a:0][0:a:1]… 导致多 1 输入的报错

问题1:文件变小

  • 原因:原视频可能是多条高码率音轨或无损音轨
  • 解决方法:可以选择高码率 AAC 或无损 PCM 音频
  • 这里为了方便传输,选择默认 192k 即可

问题2:音轨数量只能手动确认

  • 解决方法:使用 FFprobe 可以快速检测视频内的音轨数量:

    1
    2
    for /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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
@echo off
chcp 65001
setlocal

echo =====================================
echo 音轨混合工具 (自动检测 N 条音轨, 192k AAC)
echo =====================================

:: 拖入文件路径
set "input=%~1"
set "input=%input:"=%" :: 去掉首尾双引号

if "%input%"=="" (
echo 错误:未指定视频文件
pause
exit /b
)

if not exist "%input%" (
echo 错误:找不到文件 "%input%"
pause
exit /b
)

:: 文件名和扩展名
for %%f in ("%input%") do set "filename=%%~nf"
for %%f in ("%input%") do set "ext=%%~xf"
for %%f in ("%input%") do set "filepath=%%~dpf"
set "output=%filepath%%filename%_audioMix%ext%"

:: 检测音轨数量
for /f %%a in ('ffprobe -v error -select_streams a -show_entries stream^=index -of compact "%input%" ^| find /c /v ""') do set audioCount=%%a
echo 检测到音轨数量: %audioCount%

if %audioCount%==0 (
echo 错误:未检测到音轨
pause
exit /b
)

:: 执行混音 (简化方式,避免多余 amix 输入)
ffmpeg -i "%input%" -filter_complex "[0:a]amix=inputs=%audioCount%:duration=longest" -c:v copy -c:a aac -b:a 192k "%output%"

if errorlevel 1 (
echo FFmpeg 执行出错: "%input%"
) else (
echo 完成!输出文件: "%output%"
)

pause

注意事项

  • 输入路径不要加双引号,脚本会自动处理
  • 视频文件名会生成 _audioMix 后缀,不覆盖原文件
  • 自动检测音轨数量并进行合并操作

第三步:实现右键一键处理

为了方便,我将 bat 文件加入 右键菜单

  1. 按下 Win + R,输入:
1
shell:sendto
  • mix_audio.bat 复制到打开的文件夹
  1. 优点:
    • 无需改注册表,简单安全。
    • 可以直接右键处理视频

总结

  1. Outplayed 多轨录屏直接发送只听到麦克风,是因为音轨未合并
  2. FFmpeg + amix 可以轻松混合音轨
  3. bat 脚本 可以实现拖入视频自动处理
  4. 加入 右键菜单 后,可直接在资源管理器操作,极大提升效率

💡 PS.

  • 默认音频 192k AAC 足够清晰且文件体积小
  • 视频不转码,保持原画质
  • 输出文件自动加 _audioMix 后缀,不覆盖原文件