如何用torchaudio实现与ffmpeg指定命令一致的音频重采样效果?
实现与指定ffmpeg命令一致效果的torchaudio代码(2.0.2版本)
你的目标ffmpeg命令ffmpeg -i source -ac 1 -ar 16000 target包含两个核心操作:
- 将音频转为单声道(
-ac 1) - 重采样至16000Hz(
-ar 16000)
你当前的torchaudio代码只完成了重采样,缺少单声道转换步骤,以下是补全后的完整代码:
import torch import torchaudio # 加载音频文件,返回波形(形状为[通道数, 采样点数])和原采样率 waveform, sr = torchaudio.load(filepath) # 将多声道音频转换为单声道(ffmpeg默认采用通道均值的方式合并) if waveform.size(0) > 1: waveform = torch.mean(waveform, dim=0, keepdim=True) # 初始化重采样变换并执行重采样 transform = torchaudio.transforms.Resample(orig_freq=sr, new_freq=16000) waveform = transform(waveform)
关键细节说明:
- ffmpeg的
-ac 1默认会对多声道音频取通道均值来生成单声道,代码中用torch.mean(waveform, dim=0, keepdim=True)实现了相同逻辑 - 保留
keepdim=True是为了维持波形的维度结构(保持[1, 采样点数]的形状,和torchaudio的张量格式一致)
内容的提问来源于stack exchange,提问作者hsiaomichiu
相关产品推荐
相关产品推荐

