mirror of
https://github.com/linyqh/NarratoAI.git
synced 2025-12-10 18:02:51 +00:00
更新AudioVolumeDefaults类,提升原声音量至1.2以平衡TTS音量,并允许最大音量达到2.0。新增智能音量调整功能,自动分析和调整音频轨道音量,确保音量在合理范围内。优化任务处理逻辑,结合用户设置和推荐音量配置,提升音频合成效果和用户体验。
163 lines
4.1 KiB
Markdown
163 lines
4.1 KiB
Markdown
# 音频音量平衡优化指南
|
||
|
||
## 问题描述
|
||
|
||
在视频剪辑后台任务中,经常出现视频原声音量比TTS生成的解说声音音量小很多的问题。即使设置了视频原声为1.0,解说音量为0.7,原声依然听起来比较小。
|
||
|
||
## 原因分析
|
||
|
||
1. **音频响度差异**:TTS生成的音频通常具有较高且一致的响度,而视频原声的音量可能本身就比较低,或者动态范围较大。
|
||
|
||
2. **缺乏音频标准化**:之前的代码只是简单地通过乘法器调整音量,没有进行音频响度分析和标准化处理。
|
||
|
||
3. **音频混合方式**:使用 `CompositeAudioClip` 进行音频混合时,不同音频轨道的响度差异会被保留。
|
||
|
||
## 解决方案
|
||
|
||
### 1. 音频标准化工具 (`audio_normalizer.py`)
|
||
|
||
实现了 `AudioNormalizer` 类,提供以下功能:
|
||
|
||
- **LUFS响度分析**:使用FFmpeg的loudnorm滤镜分析音频的LUFS响度
|
||
- **RMS音量计算**:作为LUFS分析的备用方案
|
||
- **音频标准化**:将音频标准化到目标响度
|
||
- **智能音量调整**:分析TTS和原声的响度差异,计算合适的音量调整系数
|
||
|
||
### 2. 音频配置管理 (`audio_config.py`)
|
||
|
||
实现了 `AudioConfig` 类,提供:
|
||
|
||
- **默认音量配置**:优化后的默认音量设置
|
||
- **视频类型配置**:针对不同类型视频的音量配置
|
||
- **预设配置文件**:balanced、voice_focused、original_focused等
|
||
- **内容类型推荐**:根据内容类型推荐音量设置
|
||
|
||
### 3. 智能音量调整
|
||
|
||
在 `generate_video.py` 中集成了智能音量调整功能:
|
||
|
||
- 自动分析TTS和原声的响度差异
|
||
- 计算合适的音量调整系数
|
||
- 保留用户设置的相对比例
|
||
- 限制调整范围,避免过度调整
|
||
|
||
## 配置更新
|
||
|
||
### 默认音量设置
|
||
|
||
```python
|
||
# 原来的设置
|
||
ORIGINAL_VOLUME = 0.7
|
||
|
||
# 优化后的设置
|
||
ORIGINAL_VOLUME = 1.2 # 提高原声音量
|
||
MAX_VOLUME = 2.0 # 允许原声音量超过1.0
|
||
```
|
||
|
||
### 推荐音量配置
|
||
|
||
```python
|
||
# 混合内容(默认)
|
||
'mixed': {
|
||
'tts_volume': 0.8,
|
||
'original_volume': 1.3,
|
||
'bgm_volume': 0.3,
|
||
}
|
||
|
||
# 原声为主的内容
|
||
'original_heavy': {
|
||
'tts_volume': 0.6,
|
||
'original_volume': 1.6,
|
||
'bgm_volume': 0.1,
|
||
}
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
### 1. 自动优化(推荐)
|
||
|
||
系统会自动应用优化的音量配置:
|
||
|
||
```python
|
||
# 在 task.py 中自动应用
|
||
optimized_volumes = get_recommended_volumes_for_content('mixed')
|
||
```
|
||
|
||
### 2. 手动配置
|
||
|
||
可以通过配置文件或参数手动设置:
|
||
|
||
```python
|
||
# 应用预设配置文件
|
||
volumes = AudioConfig.apply_volume_profile('original_focused')
|
||
|
||
# 根据视频类型获取配置
|
||
volumes = AudioConfig.get_optimized_volumes('entertainment')
|
||
```
|
||
|
||
### 3. 智能分析
|
||
|
||
启用智能音量分析(默认开启):
|
||
|
||
```python
|
||
# 在 schema.py 中控制
|
||
ENABLE_SMART_VOLUME = True
|
||
```
|
||
|
||
## 测试验证
|
||
|
||
运行测试脚本验证功能:
|
||
|
||
```bash
|
||
source .venv/bin/activate
|
||
python test_audio_optimization.py
|
||
```
|
||
|
||
测试结果显示:
|
||
- TTS测试音频LUFS: -24.15
|
||
- 原声测试音频LUFS: -32.95
|
||
- 建议调整系数:TTS 1.61, 原声 3.00
|
||
|
||
## 效果对比
|
||
|
||
### 优化前
|
||
- TTS音量:0.7
|
||
- 原声音量:1.0
|
||
- 问题:原声明显比TTS小
|
||
|
||
### 优化后
|
||
- TTS音量:0.8(智能调整)
|
||
- 原声音量:1.3(智能调整)
|
||
- 效果:音量平衡,听感自然
|
||
|
||
## 注意事项
|
||
|
||
1. **FFmpeg依赖**:音频分析功能需要FFmpeg支持loudnorm滤镜
|
||
2. **性能影响**:智能分析会增加少量处理时间
|
||
3. **音质保持**:所有调整都保持音频质量不变
|
||
4. **兼容性**:向后兼容现有的音量设置
|
||
|
||
## 故障排除
|
||
|
||
### 1. LUFS分析失败
|
||
- 检查FFmpeg是否安装
|
||
- 确认音频文件格式支持
|
||
- 自动降级到RMS分析
|
||
|
||
### 2. 音量调整过度
|
||
- 检查音量限制设置
|
||
- 调整目标LUFS值
|
||
- 使用预设配置文件
|
||
|
||
### 3. 性能问题
|
||
- 关闭智能分析:`ENABLE_SMART_VOLUME = False`
|
||
- 使用简单音量配置
|
||
- 减少音频分析频率
|
||
|
||
## 未来改进
|
||
|
||
1. **机器学习优化**:基于用户反馈学习最佳音量配置
|
||
2. **实时预览**:在UI中提供音量调整预览
|
||
3. **批量处理**:支持批量音频标准化
|
||
4. **更多音频格式**:扩展支持的音频格式
|