当前位置: 首页 > news >正文

【AI飞】AutoIT入门七(实战):python操控autoit解决csf视频批量转换(有点难,AI都不会)

 背景:

终极目标:通过python调用大模型,获得结果,然后根据返回信息,控制AutoIT操作电脑软件,执行具体工作。让AI更具有执行力。

已完成部分:

 关于python调用大模型的,可以参考之前的文章:

AI入门7:python三种API方式调用本地Ollama+DeepSeek_deepseek大模型下载到本地后,如何在python代码中调用-CSDN博客

AI入门8:通过vsCode用python访问公网deepseek-r1等模型(Tocken模式)-CSDN博客

AutoIT介绍,和如何安装及配置,以及运行了第一个hello程序,然后学习了基本工具的使用和基本语法,对桌面对象的操控,以及python控制autoit的基本理论,见前面文档:

【AI飞】AutoIT入门一:AutoIT来了,准备让AI动起来-CSDN博客

【AI飞】AutoIT入门二:Autolt v3 Window Info,和SciTE Script Editor的使用及鼠标操作-CSDN博客

【AI飞】AutoIT入门三:Autolt基本语法-CSDN博客

【AI飞】AutoIT入门四(重点):Autolt代替你操控计算机就快要实现了~-CSDN博客

【AI飞】AutoIT入门5(GUI-选学):autoit构建GUI,用得上吗-CSDN博客

【AI飞】AutoIT入门六(拐点):python操控autoit-CSDN博客

本文,继续python调用AutoIT之后,我实实在在的做了一个具体应用,过程曲折,特此总结记录。

本节目标

用AutoIT模拟手工操作,只有在没有其他程序可以替代,且需要重复操作执行,才有必要用AutoIT,我现在就有一堆CSF格式视频,需要转换成现在播放器能播放的。

CSF格式是之前大学课堂录制流行的格式,找了很久的批量转换方法,连AI都没有好的解决办法,尝试了半天,下载安装了ScenicEditor,其中带了个“CSF文件格式转换工具”,只能一个一个视频的转,所以才用python控制autoit批量执行操作。

 准备

需要安装autoit,入门第一篇中有,另外需要开发环境:Trae或者vscode,其安装配置可以参考之前的文档

【Ai工具】trae和传统编程环境vs+代码助手的PK,结果大捷_trae cn与通义灵码对比写代码-CSDN博客

还没安装python的朋友,可以参考之前的文档,Trae就是仿照vsCode,操作不能说一模一样,简直没有差别:

【菜鸟飞】用vsCode搭建python运行环境_code运行python环境-CSDN博客

 第一个python操控autoit的程序见:

【AI飞】AutoIT入门六(拐点):python操控autoit-CSDN博客

开始

直接展示一下成功的结果代码,和实现逻辑,再说其中的“坑”在哪里。

实现业务逻辑

转换一个文件的过程是这样:

运行“CSF文件格式转换工具”,初始界面如下:

进行一次转换,需要进行如下设置:

选择“源文件路径”,就是要转换的文件,选择之后,主界面的下拉框才有相关选项,

然后,是按照上图设置配置项,特别是目标屏幕文件,得修改默认值为当前设置,然后,点击“配置”按钮,进行配置屏幕流量和屏幕帧率。

程序逻辑

轮询源文件夹,把每一个文件,按上面的过程,处理一遍。

调试好的程序

代码如下

import os
import autoit
import time# CSF文件格式转换工具路径
csf2wmv_exe_path = r"E:\Program Files (x86)\ScenicEditor\csf2wmv.exe"
# 源文件路径
source_folder = r"E:\教程\"def is_csf2wmv_running():"""检查 csf2wmv 程序是否已经在运行"""return autoit.win_exists("[TITLE:CSF文件转换工具]")def setup_conversion_tool(csf_file_path, target_folder):"""设置转换工具的参数"""# 如果程序未运行,则启动程序if not is_csf2wmv_running():autoit.run(csf2wmv_exe_path)# 等待主窗口出现if not autoit.win_wait("[TITLE:CSF文件转换工具]", 10):print("错误: CSF文件转换工具窗口未在10秒内出现")return False# 点击“...”按钮选择源文件路径autoit.control_click("[TITLE:CSF文件转换工具]", "Button2")  # 点击“...”按钮# 等待文件选择对话框出现if not autoit.win_wait("[CLASS:#32770; TITLE:打开]", 5):print("错误: 文件选择对话框未在5秒内出现")return Falsetime.sleep(1)# 在文件选择对话框中选择文件autoit.control_set_text("[CLASS:#32770; TITLE:打开]", "Edit1", csf_file_path)# 等待文件选择完成time.sleep(1)#autoit.control_focus("[CLASS:#32770; TITLE:打开]", "Button1")  # 确保焦点在“打开”按钮上autoit.control_click("[CLASS:#32770; TITLE:打开]", "Button2")  # 点击“打开”按钮# 等待文件选择完成time.sleep(1)# 设置目标文件夹autoit.control_focus("[TITLE:CSF文件转换工具]", "Edit2")autoit.control_set_text("[TITLE:CSF文件转换工具]", "Edit2", target_folder)time.sleep(2)#autoit.mouse_move(808,202)#time.sleep(1)autoit.mouse_click("left", 908,302, 1, 0)time.sleep(1)autoit.mouse_click("left", 908,337, 1, 0)time.sleep(3)      # 设置其他选项(根据需要调整)# 目标视音频2文件 try:autoit.control_focus("[TITLE:CSF文件转换工具]", "ComboBox5")  # 选择屏幕流autoit.control_send("[TITLE:CSF文件转换工具]", "ComboBox5", "不转换音频")time.sleep(3)        autoit.control_focus("[TITLE:CSF文件转换工具]", "ComboBox6")  # 选择音频流autoit.control_send("[TITLE:CSF文件转换工具]", "ComboBox6", "不转换视频")except Exception as e:"print(csf_file_path)"try:# 目标视音频1文件  autoit.control_focus("[TITLE:CSF文件转换工具]", "ComboBox2")  # 选择视频流autoit.control_send("[TITLE:CSF文件转换工具]", "ComboBox2", "不转换视频")    time.sleep(3)   autoit.control_focus("[TITLE:CSF文件转换工具]", "ComboBox1")  # 选择视频流autoit.control_send("[TITLE:CSF文件转换工具]", "ComboBox1", "不转换音频")    except Exception as e:"print(csf_file_path) "       # 目标屏幕文件 time.sleep(3)    autoit.control_focus("[TITLE:CSF文件转换工具]", "ComboBox3")  # 选择视频流autoit.control_send("[TITLE:CSF文件转换工具]", "ComboBox3", "Screen 01")time.sleep(3)        autoit.control_focus("[TITLE:CSF文件转换工具]", "ComboBox4")  # 选择音频流autoit.control_send("[TITLE:CSF文件转换工具]", "ComboBox4", "Audio 01")time.sleep(2)        # 新增:点击“配置”按钮autoit.control_click("[TITLE:CSF文件转换工具]", "Button9")  # 假设“配置”按钮的控制名为"Button3"time.sleep(1)# 在弹出的配置界面中设置参数if autoit.win_wait("[TITLE:屏幕配置]", 5):  # 等待配置界面出现# 设置屏幕属性autoit.control_focus("[TITLE:屏幕配置]", "Edit1")  # 屏幕流率time.sleep(1)autoit.control_set_text("[TITLE:屏幕配置]", "Edit1", "1200")time.sleep(2)autoit.control_focus("[TITLE:屏幕配置]", "Edit3")  # 屏幕帧率time.sleep(1)autoit.control_set_text("[TITLE:屏幕配置]", "Edit3", "25")time.sleep(1)# 点击“OK”按钮保存配置autoit.control_click("[TITLE:屏幕配置]", "Button1")  # 假设“OK”按钮的控制名为"Button1"time.sleep(1)return Truedef start_conversion():"""开始转换"""if not autoit.control_click("[TITLE:CSF文件转换工具]", "Button1"):print("错误: 无法点击'开始转换'按钮")return Falsereturn Truedef main():# 遍历文件夹中的 .csf 文件for filename in os.listdir(source_folder):if filename.endswith(".csf"):csf_file_path = os.path.join(source_folder, filename)target_folder = source_folder  # 假设与源文件在同一目录下if setup_conversion_tool(csf_file_path, target_folder):if start_conversion():print(f"成功启动转换文件: {filename}")# 等待转换完成(这里简单地等待一段时间,实际应根据具体情况进行调整)print(f"正在转换文件: {filename}")time.sleep(20)  # 根据实际情况调整等待时间print(f"成功转换文件: {filename}")else:print(f"失败启动转换文件: {filename}")else:print(f"失败设置转换工具参数: {filename}")# 转换完成后关闭程序(如果需要)if is_csf2wmv_running():#autoit.win_close("[TITLE:CSF文件转换工具]")print("所有文件转换完成,程序已关闭。")print("所有文件转换完成。")if __name__ == "__main__":main()

程序也不长,但是坑太多,AI都整不出来,最后还费了很多时间,连猜带蒙,才搞出来。

来,盘点一下遇到的哪些“坑”

控件定位坑

有图有真相:

一个button,对应了这个选择文件的区域,从AutoIt Window Info里,你根本看不出来,源文件选择的按钮是哪一个,AI给的程序,它写的是“Button1”,执行调试的时候,只是下面那个按钮被点开,我试着改了一下,结果是button2,对应代码:

坑不,工具定位不到区域里的对象,界面控件序号是无序的。。。

 不确定坑

同一个区域,有的控件能单独被工具捕捉定位,有的不能,特别是你需要定位的,它定位不了,这个下拉框的参数要改,结果你不知道它是老几。。。

这个也在上面区域里,它能被定位到: 

 我试了很久,不能相信它对控件还有歧视,扫雷似的,探查半天,没找到规律。。。

控件灵异坑

看下代码,其中,49、51行,是用鼠标点击操作,模拟了第一个选择视频流的下拉菜单操作,代码看着是重复的,但是去掉49、51行,下面的下拉菜单控件,程序就找不到,运行就报错,找不到对象,控件啥时候出现,怎么出现,这个未解之谜,至今没找到原因。

上面这几个坑,AI完全避不开,怎么问都问不出所以然。 

霸占系统坑 

程序执行 一起来,如果你碰了鼠标,或切换它用的窗口,它就找不到对象了,所以程序运行起来,你的电脑就被霸占了,只能看着它点来点去,别的啥也别想干了。。。

有用的经验

sleep的使用

代码里有很多Sleep,AI给的程序中,没加,执行的时候,不是控件找不到,就是数据设置不上,交互界面,不一定比人操作速度快,得等等程序。。。

界面对象探查

让AI写了一个桌面对象探查的程序,代码如下:

import autoit
import timedef get_window_info(title):"""获取指定窗口的信息"""if not autoit.win_exists(title):print(f"窗口 '{title}' 不存在")return None# 获取窗口类名列表class_list = autoit.win_get_class_list(title)class_name = class_list.split("|")[0] if class_list else None  # 取第一个类名window_info = {"title": autoit.win_get_title(title),"text": autoit.win_get_text(title),"class": class_name,"pos": autoit.win_get_pos(title),"handle": autoit.win_get_handle(title)}return window_infodef get_controls_info(title):"""获取指定窗口内所有控件的信息"""controls_info = []# 获取窗口句柄hwnd = autoit.win_get_handle(title)if not hwnd:print(f"无法获取窗口 '{title}' 的句柄")return controls_info# 遍历窗口内的所有控件control_id = 0while True:control = autoit.control_get_handle(title, "[ID:" + str(control_id) + "]")if not control:breakcontrol_info = {"id": control_id,"class": autoit.control_get_classname(title, "[ID:" + str(control_id) + "]"),"text": autoit.control_get_text(title, "[ID:" + str(control_id) + "]"),"pos": autoit.control_get_pos(title, "[ID:" + str(control_id) + "]")}controls_info.append(control_info)control_id += 1return controls_infodef main():# 窗口标题window_title = "CSF文件转换工具"# 获取窗口信息window_info = get_window_info(window_title)if window_info:print("-------窗口信息:----------")for key, value in window_info.items():print(f"  {key}: {value}")print("-------窗口信息:结束----------")# 获取控件信息controls_info = get_controls_info(window_title)if controls_info:print("\n======》控件信息:")for control in controls_info:print("  控件信息:")for key, value in control.items():print(f"    {key}: {value}")if __name__ == "__main__":# 确保 CSF文件转换工具 窗口已经打开print("请确保 'CSF文件转换工具' 窗口已经打开...")time.sleep(2)  # 等待2秒,确保窗口已经打开main()

窗口信息能探索出来,控件信息AI改了多次,探查不出来,窗口信息中,class参数收集了窗口控件的类型和文本信息,具有一定参考性:

我把输出的text和class信息,对应起来,和控件界面对照了一下:

可以参考着,调试代码:

看着有点用。

结尾:

千言万语,就一句话:AI的尽头,还是是人脑,嘿嘿😊😊😊。。。

另一句话,pyautoit的资料真的少,连中文API文档都没有,都没有。。。

相关文章:

【AI飞】AutoIT入门七(实战):python操控autoit解决csf视频批量转换(有点难,AI都不会)

背景: 终极目标:通过python调用大模型,获得结果,然后根据返回信息,控制AutoIT操作电脑软件,执行具体工作。让AI更具有执行力。 已完成部分: 关于python调用大模型的,可以参考之前的…...

Android守护进程——Vold (Volume Daemon)

简介 介绍:Vold 是用来管理 android 系统的存储设备,如U盘、SD卡、磁盘等移动设备的热插拔、挂载、卸载、格式化 框架结构:Vold 在系统中以守护进程存在,是一个单独的进程。处于Kernel和Framework之间,是两个层级连接…...

【实体转换】mapstruct详解

大家好,我是jstart千语。今天来给大家讲讲在项目中经常可以使用得到的一个“工具”,就是mapstruct。 一、工具介绍 这个工具有些类似于spring提供的BeanUtils.copyProperties()用于对象转化。而mapstruct是通过生成高效的、类型安全的映射代码来帮助开发…...

部署路线Ubuntu_MySQL_Django_绑定域名

第 1 步:绑定域名(DNS) 在域名服务商后台(例如阿里云 / 腾讯云 / Cloudflare)中设置: A 记录 →域名 → 指向服务器公网 IP 可选:也加一个 www.域名 → 同样指向服务器 第 2 步:安…...

大屏设计与汇报:政务服务可视化实践

大屏设计与汇报:政务服务可视化实践 引言 在政务服务数字化转型浪潮中,大屏设计成为展现业务能力与数据价值的关键手段。本文围绕政务大屏设计,从设计要点、业务逻辑到汇报技巧展开深入探讨,为相关从业者提供全面参考。 一、大屏设计核心要点 (一)多维度考量 设计大…...

【MySQL】数据库和表的操作详解

目录 一、数据库: 1、查看数据库: 2、创建数据库: 3、删除数据库: 4、数据库的编码问题: 5、校验规则对数据库的影响: 6、修改数据库: 7、库的备份与恢复: 8、查看链接情况…...

从PDF到播客:MIT开发的超越NotebookLM的工具

NotebookLM是谷歌推出的更具创意的AI产品之一,几个月前刚刚推出。 许多人对它的能力感到惊叹——尤其是将长文本转化为两位播客主持人之间有趣对话的功能。 NotebookLM提供的不仅仅是这些,还包括聊天(问答)甚至生成思维导图。 如果你还没有尝试过NotebookLM,我强烈建议…...

ubuntu系统上基于RKE2部署K8S及Rancher

由于我们特殊的网络环境,所以只能使用国内资源来进行安装 - Rancher Releases Mirrors:https://mirror.rancher.cn/ - 阿里云镜像仓库:registry.cn-hangzhou.aliyuncs.com 1、配置资源仓库及token rootdemo-1:~# mkdir -p /etc/rancher/r…...

STM32单片机入门学习——第40节: [11-5] 硬件SPI读写W25Q64

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.18 STM32开发板学习——第一节: [1-1]课程简介第40节: [11-5] 硬件SPI读…...

vue3学习笔记之属性绑定

属性绑定 1. 基本语法 在 Vue 3 里&#xff0c;使用 : 或者 v-bind: 来进行属性绑定。这两种写法是等价的&#xff0c;: 是 v-bind: 的缩写形式。以下是示例代码&#xff1a; <template><!-- 使用缩写形式 --><img :src"imageUrl" alt"An exa…...

C++ 面向对象关键语法详解:override、虚函数、转发调用和数组引用传参-策略模式

int A(参数...) override { return 某个对象.A(参数...);} 一.目标 本文将用一个简单的“数学运算器”例子&#xff0c;从零解释以下 C 语法特性&#xff1a; virtual 虚函数 override 重写关键字 函数体内部的“转发调用” 数组引用作为函数参数 适合初学者和希望加深…...

Spring_MVC 快速入门指南

Spring_MVC 快速入门指南 一、Spring_MVC 简介 1. 什么是 Spring_MVC&#xff1f; Spring_MVC 是 Spring 框架的一个模块&#xff0c;用于构建 Web 应用程序。它基于 MVC&#xff08;Model-View-Controller&#xff09;设计模式&#xff0c;将应用程序分为模型&#xff08;M…...

Starrocks 数据均衡DiskAndTabletLoadReBalancer的实现

背景 最近在研究了一下 Starrocks的tablet的Rebalance的能力&#xff0c;这里进行记录一下 本文基于 StarRocks 3.3.5 结论 数据的rebalance 主要以两种模式来进行&#xff1a; 按照磁盘的使用率进行移动&#xff0c;如果每个BE的磁盘使用率不足tablet_sched_balance_load_…...

设计模式之工厂方法模式

1. 核心思想 工厂方法模式&#xff08;Factory Method Pattern&#xff09;将对象的创建过程延迟到子类。具体来说&#xff0c;定义一个创建对象的接口&#xff08;抽象工厂&#xff09;&#xff0c;但由子类决定实例化哪个具体类。这种方式解耦了对象的创建和使用&#xff0c…...

ubuntu学习day3

3 编译与调试 3.1 gcc/g编译器 当我们进行编译的时候&#xff0c;要使用一系列的工具&#xff0c;我们称之为工具链。SDK就是编译工具链的简写&#xff0c;我们所使用的是gcc系列编译工具链。使用-v参数来查看gcc的版本&#xff0c;从而确定某些语法特性是否可用&#xff0c;…...

【从零实现高并发内存池】申请、释放内存过程联调测试 与 大于256KB内存申请全攻略

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

element-plus添加暗黑模式

main.ts文件 //引入暗黑模式样式 import "element-plus/theme-chalk/dark/css-vars.css"; style.scss文件 // 设置默认主题色 :root {--base-menu-min-width: 80px;--el-color-primary-light-5: green !important;--route--view--background-color: #fff !import…...

第八周作业

1、使用Sqlmap工具完成对DVWA数据库的注入过程&#xff0c;要求按照库、表、列、内容的顺序进行注入 使用kali自带的sqlmap工具进行 (1)爆破库名 sqlmap -u "http://10.0.0.5:8080/vulnerabilities/sqli/?id1&SubmitSubmit#" -p id --cookie "PHPSESSID…...

工作督导 | 具有边缘型人格障碍倾向的高危来访者,咨询师如何应对?

一个学校心理中心&#xff0c;可能同时有几十位乃至数百位同学在接受咨询&#xff0c;其中大约10-20%是重点难点个案&#xff0c;一次督导如果只能督导1-2个个案&#xff0c;不足以保障所有危重难个案的有如何处理恰当、方向正确、快速解决、高效工作&#xff0c;是学校心理咨询…...

c++ map与unordered_map的比较

c map与unordered_map的比较 在c的STL库中&#xff0c;有map与unordered_map这两种名字十分相似的容器&#xff0c;但是他们的区别还是很大&#xff0c;下面我们从 底层实现、性能特性 和 适用场景进行逐一比较 底层实现 std::mapstd::unordered_map底层数据结构红黑树&…...

新手蓝桥杯冲击国一练习题单(四)

2025蓝桥杯省赛已结束&#xff0c;接下来是冲击国赛的时间 此题单为算法基础精选题单&#xff0c;包含蓝桥杯常考考点以及各种经典算法&#xff0c;可以帮助你打牢基础&#xff0c;查漏补缺。 本题单目标是冲击蓝桥杯省一国一&#xff0c;团体程序天梯赛个人国三、XCPC区域赛铜…...

PyTorch深度学习框架60天进阶学习计划 - 第45天:神经架构搜索(一)

PyTorch深度学习框架60天进阶学习计划 - 第45天&#xff1a;神经架构搜索&#xff08;一&#xff09; 第一部分&#xff1a;详解DARTS的可微分搜索空间 大家好&#xff01;欢迎来到我们PyTorch深度学习框架进阶学习计划的第45天。今天我们将深入探讨神经架构搜索(Neural Arch…...

【java 13天进阶Day04】常用API、正则表达式,泛型、Collection集合API

Math类的使用。 Math用于做数学运算。Math类中的方法全部是静态方法&#xff0c;直接用类名调用即可。方法&#xff1a; public static int abs(int a) 获取参数a的绝对值public static double ceil(double a) 向上取整public static double floor(double a) 向下取整public s…...

leetcode 309. Best Time to Buy and Sell Stock with Cooldown

目录 题目描述 第一步&#xff0c;明确并理解dp数组及下标的含义 第二步&#xff0c;分析并理解递推公式 1.求dp[i][0] 2.求dp[i][1] 3.求dp[i][2] 第三步&#xff0c;理解dp数组如何初始化 第四步&#xff0c;理解遍历顺序 代码 题目描述 这道题与第122题的区别就是卖…...

RAG 实战|用 StarRocks + DeepSeek 构建智能问答与企业知识库

文章作者&#xff1a; 石强&#xff0c;镜舟科技解决方案架构师 赵恒&#xff0c;StarRocks TSC Member &#x1f449; 加入 StarRocks x AI 技术讨论社区 https://mp.weixin.qq.com/s/61WKxjHiB-pIwdItbRPnPA RAG 和向量索引简介 RAG&#xff08;Retrieval-Augmented Gen…...

Java拼团项目

一些记录 环境配置 首先是把配置安装好&#xff0c;jdk1.8&#xff0c;maven3.8.8&#xff0c;docker&#xff0c;idea&#xff0c;脚手架 然后创建工程&#xff0c;通过小傅哥的脚手架从远程把一些包&#xff0c;依赖拉过来 然后在gitcode上边创建仓库&#xff0c;把代码提交…...

力扣每日打卡 2364. 统计坏数对的数目 (中等)

力扣 2364. 统计坏数对的数目 中等 前言一、题目内容二、解题方法1. 哈希函数12. 哈希函数22.官方题解2.1 方法一&#xff1a;使用 sqrt 函数 前言 这是刷算法题的第十四天&#xff0c;用到的语言是JS 题目&#xff1a;力扣 2364. 统计坏数对的数目 (中等) 一、题目内容 给你…...

R语言之.rdata文件保存及加载

在 R 中&#xff0c;.rdata 文件是通过 save() 函数创建的。 使用 save() 函数可以将一个或多个 R 对象保存到 .rdata 文件中。使用 load() 函数可以将 .rdata 文件中的对象恢复到当前工作环境中。 1.创建并保存对象到.rdata 假设有一个基于 iris 数据集训练的线性回归模型&a…...

神经网络优化 - 小批量梯度下降之批量大小的选择

上一博文学习了小批量梯度下降在神经网络优化中的应用&#xff1a; 神经网络优化 - 小批量梯度下降-CSDN博客 在小批量梯度下降法中&#xff0c;批量大小(Batch Size)对网络优化的影响也非常大&#xff0c;本文我们来学习如何选择小批量梯度下降的批量大小。 一、批量大小的…...

开源AI守护每一杯------奶茶咖啡店视频安全系统的未来之力

连锁饮品奶茶咖啡店视频安全系统以开源AI技术为引擎&#xff0c;将后厨管理从“被动查漏”升级为“主动防控”&#xff0c;让消费者从“担心卫生”变为“放心下单”。 解决方案亮点&#xff1a;技术驱动&#xff0c;全面防护 1. 实时监控与AI识别&#xff1a;秒级捕捉隐患 亮…...

音视频元素

目录 HTMLMediaElement网络状态 (networkState)就绪状态 (readyState)错误代码 (error.code) video属性方法事件 audio HTMLMediaElement HTMLMediaElement 是 HTML5 中 和 元素的基类&#xff0c;定义了它们共享的属性、方法和事件。无论你使用的是音频还是视频元素&#xff0…...

音视频小白系统入门课-2

本系列笔记为博主学习李超老师课程的课堂笔记&#xff0c;仅供参阅 课程传送门&#xff1a;音视频小白系统入门课 音视频基础ffmpeg原理 往期课程笔记传送门&#xff1a; 音视频小白系统入门笔记-0音视频小白系统入门笔记-1 课程实践代码仓库&#xff1a;传送门 音视频编解…...

时序逻辑电路——序列检测器

文章目录 一、序列检测二、牛客真题1. 输入序列连续的序列检测&#xff08;输入连续、重叠、不含无关项、串行输入&#xff09;写法一&#xff1a;移位寄存器写法二&#xff1a;Moore状态机写法三&#xff1a;Mealy状态机 一、序列检测 序列检测器指的就是将一个指定的序列&…...

#systemverilog# 进程控制问题#(八)关于#0 问题的使用(三)

今天,我们继续研究一下上一节讨论的问题。其实,还有一个小问题,我们来探讨一下。 `timescale 1ns/10psmodule tb_top(); reg clk; reg reset;initial begin reset = 0; #10 reset = 1; #15 reset = 0; #50 $finish; endinitial beginfor(int i = 0; i < 4 ; i++)fork #…...

k8s低版本1.15安装prometheus+grafana进行Spring boot数据采集

目录 一、背景&#xff1a; 二、实施过程 1&#xff09;.安装地址&#xff1a;https://github.com/prometheus-operator/kube-prometheus 2).安装方式两种&#xff0c; 3&#xff09;.安装Prometheus需要对照k8s集群版本。 4&#xff09;.拉去prometheus 5&#xff09;.导…...

Spring-Ioc容器的加载过程?

大家好&#xff0c;我是锋哥。今天分享关于【SpringIoC的实现机制是什么&#xff1f;】面试题。希望对大家有帮助&#xff1b; Spring-Ioc容器的加载过程&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring IoC容器的加载过程是指在应用启动时&…...

kaamel Privacy agent:AI赋能的隐私保护技术解决方案

智能隐私合规解决方案 在当今数字经济环境下&#xff0c;有效的隐私合规已成为企业运营的基础要求。全球范围内已有超过120项隐私法规生效&#xff0c;这对企业的数据处理流程提出了严峻挑战。kaamel Privacy agent作为专门为隐私合规领域设计的AI引擎&#xff0c;通过自动化技…...

从零到上线!AI生成SpringBoot项目脚手架实战(含K8s+Docker配置)

在 Java 开发领域,搭建 Spring Boot 项目脚手架是一项耗时且繁琐的工作。传统方式下,开发者需要手动配置各种依赖、编写基础代码,过程中稍有疏忽就可能导致配置错误,影响开发进度。如今,随着 AI 技术的迅猛发展,飞算 JavaAI 的出现为开发者带来了全新解决方案,让自动生成 Sprin…...

VueRouter笔记

定义路由 import { createMemoryHistory, createRoute } from vue-router; import MyView1 from ./MyView1.vue; import MyView2 from ./MyView2.vue;const routes [{ path: /1, component: MyView1 },{ path: /2, component: MyView2 } ];const router createRouter({histo…...

vue3 Element-plus修改内置样式复现代码

笔者在修改Element-plus的内置样式时&#xff0c;遇到一点挫折&#xff0c;现提供需求场景与解决方案。 一、实现&#xff08;1&#xff09;透明弹窗可拖拽&#xff0c;且不影响点击弹窗外内容&#xff1b;&#xff08;2&#xff09;弹窗内置表格&#xff0c;表格需修改样式颜色…...

easyui进度条

简单打开和关闭 // 展示进度条 $.messager.progress({title: 请稍候,msg: 系统处理中...,text: 0%});//关闭进度条 $.messager.progress(close); easyui 普通提示 <!DOCTYPE html> <html> <head><meta charset"UTF-8">&l…...

vcpkg缓存问题研究

vcpkg缓存问题研究 问题描述解决方案官网给出的方案其实并不是大多数人语境中的“清除缓存”实际解决方案 问题描述 使用vcpkg管理c的库的时候&#xff0c;vcpkg会在c盘某些地方缓存下载的库&#xff0c;如果安装的库过多&#xff0c;这个缓存文件夹会过大占用磁盘空间&#x…...

优化WAV音频文件

优化 WAV 音频文件通常涉及 减小文件体积、提升音质 或 适配特定用途&#xff08;如流媒体、广播等&#xff09;。以下是分场景的优化方法&#xff0c;涵盖工具和操作步骤&#xff1a; 一、减小文件体积&#xff08;无损/有损压缩&#xff09; 1. 无损压缩 转换格式&#xff1…...

系统架构设计师:流水线技术相关知识点、记忆卡片、多同类型练习题、答案与解析

题目&#xff1a; 流水线技术中&#xff0c;若某流水线分为5段&#xff0c;每段执行时间为Δt&#xff0c;则执行100条指令的总时间为&#xff08; &#xff09; A. 100Δt B. 104Δt C. 500Δt D. 505Δt 答案&#xff1a;B‌ ‌解析&#xff1a;流水线总时间(nk-1)Δt&#…...

test ssl java

// 文件名&#xff1a;SslUtilsTest.java// 包路径&#xff1a; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.io.InputStream; import java.security.KeyStore; import javax.net.ssl.SSLContext; import org.apache.hc.client5…...

【系统分析师】-软件工程

考点汇总 考点详情 软件生存周期&#xff1a;可行性分析与项目开发计划&#xff0c;需求分析&#xff0c;概要设计&#xff0c;详细设计&#xff0c;编码&#xff0c;测试&#xff0c;维护 软件能力成熟度模型 CMM&#xff1a;初始级&#xff0c;可重复级&#xff0c;已定义级…...

FFmpeg 硬核指南:从底层架构到播放器全链路开发实战 基础

目录 1.ffmpeg的基本组成2.播放器的API2.1 复用器阶段2.1.1 分配解复用上下文2.1.2 文件信息操作2.1.3 综合示例 2. 2 编解码部分2.2.1 分配解码器上下文2.2.2编解码操作2.2.3 综合示例 3 ffmpeg 内存模型3.1 基本概念3.2API 1.ffmpeg的基本组成 模块名称功能描述主要用途AVFo…...

2025MathorcupD题 短途运输货量预测及车辆调度问题 保姆级教程讲解|模型讲解

2025Mathorcup数学建模挑战赛&#xff08;妈妈杯&#xff09;D题保姆级分析完整思路代码数据教学 其中更详细的思路&#xff0c;各题目思路、代码、讲解视频、成品论文及其他相关内容&#xff0c;可以点击下方群名片哦&#xff01;...

CSS 包含块

CSS 中的包含块&#xff08;Containing Block&#xff09;是一个非常重要的概念&#xff0c;它定义了元素在布局中的参考框架。元素的尺寸、位置和偏移量通常都是基于其包含块来计算的。理解包含块的概念对于掌握 CSS 布局至关重要。 1. 包含块的作用 定位元素&#xff1a;当…...

嵌入式设备网络的动态ID分配机制实现

文章目录 前言一、系统设计要点二、核心数据结构2.1 设备唯一标识(DeviceUID)2.2 节点信息(Node)2.3 节点管理器(NodeManager) 三、核心算法实现3.1 初始化与清理3.1.1 初始化节点管理器3.1.2 清理节点管理器 3.2 动态ID分配策略3.2.1 查找最小可用ID3.2.2 ID使用检查 3.3 心跳…...