ai数字人音频停顿处理,删除无用音频段

您当前的算法中,当静音段被缩短时,生成的静音样本数量是通过比例缩放计算出来的。但这个方法可能会导致一些音频失真,从而产生"沙沙"的噪音。这是因为在处理静音段时,使用了简单的零填充方式,导致音频数据出现突变,从而产生不自然的声音。

为了改进这个算法,可以采用以下思路:

平滑处理:在静音段过渡到有声音的段落时,使用平滑过渡的方式来避免突变,减少噪音。

减少零填充:在静音段缩短时,可以使用更接近原始音频特性的方式来填充缩短后的静音部分,而不是简单地使用零填充。

public static byte\[\] ScaleSilence(byte\[\] inputFile, float silenceThreshold = 0.01f, int silenceDurationMs = 200, int targetSilenceDurationMs = 100)

{

using (var reader = new MyAudioFileReader(inputFile))

{

var samples = new List();

int sampleRate = reader.WaveFormat.SampleRate;

int channels = reader.WaveFormat.Channels;

int silenceSampleCountThreshold = (int)(sampleRate * channels * (silenceDurationMs / 1000.0));

float\[\] buffer = new floatsampleRate \* channels;

int samplesRead;

int silentSampleCount = 0;

List silentSamples = new List();

复制代码
    while ((samplesRead = reader.Read(buffer, 0, buffer.Length)) > 0)
    {
        for (int i = 0; i < samplesRead; i++)
        {
            if (Math.Abs(buffer[i]) <= silenceThreshold)
            {
                silentSampleCount++;
                silentSamples.Add(buffer[i]);
            }
            else
            {
                if (silentSampleCount >= silenceSampleCountThreshold)
                {
                    // 计算缩放比例
                    double scale = (double)targetSilenceDurationMs / (silenceDurationMs * (silentSampleCount / (double)silenceSampleCountThreshold));
                    int samplesToKeep = (int)(silentSampleCount * scale);

                    // 使用渐变过渡来处理缩短后的静音部分
                    for (int j = 0; j < samplesToKeep; j++)
                    {
                        float transitionSample = silentSamples[(int)((j / (float)samplesToKeep) * silentSampleCount)];
                        samples.Add(transitionSample);
                    }
                }
                else
                {
                    // 如果静音部分不足以达到阈值,则不做缩短处理,直接添加原始静音样本
                    samples.AddRange(silentSamples);
                }

                silentSampleCount = 0;
                silentSamples.Clear();
                samples.Add(buffer[i]);
            }
        }
    }

    // 保存处理后的音频
    return SaveToBuferr(samples.ToArray(), reader.WaveFormat);
}

}

改进要点:

平滑处理:改进后的代码在静音段的处理上引入了渐变过渡,而不是直接使用零填充。通过逐步调整静音样本的值,可以平滑地过渡到有声音的部分,避免突变带来的噪音。

静音缩短比例:在缩短静音段时,保留了一部分原始的静音样本,通过对样本进行插值计算(逐渐增加或减少静音样本的强度),避免了沙沙噪音的出现。

以上方法能够减少音频失真并有效移除静音部分,同时避免沙沙的噪音。

相关推荐
呆呆敲代码的小Y9 分钟前
5 分钟上手 OpenMontage:把 AI 编程助手变成视频工作室
人工智能·aigc·音视频·ai视频生成·claude code·openmontage
奈斯先生Vector37 分钟前
大模型 Agentic Workflow 架构解构:异构 API 调度与 Token 路由的多模态系统设计
开发语言·前端·架构·prompt·aigc·音视频
海带紫菜菠萝汤39 分钟前
FFmpeg.wasm 实践:在浏览器中运行 FFmpeg 的能力边界与性能瓶颈
前端·javascript·ffmpeg·音视频·wasm
甜甜小酒窝44 分钟前
通过Canvas在网页中将后端发来的一帧帧图片渲染成“视频”的实现过程
音视频
DogDaoDao1 小时前
深度学习增强的视频压缩框架:Neutron Star 如何超越 VVC
人工智能·深度学习·音视频·视频编解码·h266·vvc·视频压缩
byte轻骑兵1 小时前
蓝牙PBP公共广播协议:解锁LE Audio的公共音频新生态
音视频·蓝牙·蓝牙耳机·le audio·低功耗蓝牙音频
AI创界者2 小时前
【8G显存福音】最新LTX-2.3-22B-DISTILLED-1.1-VBVR 整合包文生视频、图生视频,支持首尾帧/单图无限时长,50系显卡全适配!
人工智能·音视频
桐桐桐2 小时前
按目标大小压缩视频:码率反推公式、H.264/H.265 实测与 FFmpeg 自动化
音视频·h.265·h.264
阿童木写作3 小时前
TikTok Shop视频翻译工具实战测评
人工智能·python·音视频
DogDaoDao3 小时前
【论文解读】系数能量引导的快速变换算法:Beyond VVC 编码器优化新思路
音视频·视频编解码·ecm·h266·vvc·变换编码·beyond vvc