编辑
2025-11-22
C#
00

目录

简介
环境准备
实现方案
基础音频均衡器
进阶功能:预设均衡器模式
使用进阶功能示例
总结

简介

音频均衡器(Equalizer)是音频处理中的重要工具,可以调节不同频率段的音量,用于改善音质或创造特定的音频效果。本文将详细介绍如何使用 Xabe.FFmpeg 实现音频均衡功能。

环境准备

首先需要安装必要的 NuGet 包:

XML
<PackageReference Include="Xabe.FFmpeg" Version="5.2.6" />

实现方案

基础音频均衡器

下面是一个基础的音频均衡器实现,可以调节多个频段:

C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Xabe.FFmpeg; namespace App14 { public class AudioEqualizer { // 音频处理的主要方法 public async Task ApplyEqualization(string inputFile, string outputFile, Dictionary<int, double> frequencyGains) { try { // 构建均衡器滤镜字符串 string equalizerFilter = BuildEqualizerFilter(frequencyGains); // 获取媒体信息 IMediaInfo mediaInfo = await FFmpeg.GetMediaInfo(inputFile); // 配置转换 IConversion conversion = FFmpeg.Conversions.New() .AddStream(mediaInfo.AudioStreams) .SetOutputFormat("mp3") // 或其他适当的格式 .AddParameter($"-af \"{equalizerFilter}\"") .SetOutput(outputFile); // 添加转换进度处理 conversion.OnProgress += (sender, args) => { var percent = (int)(Math.Round(args.Duration.TotalSeconds / args.TotalLength.TotalSeconds, 2) * 100); Console.WriteLine($"处理进度: {percent}%"); }; // 执行转换 await conversion.Start(); } catch (Exception ex) { Console.WriteLine($"音频处理出错: {ex.Message}"); throw; } } // 构建均衡器滤镜字符串 private string BuildEqualizerFilter(Dictionary<int, double> frequencyGains) { var filters = new List<string>(); foreach (var gain in frequencyGains) { // 使用 equalizer 滤镜,设置频率和增益 filters.Add($"equalizer=f={gain.Key}:t=q:w=1:g={gain.Value}"); } // 将所有滤镜串联起来 return string.Join(",", filters); } } }
C#
using Xabe.FFmpeg; namespace App14 { internal class Program { static async Task Main(string[] args) { FFmpeg.SetExecutablesPath("D:\\Software\\ffmpeg-master-latest-win64-gpl-shared\\bin"); // 创建 AudioEqualizer 实例 AudioEqualizer equalizer = new AudioEqualizer(); // 示例1: 基本调用 string inputFile = "D:\\Video\\m1.mp3"; string outputFile = "D:\\m1.mp3"; // 创建频率增益字典 Dictionary<int, double> frequencyGains = new Dictionary<int, double> { { 60, 3.0 }, // 60Hz增强3dB { 170, -2.0 }, // 170Hz减弱2dB { 310, 1.5 }, // 310Hz增强1.5dB { 600, 2.0 }, // 600Hz增强2dB { 1000, -1.0 }, // 1kHz减弱1dB { 3000, 2.5 }, // 3kHz增强2.5dB { 6000, 3.0 }, // 6kHz增强3dB { 12000, 1.5 } // 12kHz增强1.5dB }; try { // 调用均衡化处理方法 await equalizer.ApplyEqualization(inputFile, outputFile, frequencyGains); Console.WriteLine("音频处理完成!"); } catch (Exception ex) { Console.WriteLine($"处理失败: {ex.Message}"); } } } }

image.png

频率增益设置说明:

  • 60-250Hz: 低频范围,影响低音
  • 250-2000Hz: 中频范围,影响人声主要频段
  • 2000-12000Hz: 高频范围,影响清晰度和亮度

进阶功能:预设均衡器模式

C#
public class AdvancedAudioEqualizer : AudioEqualizer { // 预定义均衡器模式 public enum EqualizerPreset { Normal, Bass, Treble, VocalBoost, Rock, Classical } // 获取预设的均衡器设置 public Dictionary<int, double> GetPresetGains(EqualizerPreset preset) { switch (preset) { case EqualizerPreset.Bass: return new Dictionary<int, double> { { 60, 6 }, { 170, 4 }, { 310, 1 }, { 600, 0 }, { 1000, 0 }, { 3000, 0 }, { 6000, -1 }, { 12000, -2 } }; case EqualizerPreset.Treble: return new Dictionary<int, double> { { 60, -2 }, { 170, -1 }, { 310, 0 }, { 600, 1 }, { 1000, 2 }, { 3000, 4 }, { 6000, 6 }, { 12000, 8 } }; case EqualizerPreset.VocalBoost: return new Dictionary<int, double> { { 60, -2 }, { 170, -1 }, { 310, 0 }, { 600, 3 }, { 1000, 4 }, { 3000, 3 }, { 6000, 0 }, { 12000, -1 } }; // 其他预设模式... default: return new Dictionary<int, double> { { 60, 0 }, { 170, 0 }, { 310, 0 }, { 600, 0 }, { 1000, 0 }, { 3000, 0 }, { 6000, 0 }, { 12000, 0 } }; } } // 使用预设模式处理音频 public async Task ApplyPresetEqualization( string inputFile, string outputFile, EqualizerPreset preset) { var gains = GetPresetGains(preset); await ApplyEqualization(inputFile, outputFile, gains); } }

使用进阶功能示例

C#
using Xabe.FFmpeg; namespace App14 { internal class Program { static async Task Main(string[] args) { FFmpeg.SetExecutablesPath("D:\\Software\\ffmpeg-master-latest-win64-gpl-shared\\bin"); var advancedEqualizer = new AdvancedAudioEqualizer(); try { // 使用预设的低音增强模式 await advancedEqualizer.ApplyPresetEqualization( "D:\\Video\\m1.mp3", "D:\\output_bass_boosted.mp3", AdvancedAudioEqualizer.EqualizerPreset.Bass ); // 使用预设的人声增强模式 await advancedEqualizer.ApplyPresetEqualization( "D:\\Video\\m1.mp3", "D:\\output_vocal_enhanced.mp3", AdvancedAudioEqualizer.EqualizerPreset.VocalBoost ); Console.WriteLine("所有音频处理完成!"); } catch (Exception ex) { Console.WriteLine($"处理失败: {ex.Message}"); } } } }

image.png

总结

本文详细介绍了如何使用 Xabe.FFmpeg 实现音频均衡功能,从基础的均衡器实现到预设模式的高级用法。通过合理使用这些功能,可以实现专业级的音频处理效果。在实际应用中,建议根据具体需求调整频率点和增益值,以获得最佳的音频效果。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!