首页 > 其他分享 >使用sounddevice录制扬声器的声音和录屏

使用sounddevice录制扬声器的声音和录屏

时间:2024-12-22 22:22:03浏览次数:4  
标签:wf time sounddevice devices 录屏 截屏 扬声器 import

寻找扬声器声音的可录制接口

import sounddevice as sd
import wave
import os

devices=sd.query_devices()
print(devices)

for i in range(len(devices)):
	wf=wave.open(f'test{i}.wav','wb')
	wf.setnchannels(1)
	wf.setsampwidth(2)
	wf.setframerate(16000)

	def callback(indata,frames,time,status):
		wf.writeframes(bytes(indata))

	try:
		with sd.RawInputStream(samplerate=16000,blocksize=4096,dtype='int16',channels=1,device=i,callback=callback):
			sd.sleep(10000)
		print(f'{i} interface available')
		wf.close()
	except:
		print(f'{i} interface unavailable')
		wf.close()
		os.remove(f'test{i}.wav')

针对sounddevice.query_devices()所查询到的每个设备录制音频,出现报错则说明该设备无法录制。聆听每个可用设备所生成的test.wav,可以找到目标设备。

录制屏幕

import sounddevice as sd
import wave
import os
import time
import numpy as np
from PIL import ImageGrab,Image
import cv2
from multiprocessing import Process
import subprocess
import shutil

def record_screen_motion(st):
    while time.time()<st:
        pass
    while True:
        img=ImageGrab.grab(bbox=(0,0,1920,1080)) # windows-系统设置-屏幕-分辨率,屏幕坐标系
        ct=time.time()
        img=np.array(img.getdata(),np.uint8).reshape(img.size[1],img.size[0],3)
        img=cv2.cvtColor(img,cv2.COLOR_RGB2BGR)
        cv2.imwrite(f'{int((ct-st)*10):05d}.jpg',img)

if __name__=='__main__':
    di=time.strftime('%Y%m%d%H%M%S')
    os.mkdir(di)
    os.chdir(di)
    wf=wave.open('test.wav','wb')
    wf.setnchannels(1)
    wf.setsampwidth(2)
    wf.setframerate(16000)

    def callback(indata,frames,time,status):
        wf.writeframes(bytes(indata))

    try:
        st=time.time()
        record_screen_process=Process(target=record_screen_motion,args=(st+1,))
        record_screen_process.daemon=True
        record_screen_process.start()
        while time.time()<st+1:
            pass
        with sd.RawInputStream(samplerate=16000,blocksize=1024,dtype='int16',channels=1,device=21,callback=callback):
                while True:
                    sd.sleep(10000)
    except KeyboardInterrupt:
        wf.close()
        files=os.listdir()
        existed_num=[]
        for file in files:
            if file.endswith('.jpg'):
                existed_num.append(int(file.split('.')[0]))
        existed_num.sort()
        count=0
        for i in range(existed_num[-1]):
            if not os.path.exists(f'{i:05d}.jpg'):
                shutil.copy(f'{existed_num[count]:05d}.jpg',f'{i:05d}.jpg')
            else:
                count+=1
        subprocess.run('ffmpeg -f image2 -framerate 10 -i "%05d.jpg" -b:v 25313k test.mp4')
        subprocess.run('ffmpeg -i test.mp4 -i test.wav -vcodec copy -acodec aac o.mp4') # 音频流进行aac编码,来构造视频,MP4容器中不支持PCM(pcm_alaw、pcm_s16le),https://cloud.tencent.com/developer/ask/sof/105539438
        print('完成录制屏幕任务')

截屏和录音在脚本启动1秒后同时开始进行,由于笔记本的垃圾性能,隔40毫秒启动一个截屏线程(以电影帧率来做帧),跟不用线程、连续截屏的效果一样(1fps),算好截屏时跟0帧之间的距离,按照10fps为帧编号,且复制补充中间帧,最后构造图片流,如果电脑硬件条件好,截屏速率大于10fps,可以考虑改变一些参数,使得画面更加流畅。

参考链接:

massorant Vosk_real-time_stt

tellw/speech_input

python 三种方式实现截屏(详解+完整代码)

创建于2412222215,修改于2412222215

标签:wf,time,sounddevice,devices,录屏,截屏,扬声器,import
From: https://www.cnblogs.com/tellw/p/18622662

相关文章

  • deepin 技术双周报丨Treeland支持截图录屏功能、适配 wlroots 0.18 版本,6.12 内核完成
    第六期deepin技术双周报已出炉,我们会简单列出deepin各个小组在过去两周的相关工作进展,也会阐述未来两周的大致规划,一起来看!DDE针对deepin23的缺陷修复与deepin25的需求开发在同步稳步进行。具体进展与计划如下:进展:a.  对剪切板、DDE会话组件、DDEPolkit组件......
  • 手机录屏技术原理解析与应用场景
    手机录屏技术的原理主要依赖于设备操作系统的功能以及硬件支持,以下是详细步骤:1.屏幕图像捕获手机录屏的核心在于捕获屏幕上的图像。现代智能手机操作系统(如Android和iOS)通过系统接口将当前显示的内容逐帧捕获,并传递给录屏应用。这些系统API会捕获屏幕上的像素数据,然后将这些数据转......
  • 录屏工具TOP10,探索你最爱的免费屏幕录制软件!
    现在很多时候都需要用到录屏工具,如记录在线课程、会议内容、制作游戏解说/教程视频,等等,因此一款优秀的录屏工具都会让你的创作变得更加得心应手。今天就给大家来盘点一下TOP10的免费录屏软件,看看哪一个是你的最爱吧!录屏工具1.嗨格式录屏大师录屏大师软件免费下载_高清电脑......
  • 2024超级好用电脑录屏和视频编辑软件Camtasia汉化版下载
    嘿,小伙伴们!......
  • 4款高效电脑录屏软件推荐:高清、不卡顿、无水印
    在当今这个数字化时代,屏幕录制技术已经成为教育工作者、游戏玩家以及各类数字内容创作者不可或缺的工具。一款高效、稳定的录屏软件不仅能够帮你轻松捕捉屏幕上的精彩瞬间,还能提升你的内容创作效率。今天,我们就为大家推荐5款高清、不卡顿、无水印的电脑录屏软件,让你在录屏之路......
  • chrome-截图录屏插件-Awesome Screenshot
    ......
  • 班迪儿录屏 Bandicam v7 下载及详细安装教程,办公学习必备
    具体安装方式如下:地址:Bandicam-7.0.2.2138-x64-Portable.zip下载解压后将BandicamPortable.exe发送到桌面快捷方式启动桌面图标可以正常使用了......
  • 电脑如何录屏?无水印、高清晰度电脑录屏教程
    现如今,电脑录屏已成为我们工作、学习和娱乐中不可或缺的一部分,日常可以用来录制教学视频、游戏直播、会议记录等等,但有些朋友可能还不知道怎么高清录制视频,今天就给大家带来了几个简单又实用的方法,需要的朋友快码住!1.嗨格式录屏大师(录屏大师软件免费下载_高清电脑屏幕录像......
  • pip install pyaudio sounddevice error: externally-managed-environment
    shgbitai@shgbitai-C9X299-PGF:~/pythonworkspace/ai-accompany$pipinstallpyaudiosounddeviceerror:externally-managed-environment×Thisenvironmentisexternallymanaged╰─>ToinstallPythonpackagessystem-wide,tryaptinstallpython3-xyz,wh......
  • windows电脑怎么录屏?电脑录屏全攻略,轻松捕捉精彩瞬间
    在数字化时代,屏幕录制已成为我们日常生活和工作中不可或缺的一部分。无论是记录游戏的高光时刻、制作教学视频,还是保存重要的在线会议内容,Windows电脑都为我们提供了多种高效便捷的录屏方式,如果你还不知道怎么录屏,不妨继续看下去吧。一、系统自带录屏工具Windows10和11系......