pydub、ffmpeg 音频文件声道选择转换、采样率更改

快速查看音频通道数和每个通道能力判断具体哪个通道说话;一般能量大的那个算是说话

bash 复制代码
import wave
from pydub import AudioSegment
import numpy as np

def read_wav_file(file_path):
    with wave.open(file_path, 'rb') as wav_file:
        params = wav_file.getparams()
        num_channels = params.nchannels
        sample_width = params.sampwidth
        frame_rate = params.framerate
        num_frames = params.nframes
        print(f"Number of channels: {num_channels}")
        print(f"Sample width: {sample_width}")
        print(f"Frame rate: {frame_rate}")
        print(f"Number of frames: {num_frames}")
        
        frames = wav_file.readframes(num_frames)
        audio_data = np.frombuffer(frames, dtype=np.int16)
        if num_channels > 1:
            audio_data = audio_data.reshape(-1, num_channels)
        return audio_data, frame_rate, num_channels

def analyze_channels(audio_data, frame_rate, num_channels):
    for channel in range(num_channels):
        channel_data = audio_data[:, channel] if num_channels > 1 else audio_data
        # 计算通道的能量
        energy = np.sum(np.abs(channel_data))
        print(f"Channel {channel} energy: {energy}")
        # 你可以在这里添加更多的分析逻辑,比如使用语音活动检测(VAD)来判断说话声

if __name__ == "__main__":
    file_path = r"E:\allchat\output.wav"
    audio_data, frame_rate, num_channels = read_wav_file(file_path)
    analyze_channels(audio_data, frame_rate, num_channels)

这里 channel0 的声音算说话的

1、转换mono单声道,选择人声的那个通道

mp3格式

bash 复制代码
from pydub import AudioSegment

def extract_and_save_channel(input_file, output_file, channel_index):
    # 读取 MP3 文件
    audio = AudioSegment.from_mp3(input_file)
    
    # 提取特定通道
    if audio.channels > 1:
        channel_data = audio.split_to_mono()[channel_index]
    else:
        channel_data = audio
    
    # 保存提取的通道为新的 MP3 文件
    channel_data.export(output_file, format="mp3")

if __name__ == "__main__":
    input_file = "your_audio_file.mp3"
    output_file = "channel_0.mp3"
    channel_index = 0  # 选择 Channel 0
    
    extract_and_save_channel(input_file, output_file, channel_index)

wav格式

bash 复制代码
from pydub import AudioSegment

# 加载WAV文件
wav_file_path = r"E:\allchat\output_16000.wav"
audio_segment = AudioSegment.from_wav(wav_file_path)

# 提取Channel 0
if audio_segment.channels > 1:
    channel_0 = audio_segment.split_to_mono()[0]
else:
    channel_0 = audio_segment

# 导出为单声道WAV文件
mono_wav_file_path = r"E:\allchat\output_16000_channel_0.wav"
channel_0.export(mono_wav_file_path, format="wav")

2、采样率更改为16000

bash 复制代码
from pydub import AudioSegment

def resample_wav_with_pydub(input_file, output_file, new_rate):
    # 读取原始WAV文件
    audio = AudioSegment.from_wav(input_file)
    
    # 设置新的采样率
    audio = audio.set_frame_rate(new_rate)
    
    # 导出重采样后的WAV文件
    audio.export(output_file, format='wav')

# 使用示例
resample_wav_with_pydub('input.wav', 'output_16000.wav', 16000)
相关推荐
烟雨江南7857 小时前
200路并发语音识别系统实践:CPU、GPU与国产昇腾三种部署方案怎么选?
人工智能·websocket·音视频·语音识别·ai客服
视频技术分享8 小时前
视频会议系统技术全解:底层架构、选型标准与实战优化
架构·音视频
林墨聊AIGC10 小时前
AI视频怎么做跳舞的动作效果:从入门到精通的舞蹈动画制作指南
大数据·人工智能·自动化·aigc·音视频
小鱼爱吃草灬灬13 小时前
实时面试辅助排查清单:音频来源、问题输入与上下文
面试·职场和发展·音视频
行者-全栈开发13 小时前
Spring Boot + FFmpeg 视频批量处理实战:压缩、HLS切片与异步任务引擎
spring boot·ffmpeg·异步处理·视频压缩·hls切片·批量任务·redis队列
可乐鸡翅yeah_13 小时前
HLS 自动化拨测与手动调试分工,流媒体线上监控体系建设实践
运维·自动化·测试用例·音视频·媒体·m3u8·音视频在线播放
欧特克_Glodon15 小时前
OpenCV计算机视觉开发入门与实践<三十五>:开发视频播放器
c++·opencv·计算机视觉·音视频
2301_7681034916 小时前
AI视频创作Agent实战05:Wan场景融合与VideoRetalk口型驱动
人工智能·音视频
淼澄研学17 小时前
Sonos空间音频技术解析与Python本地API控制实操
开发语言·python·音视频
可乐鸡翅yeah_17 小时前
M3U8测试流使用指南,流媒体开发自测与环境校验标准化方案
网络·ffmpeg·音视频·m3u8·m3u8在线·音视频在线播放