Ubuntu/Linux屏幕录制程序(Python)

Apr 28,2018   2111 words   8 min

Tags: Linux

[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是截取当前活动窗口。

本文作者原创,未经许可不得转载,谢谢配合

返回顶部