python:录屏录音
import pyaudio
import wave
from PIL import ImageGrab
import cv2
import threading
import time
from numpy import array
from moviepy.editor import *
import os class PyRecord:
def __init__(self, file_path="test"):
self.allow_record = True
self.file_path = file_path def record_audio(self):
# 如无法正常录音 请启用计算机的"立体声混音"输入设备
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 11025
p = pyaudio.PyAudio()
stream = p.open(
format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK,
)
wf = wave.open(self.file_path + ".wav", "wb")
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE) while self.allow_record:
data = stream.read(CHUNK)
wf.writeframes(data) stream.stop_stream()
stream.close()
p.terminate()
wf.close() def record_screen(self):
im = ImageGrab.grab()
video = cv2.VideoWriter(
self.file_path + ".avi", cv2.VideoWriter_fourcc(*"XVID"), 10, im.size
)
while self.allow_record:
im = ImageGrab.grab()
im = cv2.cvtColor(array(im), cv2.COLOR_RGB2BGR)
video.write(im)
video.release() def compose_file(self):
print("合并视频&音频文件")
audio = AudioFileClip(self.file_path + ".wav")
video = VideoFileClip(self.file_path + ".avi")
ratio = audio.duration / video.duration
video = video.fl_time(lambda t: t / ratio, apply_to=["video"]).set_end(
audio.duration
)
video = video.set_audio(audio)
video = video.volumex(5)
video.write_videofile(
self.file_path + "_out.avi", codec="libx264", fps=10, logger=None
)
video.close() def remove_temp_file(self):
print("删除缓存文件")
os.remove(self.file_path + ".wav")
os.remove(self.file_path + ".avi") def stop(self):
print("停止录制")
self.allow_record = False
time.sleep(1)
self.compose_file()
self.remove_temp_file() def run(self):
t = threading.Thread(target=self.record_screen)
t1 = threading.Thread(target=self.record_audio)
t.start()
t1.start()
print("开始录制") pr = PyRecord()
pr.run()
time.sleep(40)#录制40秒,可以自己修改
pr.stop()
#录音代码
import pyaudio
import wave
def start_audio(time = 20,save_file="test.wav"):
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 16000
RECORD_SECONDS = time #需要录制的时间
WAVE_OUTPUT_FILENAME = save_file #保存的文件名
p = pyaudio.PyAudio() #初始化
print("ON")
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)#创建录音文件
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)#开始录音
stream.stop_stream()
stream.close()
p.terminate() print("OFF") wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') #保存
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close() start_audio()
python:录屏录音的更多相关文章
- 再见,付费录屏软件!我用70行Python代码打造免费版!
- C#开源录音组件、录像组件、录屏组件及demo源码
在多媒体系统中,一般都会涉及到录音.录像.录屏问题,采集得到的数据可以用来传输.播放.或存储.所以,对于像课件录制系统.语音视频录制系统.录屏系统等,多媒体数据的采集就是最基础的功能之一. MCapt ...
- webex录屏
你在寻找好用的录屏软件吗?商用级品质的 WebEx Recorder 就是一款优秀的录屏软件.WebEx Recorder可以录制全屏或指定窗口,可以设定是否包含声音,生成的文件体积极小且极清晰,录制 ...
- 开启全民窃听风云——C#智能录音录像录屏程序源码放送!
·引子 我这人从小有个坏毛病,就是喜欢偷窥别人隐私.当然,在道德上,我时刻要求自己做一名正人君子,只不过是心理上有这癖好罢了.所以我从小就对窃听.窃视.黑客技术.破解技术等疯狂着迷!实际上这也是我走上 ...
- C#实现录音录像录屏源码
以前写过两篇录音和录像的文章(实现语音视频录制.在服务器端录制语音视频),最近有朋友问,如果要实现屏幕录制这样的功能,该怎么做了?实际上录屏的原理跟录音.录像是差不多的,如果了解了我前面两篇文章中介绍 ...
- [转]C#实现录音录像录屏源码
原文地址:http://www.cnblogs.com/zhuweisky/p/3593917.html 以前写过两篇录音和录像的文章(实现语音视频录制.在服务器端录制语音视频),最近有朋友问,如果要 ...
- ffmpeg,rtmpdump和nginx rtmp实现录屏,直播和录制
公司最近在做视频直播的项目,我这里分配到对直播的视频进行录制,录制的方式是通过rtmpdump对rtmp的视频流进行录制 前置的知识 ffmpeg: 用于实现把录屏工具发出的视频和音频流,转换成我们需 ...
- Android5.0以上版本录屏实现
我录屏的方式是分别录制音频和视频,最后合并成mp4格式,比较麻烦,因为网上完整的教程比较少,所以我打算写一个完整版的,照着我的代码写完之后,至少是能够实现功能的,而不是简单的介绍下用法. 1既然是录制 ...
- Qt编写自定义控件35-GIF录屏控件
一.前言 在平时的写作过程中,经常需要将一些操作动作和效果图截图成gif格式,使得涵盖的信息更全面更生动,有时候可以将整个操作过程和运行效果录制成MP4,但是文件体积比较大,而且很多网站不便于上传,基 ...
随机推荐
- pika详解(二) BlockingConnection
pika详解(二) BlockingConnection 本文链接:https://blog.csdn.net/comprel/article/details/94592348 版权 Blocki ...
- TensorFlow多元线性回归实现
多元线性回归的具体实现 导入需要的所有软件包: 因为各特征的数据范围不同,需要归一化特征数据.为此定义一个归一化函数.另外,这里添加一个额外的固定输入值将权重和偏置结合起来.为此定义函数 appe ...
- JVM-gcRoots 和 强引用,软引用, 弱引用, 虚引用, 代码演示和应用场景
什么是垃圾? 什么是gcRoots, 谈谈你对 强, 软, 弱 , 虚引用的理解, 他们的应用场景 jvm采用可达性分析法: 从gcRoots集合开始,自上向下遍历,凡是在引用链上的对象,都不是垃圾, ...
- 『言善信』Fiddler工具 — 15、使用Fiddler抓取HTTPS请求
目录 1.Fiddler抓取HTTPS过程 2.拓展:SSL/TLS证书握手原理 3.Fiddler抓取HTTPS原理总结 4.Fiddler抓取HTTPS设置 步骤1:配置证书 步骤2:勾选设置 5 ...
- Linux命令基础(二)
一.列表显示目录内容-ls 1.显示目录中内容,包括子目录和文件相关属性信息 ls(列表的形式去显示目录内容) [选项](可有可无的) ...
- 十七、.net core(.NET 6)搭建基于Quartz组件的定时调度任务
搭建基于Quartz组件的定时调度任务 先在package包项目下,添加Quartz定时器组件: 新建类库项目Wsk.Core.QuartzNet,并且引用包类库项目.然后新建一个中间调度类,叫Qu ...
- 简单聊聊Ehcache缓存
最近工作没有那么忙,有时间来写写东西.今年的系统分析师报名已经开始了,面对历年的真题,真的难以入笔,所以突然对未来充满了担忧,还是得抓紧时间学习技术. 同事推了一篇软文,看到了这个Ehcache,感觉 ...
- 每日三道面试题,通往自由的道路6——JVM
茫茫人海千千万万,感谢这一秒你看到这里.希望我的面试题系列能对你的有所帮助!共勉! 愿你在未来的日子,保持热爱,奔赴山海! 每日三道面试题,成就更好自我 今天我们继续聊聊JVM的话题吧! 1. 那你知 ...
- excel VBA正则匹配单元格符号,并按符号把单元格拆分行(这里是按第一列分行,分行是从活动单元格的行开始,分行前需要选择所有需要填充内容的列,否则需要后期手动填充)
Sub W() ' MsgBox "行数:" & Selection.Rows.Count Dim rows_count As Integer Dim ro ...
- Redis 底层数据结构之压缩列表
文章参考:<Redis 设计与实现>黄建宏 压缩列表 压缩列表 ziplist 是列表键和哈希键的底层实现之一.当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比 ...