首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试获取音频原始数据并使用PyAv打印它

尝试获取音频原始数据并使用PyAv打印它
EN

Stack Overflow用户
提问于 2022-08-01 19:43:39
回答 1查看 151关注 0票数 1

我是PyAv库的新手,或者一般的音频编程新手,所以我对任何错误表示歉意。

我正在尝试从mp4 file加载和打印原始音频数据

我试着读“cookbook”和“google”,我有点困惑。

如果我的理解是正确的,我应该从框架中得到飞机,然后对它进行解码,但我不知道具体是怎么回事。

如能提供有关这一问题的任何资料,将不胜感激。

代码语言:javascript
运行
复制
container = av.open(
    '/Users/ufk/Downloads/1.mp4')

for packet in container.demux():
    for frame in packet.decode():
        if isinstance(frame, av.audio.frame.AudioFrame):
            layout = frame.layout
            channels = layout.channels
            (chl, chr) = channels
            print (frame,
                   frame.format,
                   frame.layout,
                   frame.rate,
                   frame.samples)
            print (chl, chr)
            for plane in frame.planes:
                print(plane)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-02 13:15:36

感谢Tim在注释中的帮助,我开始使用numpy数组,我创建了一个空数组并将其附加到每个框架中。当然,音频只有几秒钟,所以它不会消耗内存,我绘制了数据,以确保我正确地看到它,它看起来很好。

所以密码:

代码语言:javascript
运行
复制
import av
import numpy as np
import matplotlib.pyplot as plt

container = av.open(
    '2.mp3')

data = np.empty(shape=0)

for packet in container.demux():
    for frame in packet.decode():
        if isinstance(frame, av.audio.frame.AudioFrame):
            layout = frame.layout
            channels = layout.channels
            (chl, chr) = channels
            print(frame,
                  frame.format,
                  frame.layout,
                  frame.rate,
                  frame.samples)
            print(chl, chr)
            array = frame.to_ndarray()[0]
            data = np.concatenate([data, array])

plt.subplot(2, 1, 1)
plt.title("Original audio signal")
plt.plot(data)
plt.grid()
plt.tight_layout()
plt.show()

其结果是:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73198826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档