想用 Python 录像?这可不是什么难事,想象一下,你辛辛苦苦写的代码,跑出一个炫酷的界面,多想录下来分享给小伙伴们,或者记录下程序的运行过程,方便日后debug。别担心,Python 早就为你准备好了“秘密武器”!

用 Python 录像,选择可不少呢,总有一款适合你。我个人比较推荐使用 mss 这个库,速度快,占用资源也少,简直是良心之选。 当然,pyautogui 结合 PIL 也能实现,但效率嘛,就见仁见智了。 还有一些其他的库,比如 cv2 (OpenCV),也能用来录像,不过配置起来稍微麻烦点。

先来说说 mss 吧,安装非常简单,一条命令搞定:

bash
pip install mss

安装好之后,就可以开始写代码了。录像的核心思路是:先截取屏幕,然后把每一帧图片保存下来,最后再把这些图片合成为视频。

“`python
import mss
import mss.tools
import cv2
import numpy as np
import time

录制时长,单位秒

RECORD_SECONDS = 5

输出视频的文件名

OUTPUT_FILE = “output.mp4”

def main():
with mss.mss() as sct:
# 获取屏幕信息
monitor = sct.monitors[1] # 0 是所有屏幕的合并, 1是你的主屏幕
width = monitor[“width”]
height = monitor[“height”]

    # 定义编码器和创建VideoWriter对象
    fourcc = cv2.VideoWriter_fourcc(*'mp4v') # 或者使用 'XVID'
    out = cv2.VideoWriter(OUTPUT_FILE, fourcc, 20.0, (width, height)) # 20.0 是帧率

    print(f"开始录制 {RECORD_SECONDS} 秒...")
    start_time = time.time()

    while (time.time() - start_time) < RECORD_SECONDS:
        # 抓取屏幕截图
        sct_img = sct.grab(monitor)
        img = np.array(sct_img)
        # 将BGR转换为RGB
        img = cv2.cvtColor(img, cv2.COLOR_RGBA2BGR) #考虑透明通道
        # 写入帧
        out.write(img)

        # 可以选择在这里显示视频,方便调试,但会降低录制速度
        # cv2.imshow('screen', img)
        # if (cv2.waitKey(1) & 0xFF) == ord('q'):
        #     break
    else:
        print("录制完成!")

    # 释放资源
    out.release()
    # cv2.destroyAllWindows()  # 如果你用了 cv2.imshow,才需要这行

if name == “main“:
main()
“`

这段代码的关键在于 mss.mss()sct.grab(monitor),前者创建了一个屏幕截图对象,后者负责抓取屏幕指定区域的截图。 monitor 变量定义了你要录制的屏幕区域,sct.monitors 包含了所有屏幕的信息,索引 0 代表所有屏幕的合并,1 通常是你的主屏幕。 当然,如果你的电脑有多个显示器,你可以根据实际情况修改索引。

然后,我们用 cv2.VideoWriter 创建一个视频写入对象,指定输出文件名、编码器、帧率和视频尺寸。编码器 fourcc 这里我使用了 mp4v,你也可以尝试 XVID 等其他编码器,选择哪个取决于你的需求和电脑支持情况。 帧率 20.0 表示每秒 20 帧,你可以根据需要调整。

while 循环里,我们不断地抓取屏幕截图,然后用 out.write(img) 写入视频文件。 循环会持续 RECORD_SECONDS 秒,录制完毕后,释放资源。

这只是一个最简单的例子,你可以根据自己的需求进行扩展。 比如,你可以添加一个图形界面,让用户可以选择录制区域、设置帧率、自定义输出文件名等等。 也可以加入声音录制,让你的视频更加生动。

再说一下 pyautogui 结合 PIL 的方案,这种方式相对来说慢一些,因为 pyautogui 是通过模拟鼠标和键盘操作来实现屏幕截图的,而 PIL 负责图像处理。

“`python
import pyautogui
from PIL import Image
import cv2
import numpy as np
import time

录制时长,单位秒

RECORD_SECONDS = 5

输出视频的文件名

OUTPUT_FILE = “output_pyautogui.mp4”

def main():
# 获取屏幕尺寸
width, height = pyautogui.size()

# 定义编码器和创建VideoWriter对象
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(OUTPUT_FILE, fourcc, 20.0, (width, height))

print(f"开始录制 {RECORD_SECONDS} 秒...")
start_time = time.time()

while (time.time() - start_time) < RECORD_SECONDS:
    # 抓取屏幕截图
    img = pyautogui.screenshot()
    frame = np.array(img)

    # 将RGB转换为BGR
    frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)

    # 写入帧
    out.write(frame)

else:
    print("录制完成!")

# 释放资源
out.release()
cv2.destroyAllWindows()

if name == “main“:
main()
“`

这段代码和 mss 的版本很相似,主要的区别在于屏幕截图的方式。 pyautogui.screenshot() 函数会截取整个屏幕的截图,然后我们用 PIL.Image 对象将其转换为 numpy 数组。

最后,再简单提一下 cv2 (OpenCV) 直接录制屏幕的方式。 这种方式需要安装 OpenCV,配置起来稍微复杂一些,但是功能非常强大,可以进行各种图像处理和视频编辑。

总的来说,用 Python 录像 并不难,关键在于选择合适的库和掌握基本的代码逻辑。 mss 速度快,资源占用少,适合录制简单的屏幕操作; pyautogui 结合 PIL 比较灵活,可以模拟鼠标和键盘操作; cv2 (OpenCV) 功能强大,适合进行复杂的图像处理和视频编辑。 你可以根据自己的需求选择合适的方案。

别忘了,录制视频的时候,要确保你的电脑性能足够,否则可能会出现卡顿或者掉帧的情况。 另外,录制完毕后,最好检查一下视频的质量,看看是否符合你的预期。

希望这篇指南能够帮助你掌握 Python 录像的技巧,记录下屏幕上的精彩瞬间!现在,就动手试试吧,相信你一定会爱上这种便捷的方式!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。