【技巧】影刀录屏功能拓展:轻松录屏各种自定义场景
评论
收藏

【技巧】影刀录屏功能拓展:轻松录屏各种自定义场景

经验分享
晴天
2024-08-29 21:57·浏览量:2310
晴天
发布于 2024-08-29 13:25更新于 2024-08-29 21:572310浏览

一、需求说明

最近有小伙伴反馈,影刀的录屏功能限制有点多,当前影刀支持的录屏场景只有“每次运行”“运行失败”这两种录屏场景。


当前的这两种场景的局限性还是比较多的,比如很多个性化的录屏需求就无法实现。

① “应用开发状态下的调试运行“没办法录屏

② 个性化录屏不支持,比如try……catch组合中,只录屏catch里面的指令操作

③ 只录取某个子流程的录屏操作、或者只要第8行到100行之间指令的操作录屏

……


二、实现方法

针对小伙伴们个性化的录屏场景需求,可以通过ffmpeg-python这个库来实现自定义录屏的功能。

跟AI讨教了方法,测试几遍,调整了会出错的代码后,就可以使用下面的代码来封装自定义指令拉。


三、相关代码与效果

用于封装自定义指令的代码如下:

import ffmpeg
import os
import signal
import subprocess
import threading

# 全局变量用于存储录屏进程的pid
recording_pid = None

def start_recording(output_path="output.mp4"):
    """
    开始录屏,默认保存为mp4格式。

    Args:
        output_path (str, optional): 视频保存路径. Defaults to "output.mp4".
    """

    global recording_pid

    if recording_pid is not None:
        print("已经在录屏了!")
        return

    command = [
        'ffmpeg',
        '-f', 'gdigrab',
        '-framerate', '30',
        '-i', 'desktop',
        '-vcodec', 'libx264',
        '-preset', 'veryfast',
        '-crf', '25',
        output_path
    ]

    process = subprocess.Popen(command, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP)
    recording_pid = process.pid
    print("开始录屏...")
    print(f"recording_pid: {recording_pid}")

def stop_recording():
    """
    结束录屏。
    """

    global recording_pid

    if recording_pid is not None:
        os.kill(recording_pid, signal.CTRL_BREAK_EVENT)
        recording_pid = None
        print("录屏已结束")
    else:
        print("没有正在录制的视频")


通过“开始录屏”和“结束录屏”两条指令,就可以灵活录屏各种自定义场景拉!

备注:自定义录屏指令不建议和影刀的默认录屏功能同时开启哈,不然会导致资源过度占用,影响自动化流程哦。

收藏5
全部评论1
最新
发布评论
评论