numpy 如何在python和ffmpeg或类似文件中从mp3文件读取音量值

d5vmydt9  于 2023-05-07  发布在  Python
关注(0)|答案(1)|浏览(97)

我想从mp3文件(filename.mp3)中读取音量值,而不是通过录制音频文件,如本例所示:

import sounddevice as sd
import numpy as np

def print_sound(indata, outdata, frames, time, status):
    volume_norm = np.linalg.norm(indata)*10
    print (int(volume_norm))

with sd.Stream(callback=print_sound):
    sd.sleep(10000)

输出:

1
1
1
0
1
1
1
1
0
0
0
0
0
17
24
8
5
15
18
16
6
2
3
5
10
8
5
1
0
0
2
4
3
1
0
0
0
1
3
4
2
0
0
2
2
4
4
3
0
0
2
2
5
3
0
0
0
0
3
3
1
0
0
0
0
0
1
1
1
1
1
0
0
0
0
0
0
0
1
2
2
2
2
2
2
3
4
3
3
7
13
4
4
3
5
6
3
2
3
3
4
6
6
6
4
3
3
2
3
6
6
8
12
15
1
0
0
1
12
19
2
4
3
6
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
5
0
0
2
3
0
0
0
0
0
5
5
17
4
6
3
4
5
16
10
7
31
5
1
0
0
0
0
3
3
1
0
0
0
0
0
0
0
0
0
0
1
7
0
2
5
20
5
6
5
29
12
4
7
2
0
1
5
13
51
5
9
44
7
3
3
4
4
4
1
1
1
1
110
71
0
0
48
23
28
4
0
0
0
0
0
74
53
37
29
26
15
17
14
7
5
5
6
6
6
6
7
7
7
7
7
7
7
7
8
8
8
7
7
6
6
6
6
6
6
4
53
47
18
13
9
8
8
7
5
4
4
4
4
5
6
6
6
5
4
3
3
3
2
3
2
3
3
3
3
3
3
4
4
4
5
5
5
6
7
7
8
7
18
8
2
2
4
hjqgdpho

hjqgdpho1#

试试这个:
安装:pip install ffmpegio
那么下面的代码应该做你想要的:

import ffmpegio
import numpy as np

nframes=16 # read 16 frames at a time

with ffmpegio.open(mp3file, 'ra', blocksize=nframes, sample_fmt='dbl') as file:
    for i, indata in enumerate(file):
        volume_norm = np.linalg.norm(indata)*10
        n0 = i*indata # starting sample index
        t = np.range(n0,n0+volume_norm.shape[0])/file.sample_rate       
        print (int(volume_norm))

sample_fmt='dbl'参数使indata成为float数据类型。如果要保留原始样本类型,请删除参数。
我是ffmpegio库的开发人员。如果您遇到任何问题,请告诉我,我会尽快解决。
编辑:固定frames-〉indata

相关问题