栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python练手

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python练手

本想使用进程池,同步两个一起记录合并,结果截屏这个函数里延时有问题,总不能等待后执行。
将视频帧数调整后虽然可以拉近时间,但是合并后的视频与音频不同步,无法正常使用。

import uuid,socket,time
import pyautogui
import cv2
import numpy as np
import pyttsx3 #语音播放
import sounddevice as sd
from scipy.io.wavfile import write
from multiprocessing import Pool #进程池
import os

#音频文件合成
def ffmpeg_hb(file1,file2,result):
# 将audio1.mp4 与 video.mp4合并 输出output.mp4
#ffmpeg.exe -i audio1.mp4 -i video.mp4 -acodec copy -vcodec copy output.mp4
os.system(f"ffmpeg.exe -i {file1} -i {file2} -acodec copy -vcodec copy {result}")
return ‘ffmpeg_ok’

#调用系统录音系统生成文件
def get_wav_write(file_name,seconds):
fs = 16000 # Sample rate
seconds = seconds # 时长秒数秒钟
myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=1)
sd.wait()
write(file_name + ‘.wav’, fs, myrecording) # Save as WAV file
return file_name + ‘.wav’

#获取电脑设备号
def get_mac():
#mac
mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
# 获取主机名
hostname = socket.gethostname()
# 获取IP
ip = socket.gethostbyname(hostname)
# 结果数据导出
pc_mac = {‘mac’:mac,‘hostname’:hostname,‘ip’:ip}
return pc_mac

时间计算

def get_current_time():
ct = time.time()
local_time = time.localtime(ct)
data_head = time.strftime(“%Y%m%d%H%M%S”, local_time)
data_secs = abs(ct - round(ct)) * 1000
time_stamp = “%s%03d” % (data_head, data_secs)
return time_stamp

def pyttsx_yybf(text):
engine = pyttsx3.init()
engine.setProperty(‘rate’, 160) #语音速度
engine.say(text) #朗读内容
engine.runAndWait()

def get_win_gui(mac,time):
print(‘get_win_gui1’)
# 录屏准备
fourcc = cv2.VideoWriter_fourcc(‘X’, ‘V’, ‘I’, ‘D’)
fps = 16
output = cv2.VideoWriter(mac +‘.avi’, fourcc, fps, (1366, 768))
frame_num = time * fps
# 循环执行
while True and frame_num > 0:
print(‘frame_num’,frame_num)
in_time = get_current_time()
# print(‘in_time’,in_time)
# 分别代表:左上角坐标,宽高
img = pyautogui.screenshot(region=[0, 0, 1366, 768])
# 对获取的图片转换成二维矩阵形式,后再将RGB转成BGR
# 因为imshow,默认通道顺序是BGR,而pyautogui默认是RGB所以要转换一下,不然会有点问题
img_cv = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
output.write(img_cv)
frame_num -= 1
#time.sleep(0.0003)
print(‘get_win_gui2’)
return mac +‘.avi’

if name == ‘main’:

p = Pool(3)

pyttsx_yybf('倒数开始截屏')
for i in range(3):
    pyttsx_yybf('%d 秒' % (3-i))
    time.sleep(0.5)
pyttsx_yybf('截屏开始')

# 获取系统数据
mac_id = get_mac()
# 展现数据
print('计算机参数展示', mac_id)
# 获取内容
mac, hostname, ip = mac_id['mac'], mac_id['hostname'], mac_id['ip']

time_num = 10
# 录屏准备
p.apply_async(get_win_gui, args=(mac, time_num))
# 录音准备
p.apply_async(get_wav_write, args=(mac, time_num))

p.apply_async(time.sleep, args=(time_num + 0,))
p.close()
p.join()

pyttsx_yybf('截屏结束')
try:
    os.remove('jieguo.avi')
except:
    pass
time.sleep(0.5)
ffmpeg_hb(mac + '.avi', mac + '.wav', 'jieguo.avi')
pyttsx_yybf('转换结束')
os.startfile('jieguo.avi')
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/929079.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号