[2021-09-30更新]
最近发现了个可以直接录制视频和截屏的软件,叫Kazam,试了一下感觉很方便。可以直接通过apt-get install kazam
就可以安装了。
[更新结束]
Ubuntu屏幕录制Gif
在Windows下有很方便的GifCam、ScreenToGif等可以录制GIF,Bandicam等可以录制视频,但是在Ubuntu下就没有那么方便了。在网上找了一下,发现一个叫byzanz
的包可以录制,再配合xwininfo
包获取指定窗口坐标,即可实现指定区域的屏幕录制功能。但整个都是命令行操作的,而且用到两个不同的包,有些繁琐,不方便使用。所以就对它们简单进行了下包装,用Python整合了流程,方便使用。这样需要录制的时候直接运行这个脚本即可。当然前提是系统首先要安装这两个包了,否则没法使用。直接使用apt-get
安装就可以。xwininfo
包应该是系统自带的,byzanz
需要apt安装一下。
顺带说一下,在Ubuntu下想录制屏幕视频可以使用ffmpeg
包来实现,这里是它的官网,里面介绍了使用方法。其实也非常简单,只要输入如下命令即可:
ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+0,0 output.mp4
代码放在了Github上,地址是这里。由于代码不是很多,在博客里也贴一下,Python源码如下。
# coding=utf-8
import commands
import sys
# 输出帮助信息
if sys.argv.__len__() == 2 and sys.argv[1] == "help":
print("This script is for recording screen on Linux.")
print("It depends on 'byzanz' and 'xwininfo' package.")
print("If you don't have them, you can use 'apt-get install' command to install them.")
else:
# 执行命令获取捕获窗口坐标
print("Please click on the window you want to record.")
res = commands.getoutput('xwininfo')
# 获取坐标
num = [int(s) for s in res.split() if s.isdigit()]
pos_x = num[0]
pos_y = num[1]
width = num[4]
height = num[5]
# 指定录制时长
duration = raw_input("Input record duration(press 'Enter' choose 5 sec as default):\n")
if duration == "":
duration = 5
# 指定保存路径和文件名
save_path = raw_input("Input save gif name(press 'Enter' choose 'record.gif' as default):\n")
if save_path == "":
save_path = "record.gif"
else:
if not save_path.endswith("gif") or save_path.endswith("GIF"):
save_path = save_path + ".gif"
# 输出录制信息以确认
print("Record Infomation:")
print("Top-left x:" + pos_x.__str__() + " , " + "Top-left y:" + pos_y.__str__())
print("Window width:" + width.__str__() + " " + "Window height:" + height.__str__())
print("Duration:" + duration.__str__())
print("Save path:" + save_path.__str__() + "\n")
# 开始录制
flag = raw_input("---Press 'Enter' to start,'q' to exit---")
if flag == "":
print("Recording...")
com = "byzanz-record" + " -d " + duration.__str__() + " -x " + pos_x.__str__() + " -y " + pos_y.__str__() + " -w " + width.__str__() + " -h " + height.__str__() + " " + save_path.__str__()
commands.getoutput(com)
print("Finish")
elif flag == 'q' or 'Q':
exit()
代码执行效果如下。
代码整体也比较简单,通过用户指定的信息拼接字符串,然后利用python提供的接口执行拼接的命令。关于Python执行命令的相关比较和总结可以看这篇博客。
顺便一提,在Ubuntu中系统自带的截屏快捷键是Shift
+PrintScreen
,这是截取制定区域。Alt
+PrintScreen
是截取当前活动窗口。
本文作者原创,未经许可不得转载,谢谢配合