You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MATLAB中读取音频文件时保留语音停顿?

问题描述

我需要将一批WebM格式的人声录音导入MATLAB,使用audioread()读取后,时间序列丢失了语音中的停顿(静音时段被截断)。尝试过用VLC和ffmpeg将WebM转成.mp3、.ogg、.opus、.mp4格式再读取,停顿依然丢失。

补充:原WebM文件用VLC播放时停顿存在,但经VLC转换为任何格式后,停顿都无法保留。

现有代码

ffmpeg转WebM为WAV的代码

ffmpegPath = 'C:\Users\rapiduser\Downloads\ffmpeg-6.0-essentials_build\ffmpeg-6.0-essentials_build\bin\ffmpeg.exe';  %ffmpeg exe路径
listAudios = dir('Z:\data\files\*audio.webm');  %音频文件路径数组
nAudios = length(listAudios);
outputFolder = dir('Y:\IntermediateData\WAVFiles');  %WAV文件存放目录

for idxAud = 1:nAudios
    inputFile = strcat(listAudios(idxAud).folder, '\', listAudios(idxAud).name);  %输入文件路径
    outputFile = strcat(outputFolder(1).folder, '\', listAudios(idxAud).name(1:end-5), '.wav');  %输出文件路径
    command = strcat(ffmpegPath, " -i ", inputFile, " ", outputFile);  %ffmpeg执行命令
    [~] = system(command);
end

读取WAV文件的代码

listWav = dir('Y:\IntermediateData\WAVFiles\*.wav');  %WAV文件列表
nAudios = length(listWav);

for idxAud = 1:nAudios
    [y,Fs] = audioread(listWav(idxAud).folder + "\\" + listWav(idxAud).name);  %读取单个文件
end
解决方法

问题根源是转码工具(VLC/ffmpeg)默认开启了静音修剪或有损编码优化,导致静音时段被丢弃。以下是具体解决步骤:

1. 修改ffmpeg转码命令,强制保留所有音频数据

在ffmpeg命令中添加参数,禁用静音移除逻辑并指定无损编码:

% 替换原command行
command = strcat(ffmpegPath, " -i ", inputFile, " -af ""silenceremove=enable=0"" -c:a pcm_s16le ", outputFile);

参数说明:

  • -af "silenceremove=enable=0":明确禁用静音移除滤镜,确保所有音频段(包括静音)完整保留
  • -c:a pcm_s16le:指定输出为PCM 16位无损格式(WAV原生编码),避免有损压缩丢失音频信息

2. 验证转码文件的完整性

转码完成后,用VLC查看WAV文件的时长,确认与原WebM文件一致。若时长匹配,说明静音时段已被保留。

3. 直接用MATLAB读取WebM(无需转码)

MATLAB R2022b及以上版本支持直接读取WebM文件,可跳过转码步骤:

listAudios = dir('Z:\data\files\*audio.webm');
nAudios = length(listAudios);

for idxAud = 1:nAudios
    inputFile = fullfile(listAudios(idxAud).folder, listAudios(idxAud).name);
    [y,Fs] = audioread(inputFile);
    % 后续处理逻辑
end

注:低版本MATLAB可能需要额外安装编解码器,但优先推荐使用高版本直接读取。

4. 调整VLC转码设置(若偏好VLC)

如果坚持用VLC转码,需关闭静音修剪选项:

  • 打开VLC,选择「媒体」→「转换/保存」
  • 添加原WebM文件后点击「转换」
  • 在「音频编解码器」设置中,取消所有与静音修剪、自动裁剪相关的选项
  • 选择输出格式为WAV(无损)后执行转码

内容的提问来源于stack exchange,提问作者Jessica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:49:52