本项目包含一系列使用 Python 和 FFmpeg 的自动化脚本,用于处理视频和音频文件。
所有音频处理脚本都会在当前目录下查找视频文件(如 .mp4),并在 ~audio 文件夹中寻找匹配的 .wav 音频文件,处理后的视频将输出到 ~mix 文件夹。
- 功能: 用单个音频文件替换视频的原始音轨。
- 输入要求: 音频文件名必须与视频文件名完全相同(例如,为
video1.mp4匹配video1.wav)。 - 核心逻辑: 使用 FFmpeg 的
-map参数,只保留视频流和新的音频流,从而丢弃原音轨。-map 0:v:0 -map 1:a:0
- 功能: 将单个音频文件与视频的原始音轨混合。
- 输入要求: 音频文件名必须与视频文件名完全相同(例如,为
video1.mp4匹配video1.wav)。 - 核心逻辑: 使用 FFmpeg 的
amix滤镜将两条音轨(原轨 + 新轨)混合。-filter_complex "[0:a][1:a]amix=inputs=2:duration=longest"
- 功能: 自动查找多个音频文件,将它们合并后,再与视频的原始音轨混合。
- 输入要求: 音频文件名以
视频名.wav结尾即可(例如,为video1.mp4匹配audioA_video1.wav,audioB_video1.wav和video1.wav)。 - 核心逻辑:
- 先使用
amix滤镜将所有找到的外部音频文件混合成一个临时音轨。 - 再使用一次
amix滤镜,将这个临时音轨与视频的原始音轨混合。
- 先使用
- 功能: 自动查找多个音频文件,将它们合并后,替换视频的原始音轨。
- 输入要求: 与脚本 3 相同,匹配所有以
视频名.wav结尾的音频文件。 - 核心逻辑:
- 使用
amix滤镜将所有找到的外部音频文件混合成一个临时音轨。 - 使用
-map参数将视频流与这个新的混合音轨合并,丢弃原音轨。
- 使用
脚本 3 和 4 在使用 amix 滤镜混合多个外部音频时,都设置了 normalize=0。
normalize=0(当前配置): 禁用音量标准化。直接叠加所有音轨的音量,这会保留每个音轨的原始响度。优点是音量不会被意外降低,缺点是如果多个音轨同时达到峰值,混合后的音频可能会超过最大音量,导致削波失真(声音听起来像爆掉了)。normalize=1(FFmpeg 默认行为): 启用音量标准化。FFmpeg 会自动调整每个输入音轨的音量,确保最终混合的音轨不会超过削波阈值。这通常会导致整体音量感觉上有所降低,但能有效避免失真。
- 功能: 遍历当前文件夹下的所有视频文件,并将其颜色通道从 RGBA 转换为 BGRA。这是一种特定的颜色格式转换,通常用于解决特定播放器或软件的兼容性问题。
- 输入要求: 无特殊要求,直接运行即可。脚本会自动处理当前目录所有支持格式的视频文件。
- 核心逻辑: 使用 FFmpeg 的
colorchannelmixer滤镜来交换红色(R)和蓝色(B)通道。该滤镜链首先确保视频是 RGBA 格式,然后交换通道,最后转换为-vf 'format=rgba,colorchannelmixer=...,format=yuv420p'yuv420p像素格式以获得最佳的播放兼容性。