python封装screenrecord成一个录屏工具,并输出gif图

python封装screenrecord成一个录屏工具,并输出gif图用到了moviepy
#! /usr/bin/env python
#coding=utf-8
# -*- coding: utf-8 -*- 

###########################################################################
## Python code generated with wxFormBuilder (version Oct  8 2012)
## http://www.wxformbuilder.org/
##
## PLEASE DO "NOT" EDIT THIS FILE!
###########################################################################

import wx
import wx.xrc
import os
from moviepy.editor import *
###########################################################################
## Class MyFrame1
###########################################################################

class MyFrame1 ( wx.Frame ):
	
	def __init__( self, parent ):
		wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 385,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
				
		self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
		
		bSizer2 = wx.BoxSizer( wx.VERTICAL )
		
		self.m_button_start = wx.Button( self, wx.ID_ANY, u"开始录制", wx.DefaultPosition, wx.Size( 200,-1 ), 0 )
		bSizer2.Add( self.m_button_start, 0, wx.ALL|wx.EXPAND, 5 )
		
		self.m_button_stop = wx.Button( self, wx.ID_ANY, u"停止录制", wx.DefaultPosition, wx.Size( 200,-1 ), 0 )
		bSizer2.Add( self.m_button_stop, 0, wx.EXPAND|wx.ALL, 5 )
		
		self.m_scrolledWindow2 = wx.ScrolledWindow( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.HSCROLL|wx.VSCROLL )
		self.m_scrolledWindow2.SetScrollRate( 5, 5 )
		bSizer3 = wx.BoxSizer( wx.VERTICAL )
		
		self.m_log = wx.StaticText( self.m_scrolledWindow2, wx.ID_ANY, u"日志输出", wx.DefaultPosition, wx.DefaultSize, 0 )
		self.m_log.Wrap( -1 )
		bSizer3.Add( self.m_log, 1, wx.ALL|wx.EXPAND, 5 )
		
		
		self.m_scrolledWindow2.SetSizer( bSizer3 )
		self.m_scrolledWindow2.Layout()
		bSizer3.Fit( self.m_scrolledWindow2 )
		bSizer2.Add( self.m_scrolledWindow2, 1, wx.EXPAND |wx.ALL, 5 )
		
		
		self.SetSizer( bSizer2 )
		self.Layout()
		
		self.Centre( wx.BOTH )
		
		self.m_button_start.Bind(wx.EVT_BUTTON, self.onStart)
		self.m_button_stop.Bind(wx.EVT_BUTTON, self.onStop)
		self.m_button_stop.Disable()
		self.log = u"日志输出窗口"
		self.adbpath = os.getcwd()+"\\adb.exe"
		#print self.adbpath
	def __del__( self ):
		pass
	def onStart(self,event):
		import thread
		thread.start_new_thread(self.record,())
		self.m_button_stop.Enable()
		self.m_button_start.Disable()


	def onStop(self,event):
		import subprocess
		self.p.terminate()
		self.log = self.log+u"已停止录制\n"
		self.m_log.SetLabel(self.log)
		import thread
		thread.start_new_thread(self.copy2PC,())
		self.m_button_stop.Disable()
		
	def copy2PC(self):
		import time
		import subprocess
		self.log = self.log + u"正在拷贝视频到PC\n"
		self.m_log.SetLabel(self.log)
		time.sleep(3)
		self.p = subprocess.Popen(self.adbpath+" pull /sdcard/"+self.filename+".mp4 "+os.getcwd()+"\\"+self.filename+".mp4", stderr=subprocess.PIPE, stdout=subprocess.PIPE)
		strout, strerr = self.p.communicate()
		if strerr.lower().find("kb/s") == -1:
			self.log = self.log + u"拷贝失败\n"
			self.m_log.SetLabel(self.log + strerr +"\n")
			self.m_button_start.Enable()
			return
		self.log = self.log + u"已拷贝到程序目录\n"
		self.m_log.SetLabel(self.log)
		self.log = self.log + u"开始转换为gif\n"
		self.m_log.SetLabel(self.log)
		###开始转换为gif
		myclip = VideoFileClip(os.getcwd()+"\\"+self.filename+".mp4")
		#print (myclip.fps) # prints for instance '30'
		myclip2 = myclip.subclip(0, int(myclip.end))
		myclip2.write_gif(os.getcwd()+"\\"+self.filename+".gif",fps=12) # the gif will have 12 fps
		self.log = self.log + u"gif转换完毕\n"
		self.m_log.SetLabel(self.log)
		self.m_button_start.Enable()
		
		
	def record(self):
		import subprocess
		import datetime
		now = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M')
		self.filename = u"Video_"+now
		
		cmd = self.adbpath+u" shell screenrecord --bit-rate 10000000 /sdcard/"+self.filename+".mp4"
		self.log = u"开始录制\n文件保存在手机//sdcard/"+self.filename+".mp4\n"
		
		self.m_log.SetLabel(self.log)
		self.p = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
		strout, strerr = self.p.communicate()
		if strerr != "":
			self.log = self.log + u"录制时出现错误:\n"+strerr
			self.m_log.SetLabel(self.log)
			self.m_button_start.Enable()
			self.m_button_stop.Disable()
			
		
		
#import gizeh
#import moviepy.editor as mpy




app = wx.App(False)
mylog = MyFrame1(None)
mylog.Show()
app.MainLoop()

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要通过Python和OpenCV快速拼接出完整的长截屏片,我们可以按照以下步骤进行: 首先,使用Python中的手机录屏工具(如Android Debug Bridge,简称ADB)来制手机屏幕的视频。首先需要在电脑上安装并配置好ADB工具。 其次,使用Python中的OpenCV库来读取制好的视频文件。可以使用OpenCV的VideoCapture函数来从视频文件中提取每一帧像。 然后,根据视频的帧数和分辨率,确定长截屏片的尺寸。也就是将所有的帧像按序拼接为一个完整的长截屏片。 接下来,创建一个空白的长截屏片,使用OpenCV的imwrite函数将第一帧像保存到长截屏片中。 对于其余的帧像,可以使用OpenCV的addWeighted函数将它们逐一拼接到长截屏片的尾部。根据移动设备的屏幕方向和滑动方向,可以选择水平或垂直拼接。 最后,保存生的长截屏片。 需要注意的是,在拼接过程中,可能会出现像大小不匹配的情况。可以使用OpenCV的resize函数来调整每个帧像的大小,使其与长截屏片的大小一致。 另外,在实际运行过程中,可能还需要根据手机制视频的帧率和帧间隔等参数来调整拼接速度和片质量。 综上所述,通过Python和OpenCV,我们可以实现快速拼接出完整的长截屏片。这样就可以方便地将手机屏幕内容保存为单个长,便于查看和分享。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值