为什么使用 2 种方法`ffmpegio`给出的样本数量不同?

问题描述 投票:0回答:1

我有一个采样率为

44100
的 mp3 文件,我们将其命名为
a.mp3

使用Python库

ffmpegio
和以下代码,我得到的样本总量等于
290704

with ffmpegio.open(file, 'ra', blocksize = 16, sample_fmt = 'dbl') as file_opened:

        for i, indata in enumerate(file_opened):

            do some stuff
    print((i + 1) * 16)

但是,

ffmpegio.probe.audio_streams_basic('a.mp3')[0]['nb_samples']

给了我

292608

如何解释

292608
290704
之间的区别?

我在

ffmpegio
文档中进行搜索,但没有发现任何引起我注意的内容:

https://python-ffmpegio.github.io/python-ffmpegio/

谢谢。

我试图获取有关如何计算样本总数的更多信息

ffmpegio.probe.audio_streams_basic()

而且,差异似乎并没有随着 mp3 文件长度的增加而增加。

python ffmpeg mp3 ffprobe sample-rate
1个回答
0
投票

(我是

ffmpegio
开发者)

据我所知,最有可能的嫌疑是

audio_streams_basic()
报告不正确
nb_samples
。如果 ffprobe 不返回
audio_streams_basic
,则
nb_samples
根据 ffprobe 的输出计算
nb_samples
。它的计算是基本的 atm,仅基于持续时间时间戳,可能忽略开始时间和其他计时。

尝试

from pprint import pprint

pprint(ffmpegio.probe.full_details(file,select_streams=0))

并查看您是否在流信息中看到

nb_samples
。如果未包含,请在 GitHub 上报告问题,并提供剪切粘贴的流信息。

也可以尝试一下

fs, x = ffmpegio.audio.read(file)
print(x.shape)

确保样本计数与流读取器的样本计数匹配。

最后,除了处理发布评论的最后一个块之外,读取流保证一次返回

blocksize
个样本。

© www.soinside.com 2019 - 2024. All rights reserved.