-
2021-02-10 08:38:13
前段时间做视频时需要演示电脑端的操作,因此要用到屏幕录制,下载了个迅捷屏幕录制,但是没有vip录制的视频有水印且只能录制二分钟,于是鄙人想了下能不能通过万能的python来实现呢?经过一晚上的尝试发现这条路是可以走的通的。分享一下自己的想法,整体思路是PIL模块中的ImageGrab不停的获得当前屏幕,利用opencv写入视频流话不多说,直接上代码,有什么更好的建议,欢迎大家交流!
"""python + opencv 实现屏幕录制_by-_Zjh_"""
from PIL import ImageGrab
import numpy as np
import cv2
p = ImageGrab.grab()#获得当前屏幕
k=np.zeros((200,200),np.uint8)
a,b=p.size#获得当前屏幕的大小
fourcc = cv2.VideoWriter_fourcc(*'XVID')#编码格式
video = cv2.VideoWriter('test.avi', fourcc, 16, (a, b))#输出文件命名为test.mp4,帧率为16,可以自己设置
while True:
im = ImageGrab.grab()
imm=cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)#转为opencv的BGR格式
video.write(imm)
cv2.imshow('imm', k)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
video.release()
cv2.destroyAllWindows()
在停止录制的时候我自己采用的是opencv的q键盘退出,实际上还是会有个黑框弹出来,如果有更好的退出录制方式请留下您的建议,本次还有个不足的地方是没有增加录制声音的功能。最近事情太多了,等放假了出一个完整版的GUI程序。好了今天就先到这了,快要考线性系统这门课了,得开始复习了
最近接触了 pynput 这个强大的三方库,可以全局监听键盘、鼠标事件。把以前的屏幕录制的程序改进一下!请忽略以前的程序,直接看这个!
"""
python 屏幕录制改进版,无opencv黑框显示!
@zhou 2020/1/29_
"""
from PIL import ImageGrab
import numpy as np
import cv2
import datetime
from pynput import keyboard
import threading
flag=False #停止标志位
def video_record():
"""
屏幕录制!
:return:
"""
name = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S') #当前的时间
p = ImageGrab.grab() # 获得当前屏幕
a, b = p.size # 获得当前屏幕的大小
fourcc = cv2.VideoWriter_fourcc(*'XVID') # 编码格式
video = cv2.VideoWriter('%s.avi'%name, fourcc, 20, (a, b)) # 输出文件命名为test.mp4,帧率为16,可以自己设置
while True:
im = ImageGrab.grab()
imm=cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)#转为opencv的BGR格式
video.write(imm)
if flag:
print("录制结束!")
break
video.release()
def on_press(key):
"""
键盘监听事件!!!
:param key:
:return:
"""
#print(key)
global flag
if key == keyboard.Key.esc:
flag=True
print("stop monitor!")
return False #返回False,键盘监听结束!
if __name__=='__main__':
th=threading.Thread(target=video_record)
th.start()
with keyboard.Listener(on_press=on_press) as listener:
listener.join()
现在录制就不用之前那个黑框了,按 esc按键 直接停止录制!
PS:在通过代码给大家介绍下python 实现屏幕录制
PIL 即pollow 的安装命令如下:
pip install pillow
其中cv2的安装是下面这条命令
pip install opencv-python
代码实现:
# coding: utf-8
from PIL import ImageGrab
import numpy as np
import cv2
fps = 20
start = 3 # 延时录制
end = 15 # 自动结束时间
curScreen = ImageGrab.grab() # 获取屏幕对象
height, width = curScreen.size
video = cv2.VideoWriter('video02.avi', cv2.VideoWriter_fourcc(*'XVID'), fps, (height, width))
imageNum = 0
while True:
imageNum += 1
captureImage = ImageGrab.grab() # 抓取屏幕
frame = cv2.cvtColor(np.array(captureImage), cv2.COLOR_RGB2BGR)
# 显示无图像的窗口
cv2.imshow('capturing', np.zeros((1, 255), np.uint8))
# 控制窗口显示位置,方便通过按键方式退出
cv2.moveWindow('capturing', height - 100, width - 100)
if imageNum > fps * start:
video.write(frame)
# 退出条件
if cv2.waitKey(50) == ord('q') or imageNum > fps * end:
break
video.release()
cv2.destroyAllWindows()
更多相关内容 -
屏幕录制生成文件最小1分钟0.5兆
2014-08-20 18:26:39屏幕录制生成文件最小1分钟0.5兆,屏幕录制 超小尺寸 Camtasia -
实时捕捉你桌面的屏幕录制软件 ALLCapture 3.0.zip
2021-04-21 15:31:42实时捕捉你桌面的屏幕录制软件 ALLCapture 中文版 实时捕捉你桌面的屏幕录制软件 ALLCapture 中文版 屏幕录制软件(ALLCapture 3.0 中文版)的特色 轻松快速地录制 只需点击即可开始结束屏幕录制 对录制窗口进行... -
Mac屏幕录制与视频压缩
2022-06-17 09:07:19Mac实现屏幕录制和录制视频的压缩Mac屏幕录制与视频压缩
Mac自带的屏幕录制能够满足大部分的录屏需求,但生成的视频文件往往较大,因此有必要压缩视频以节省存储空间。
屏幕录制
Mac自带的屏幕录制可以使用
command + shift + 5
呼出,简单设置后即可录屏。如果需要录制系统声音,可以通过
brew install soundflower
安装soundflower。在完成安装后打开系统自带的音频MIDI设置,分别创建一个聚集设备和一个多输出设备,配置如下图。如果既想录制系统声音也想录制麦克风声音,需要在聚集设备中勾选"MacBook Pro 麦克风",否则按下图配置仅录制系统内的声音。
在配置完音频MIDI设置后,需要在系统偏好设置->声音中的输出选择多输出设备,输入选择聚集设备。至此,可以使用Mac自带的屏幕录制来录制系统声音,在录制结束后记得把声音的输入输出设备调回原来的设备,否则无法调节音量。
视频压缩
视频压缩需要做到保持原分辨率的前提下尽量减小文件体积,这里使用
ffmpeg
将文件编码为H264标准,可以大幅减小屏幕录制生成的mov
文件的体积。ffmpeg -i 输入文件 -vcodec libx264 -acodec aac 输出文件
执行上述命令后等待转换完成即可。
如果想要简化该操作,可在
.zshrc
中添加下列代码。function h264(){ ffmpeg -i $1 -vcodec libx264 -acodec aac $2 }
在重启终端后使用
h264 输入文件 输出文件
即可开始转换。注:输入文件一般为后缀为
.mov
,以实际需要转换的文件为准,输出文件后缀为.mp4
。输入输出文件需要输入完整的文件路径和文件名。 -
屏幕录制专家
2018-10-26 13:08:45在VISTA/WIN7下运行本软件时,屏幕配色方案会自动暂时更改为Windows7 Basic,软件关闭时会自动恢复原来设置,这是为了减小录像的大小,不是软件兼容性问题,请不用担心。有些特殊情况确实不希望改变屏幕配色方案的,可以在... -
GifCam(屏幕录制gif)最新版6.5
2021-08-11 21:22:50可以设置FPS帧率,支持全屏幕录制及录制光标。录制后可以保存为GIF文件。可以保存为256色、20色、灰度及单色。除了录制GIF外,还可编辑录制后的GIF文件,可以达到你想要的效果,软件小巧,录制后的GIF动画体积也很小... -
屏幕 Gif 录制工具 LICEcap 1.28 绿色.zip
2021-04-21 13:12:23LICEcap 是一款简洁易用的动画屏幕录制软件。 LICEcap 捕捉屏幕的区域并保存为gif动画(便于网络发布)或lcf格式(见下)。 LICEcap 直观易用,功能灵活,支持 Windows 和 OSX。其设计思想是轻量级、适当功能、高... -
Wyler:在iOS上轻松进行屏幕录制
2021-05-24 13:37:14欢迎使用Wyler-用Swift编写的轻量级库,可简化IOS屏幕录制的过程。 您可以录制应用程序视频屏幕,访问录制的视频,然后将其保存到照片库。特征 应用程序屏幕录像 设定影片大小 观看视频 将视频保存到照片库要求iOS ... -
屏幕录制转gif
2018-04-14 14:13:03直接下载后即可使用,无需安装。自由调节录制框大小,帧数,自由删减帧。小巧轻便,含快捷键。方便制作DIY型gif -
GifCam2.0(屏幕录制gif)汉化版.rar
2019-09-02 22:35:22可以设置FPS帧率,支持全屏幕录制及录制光标。录制后可以保存为GIF文件。可以保存为256色、20色、灰度及单色。除了录制GIF外,还可编辑录制后的GIF文件,可以达到你想要的效果,软件小巧,录制后的GIF动画体积也很小... -
Aiseesoft Screen Recorder v2.5.6 屏幕捕捉软件能够帮助您录制在线播放的音频或者视频
2022-07-13 10:19:11可供选择的全屏幕录制和自定义录制区域大小,突出显示光标移动路径,使您的操作更容易跟踪,方便视频教程的录制。采用先进的实时高清视频编码技术,确保录制的音频和视频的质量,Aiseesoft屏幕录像机获取最简单但... -
屏幕录制,视频,多图片转Gif,支持插入文字、图片、水印、手绘等,编辑过程中可随时预览效果快速生成gif...
2018-11-20 10:08:59屏幕录制,可调节录制帧数、窗口大小, 使用窗口捕捉器快速获取窗口进行录制。 编辑界面清晰,操作便捷 录屏、视频、多图快速制作,操作界面一目了然, 可快速预览成像,高质量导出gif -
javacv实现屏幕录制(一)
2021-12-29 11:39:23javacv实现屏幕录制(一) javacv从入门到入土系列,发现了个好玩的东西,视频处理,于是我想搞个屏幕录屏,我百度了一下,copy那些代码我没有实现过,那些代码也没有说明,只好去官网看文档找资料了看wiki和example...javacv实现屏幕录制(一)
javacv从入门到入土系列,发现了个好玩的东西,视频处理,于是我想搞个屏幕录屏,我百度了一下,copy那些代码我没有实现过,那些代码也没有说明,只好去官网看文档找资料了看wiki和example了emm,,,
这里我使用javafx进行页面显示。思路,用FFmpegFrameGrabber创建屏幕录制采集,将采集到的帧数据追加到FrameGrabber,用FrameGrabber做视频输出。。。按照这个思路,你也能把数据采集改成摄像头采集。
依赖
<!-- 需要注意,javacv主要是一组API为主,还需要加入对应的实现 --> <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv</artifactId> <version>1.5.6</version> </dependency> <!-- 用到了 ffmpeg 需要把 ffmpeg 的平台实现依赖引入 --> <dependency> <groupId>org.bytedeco</groupId> <artifactId>ffmpeg-platform</artifactId> <version>4.4-1.5.6</version> </dependency> <!--所有平台实现,依赖非常大,几百MB吧--> <!--<dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv-platform</artifactId> <version>1.5.6</version> </dependency>-->
demo
package top.lingkang.livedemo.test; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.VBox; import javafx.stage.Stage; import javafx.stage.WindowEvent; import org.bytedeco.ffmpeg.global.avcodec; import org.bytedeco.javacv.*; import java.util.Timer; import java.util.TimerTask; /** * @author lingkang * @date 2021/12/28 */ public class DesktopRecording extends Application { private static final int frameRate = 10;// 录制的帧率 private static boolean isStop = false; @Override public void start(Stage primaryStage) throws Exception { primaryStage.setTitle("lingkang-桌面录屏emm..."); ImageView imageVideo = new ImageView(); imageVideo.setFitWidth(800); imageVideo.setFitHeight(600); Button button = new Button("停止录制"); button.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { isStop = true; Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("info"); alert.setHeaderText("已经停止录制"); alert.setOnCloseRequest(event1 -> alert.hide()); alert.showAndWait(); } }); VBox box = new VBox(); box.getChildren().addAll(button, imageVideo); primaryStage.setScene(new Scene(box)); primaryStage.setHeight(600); primaryStage.setWidth(800); primaryStage.show(); // window 建议使用 FFmpegFrameGrabber("desktop") 进行屏幕捕捉 FrameGrabber grabber = new FFmpegFrameGrabber("desktop"); grabber.setFormat("gdigrab"); grabber.setFrameRate(frameRate); // 捕获指定区域,不设置则为全屏 grabber.setImageHeight(600); grabber.setImageWidth(800); //grabber.setOption("offset_x", "200"); grabber.setOption("offset_y", "200");//必须设置了大小才能指定区域起点,参数可参考 FFmpeg 入参 grabber.start(); // 用于存储视频 , 先调用stop,在释放,就会在指定位置输出文件,,这里我保存到D盘 FrameRecorder recorder = FrameRecorder.createDefault("D://output.avi", grabber.getImageWidth(), grabber.getImageHeight()); recorder.setFrameRate(frameRate); recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);// 编码,使用编码能让视频占用内存更小,根据实际自行选择 recorder.start(); Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { if (isStop) { try { // 停止 recorder.stop(); grabber.stop(); // 释放 recorder.release(); grabber.release(); } catch (Exception e) { e.printStackTrace(); } timer.cancel(); return; } try { // 获取屏幕捕捉的一帧 Frame frame = grabber.grabFrame(); // 将这帧放到录制 recorder.record(frame); Image convert = new JavaFXFrameConverter().convert(frame); // 更新UI imageVideo.setImage(convert); } catch (Exception e) { e.printStackTrace(); } } }, 2000, 1000 / frameRate); primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() { @Override public void handle(WindowEvent event) { isStop = true; } }); } public static void main(String[] args) throws Exception { launch(args); } }
-
SCREEN2EXE.EXE 屏幕录制软件
2013-11-08 10:03:56在生成录制文件的大小与质量之间有四个档次,慢速:每秒一帧;正常:美妙两帧;快速:每秒四帧;最快,尽可能快,至于到底有多快取决于你的电脑性能,以上四个档次中用户还可以选择是否记录麦克风语音。当然,如果你... -
强大的录制文件 Gif.7z
2021-04-29 12:45:37因为写博客或工作等原因,经常需要录制屏幕并制作gif图。ScreenToGif使用了小半年了,给我的感觉就是“小而实用”,大小仅2M多(压缩后才几百K),但却包含了录制及常用的gif处理功能。 ScreenToGif作为一款小软件具很多... -
如何使用Filmage Screen降低视频文件大小?
2021-06-11 15:29:43影响视频大小的主要因素是... 因此,请尝试以较低的屏幕分辨率进行录制,以获取较小的视频大小。 2.录制之前,请选择较低的帧率(fps)。 导出时,较高的帧率通常会让文件变大。Filmage Screen录屏使您可以选择15到影响视频大小的主要因素是比特率,分辨率和帧率(fps)。通常,比特率越高,整体质量越好,这也导致视频文件更大。那我们如何使用Filmage Screen降低视频文件的大小呢?小编给大家带来了详细的图文教程,需要的朋友快来看看吧!
具体操作方法如下
1.录制之前,选择较低的分辨率。 录制的屏幕分辨率越高,文件越大。 因此,请尝试以较低的屏幕分辨率进行录制,以获取较小的视频大小。
2.录制之前,请选择较低的帧率(fps)。 导出时,较高的帧率通常会让文件变大。Filmage Screen录屏使您可以选择15到60的fps值。
3.录制完成后,压缩视频。 Filmage Screen录屏使您可以在录制后压缩视频。 您可以以中等质量或较低质量压缩录制的文件,以减小视频大小。
4.降低录制视频的比特率。 如果以更高的比特率录制视频,则视频质量会更高,文件大小也会更大。 录制后,请单击另存为并选择其他。
然后点击编辑,选择更低的比特率、FPS和大小。
以上就是使用Filmage Screen降低视频文件大小的方法,需要的朋友欢迎参考!想了解更多关于Mac相关教程,请关注macz.com吧!
-
用Python来做一个屏幕录制工具
2021-11-21 01:17:23def video_record(sttime): global name # 当前的时间(当文件名) name = datetime.now().strftime('%Y-%m-%d %H-%M-%S') # 获取当前屏幕 screen = ImageGrab.grab() # 获取当前屏幕的大小 width, high... -
FFmpeg —— 8.示例程序(二):屏幕录制并保存为YUV、H264格式文件
2020-04-14 15:07:57屏幕录制的命令行形式可以参考以下链接 https://blog.csdn.net/leixiaohua1020/article/details/38284961 我们所做的示例程序,说白了,就是通过API程序代码来实现命令行的操作指令。 命令行形式 设备列表 ... -
使用Pyqt5制作屏幕录制界面
2022-04-21 23:32:28使用Pyqt5制作屏幕录制界面应用平台窗口设置主体窗口代码划选窗口代码总结 最近有在使用屏幕录制软件录制桌面,在用的过程中突发奇想,使用python能不能做屏幕录制工具,也锻炼下自己的动手能力。 接下准备写使用... -
qve屏幕录制会员版 v2.1.4去水印版
2021-01-15 17:11:51qve屏幕录制是一款非常好用的电脑录屏软件,通过这款软件用户可以非常轻松的实现电脑屏幕的录制,同时它的功能非常强大,它不仅支持区域录制、全屏录制、程序窗口录制等多种方式录制,甚至还支持摄像头录制,以及... -
图像编辑、屏幕录制——FastStoneCapture(详解)
2021-05-01 12:16:30FSCapture是最经典好用的屏幕截图软件,还具有图像编辑和屏幕录制两大功能,最新9.4版本大小仅有5m左右,小巧玲珑 官网:FastStoneCapture 官方下载地址:FastStone Capture9.4 笔记下载 链接:... -
c#屏幕录制(经典)(含源码和AForge.Video.FFMPEG.DLL)及填坑办法
2022-01-05 01:30:42} } /// /// 屏幕录制工具类 /// public class ScreenRecorderTool { #region Fields private int screenWidth; private int screenHight; private int bitRate = (int)BitRate._500kbit; private int frameRate = ... -
opencv实现屏幕录制代码解析
2018-11-18 22:49:25# -*- coding: utf-8 -*- """ Created on Thu Nov 15 22:37:02 2018 #QQ群:476842922(欢迎...python + opencv 实现屏幕录制""" from PIL import ImageGrab import numpy as np import -
电脑GIF录制工具中文(478KB)
2020-04-26 15:06:211、在录制的过程中,你可以随意的改变窗口大小、位置。不过在改变过程中软件是会暂停录制的,待你释放窗口后才会继续。 2、如果录制范围内内容无变化,则不增加新帧而只是增加延时,这样可以有效减小文件尺寸 3、... -
C语言中如何录制屏幕
2021-05-21 07:37:52屏幕录制专家比较好用,在工作中,给予的帮助很大。把使用的一些经验分享给大家。软件界面如下:F2键表示开始和结束,方便录制视频时不用界面处理,生成的格式支持很多,exe格式的特点是录制的文件拿到别的电脑... -
window10 几款好用的屏幕录制制作动图工具
2021-07-15 11:46:16有时候静态图片不能够展示交互效果,需要录制一下视频,所以就去网上找了几个好用的屏幕录制软件。 一 、GifCam GifCam录制视频很方便,打开软件,将窗口拖动到需要录制的地方,点击 Rec 就可以开始录制: 在录制的... -
通过MediaRecorder 录制视频的时候,魅族手机录制视频后,大小显示0
2019-05-24 14:11:25解决方法:在设置Camera参数的时候,针对魅族手机做特殊处理: List<Camera.Size> pictureSizes = filterSizes(parameters.getSupportedPictureSizes(), width, height); List<Camera.Size> ... -
屏幕录制专家软件绿色版
2010-07-01 23:18:5614.自由设置EXE录制播放时各种参数,比如位置、大小、背景色、控制窗体、时间等。 15.支持合成多节EXE录像。录像分段录制好后再合成多节EXE,播放时可以按循序播放,也可以自主播放某一节。 16.后期编辑功能,支持... -
Java结合FFmpeg实现屏幕录制程序
2021-02-12 10:49:54它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。FFmpeg在Linux平台下开发,但它同样也... -
【Android工具】手机屏幕录制并转换成GIF
2015-12-03 15:18:26Android手机屏幕录制并使用 Free Video to GIF Converter把mp4转换成GIF