|
本帖最后由 yellowolf 于 20-9-21 10:34 编辑
测试用ffmpeg从一个样本wav文件截取指定时长(t=0.01)的片段,但得到的结果文件时长却长达0.05s。是不是我的姿势不对?还是0.05s是ffmpeg的最大精度?
测试代码如下:
1、生成wav样本文件:
- fs = 44100; %采样频率
- T = 1/fs; %采样周期
- time1 = 1024/fs*30; %第一个声音片段的总时长
- freq1 = 261; %第一个声音片段的频率(音调)
- tone1 = sin(2*pi*freq1*(0:T:time1)); %生成第一个声音片段,注意需要用db2mag()函数把dB转换成magnitude,或者用公式以人耳听力正常范围的分贝标准10^((vol-85)/20)转换。
- Tone = [tone1]; %组合所有声音片段
- sound(Tone,fs) %可以播放声音的函数 sound()
- %存储.wav音频文件
- filename = ('test.wav'); %给文件取名
- audiowrite(filename,Tone,fs) %存储.wav音频文件,在这里文件名为test.wav
复制代码
2、用ffmpeg截取指定时长的文件:
ffmpeg -i test.wav -vn -acodec copy -ss 0:0:0 -t 0:0.01 output1.wav
ffmpeg -i test.wav -vn -acodec copy -ss 0:0:0 -t 0:0.02 output2.wav
ffmpeg -i test.wav -vn -acodec copy -ss 0:0:0 -t 0:0.03 output3.wav
ffmpeg -i test.wav -vn -acodec copy -ss 0:0:0 -t 0:0.04 output4.wav
ffmpeg -i test.wav -vn -acodec copy -ss 0:0:0 -t 0:0.05 output5.wav
3、验证截取的精度:
- figure(1)
- N = 3;
- n = 0;
- n = n + 1;
- subplot(N,1,n)
- [test1, fs] = audioread('test.wav');
- plot(test1) %可以画出声音的波形图
- n = n + 1;
- subplot(N,1,n);
- [test2, fs] = audioread('output4.wav');
- plot(test2) %可以画出声音的波形图
- n = n + 1;
- subplot(N,1,n);
- [test3, fs] = audioread('output5.wav');
- plot(test3) %可以画出声音的波形图
复制代码
4、奇怪的结果:
output1~output4的时长都是一样的,0.05s,从文件大小看也是一样的。;
output5的时长突然变为0.09s。
求专业大佬解惑。 |
|