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

从.m3u8到.mp4:使用批处理脚本完成视频处理的完整指南

这里介绍一个Windows批处理脚本(Windows Batch Script),主要用于处理 .m3u8 ts 视频文件的下载和合并功能。

以下是程序的主要功能和逻辑流程:

功能概述

  1. 参数检查与路径处理

    • 检查是否传递了文件或文件夹路径作为参数。

    • 判断传递的路径是文件还是文件夹,并根据路径切换到相应的目录。

  2. 文件处理逻辑

    • 如果目标目录中存在 .m3u8 文件(如 index.m3u8 或以当前目录名命名的 .m3u8 文件),程序会解析该文件。

    • 根据 .m3u8 文件中的内容,提取有效的文件链接(如 .ts 文件的 URL)。

  3. 文件下载

    • 使用 aria2c 工具批量下载 .m3u8 文件中列出的文件(如 .ts 文件)。

    • 下载的文件会保存到当前目录。

  4. 文件合并

    • 使用 ffmpeg 将下载的文件片段(如 .ts 文件)合并为一个完整的视频文件(如 .mp4 文件)。

  5. 清理操作

    • 提供选项删除下载的片段文件、临时文件(如 newindex.m3u8links.list 等)。

    • 根据用户选择,保留或删除这些文件。

  6. 错误处理与用户交互

    • 检查目标文件是否已存在,并提示用户是否需要重新生成。

    • 如果 .m3u8 文件或目标文件已存在,程序会询问用户是否覆盖。

    • 如果下载或合并过程中出现错误,程序会提示用户。

详细逻辑流程

  1. 参数检查

    • 如果未传递参数,程序提示用户并退出。

    • 如果传递了参数,程序会判断路径是文件还是文件夹。

  2. 目录切换

    • 如果路径是文件夹,程序切换到该文件夹。

    • 如果路径是文件,程序切换到文件所在的目录。

  3. 解析 .m3u8 文件

    • 程序会尝试解析 index.m3u8 或以当前目录名命名的 .m3u8 文件。

    • 提取文件链接(如 .ts 文件的 URL)并保存到 links.list 文件中。

    • 如果 .m3u8 文件中包含加密信息(如 AES-128 密钥链接),程序会提取并处理这些链接。

  4. 文件下载

    • 使用 aria2c 根据 links.list 文件中的链接批量下载文件。

    • 下载的文件会保存到当前目录。

  5. 文件合并

    • 使用 ffmpeg 将下载的文件片段(如 .ts 文件)合并为一个 .mp4 文件。

    • 提供多种 ffmpeg 命令选项,用户可以根据需要选择合适的命令。

  6. 清理操作

    • 提供选项删除下载的片段文件、临时文件(如 newindex.m3u8links.list 等)。

    • 用户可以选择保留或删除这些文件。

  7. 错误处理与用户交互

    • 如果目标文件已存在,程序会提示用户是否重新生成。

    • 如果 .m3u8 文件或目标文件已存在,程序会询问用户是否覆盖。

    • 如果下载或合并过程中出现错误,程序会提示用户。

应用场景

  • 该脚本主要用于处理视频片段的下载和合并,通常用于处理 .m3u8 格式的视频文件(如在线视频、直播回放等)。

  • 用户可以通过传递文件或文件夹路径作为参数,让脚本自动完成下载和合并操作。

  • 脚本提供了用户交互功能,允许用户根据需要选择是否覆盖文件或删除临时文件。

注意事项

  • 程序依赖于外部工具 aria2cffmpeg,需要确保这些工具已安装并配置在系统路径中。

  • 程序的逻辑较为复杂,涉及文件路径处理、文件下载、文件合并等多个步骤,需要谨慎使用。

  • 用户在运行脚本时需要确保传递的参数正确,否则可能导致程序无法正常运行。

完整的程序代码

 

@echo off
echo 正在处理文件:%~1
rem ~可以确保获取到的参数不包含多余的引号
rem 判断是否传递了参数
if "%~1"=="" (echo 未传递任何参数,请提供文件或文件夹路径。exit /b 1
)rem 获取参数的属性
set "attribute=%~a1"
set "fpath=%~1"rem 判断是否为文件夹
if "%attribute:~0,1%"=="d" (echo "%~1 是一个文件夹目录。"rem 这里可以添加处理文件夹的逻辑rem set "fpath=%~1"
) else if "%attribute:~0,1%"=="-" (echo "%~1 是一个文件路径。"rem 这里可以添加处理文件的逻辑set "fpath=%~dp1"
) else (echo "无法识别 %~1 是文件还是文件夹。"exit /b 1
)echo 切换目录到 "%fpath%"
pushd "%fpath%"
if errorlevel 1 (echo "Error: Directory %~1 not found."pauseexit /b
)
for %%i in (.) do set "curr=%%~ni"
echo "使用最后一级目录 %curr% 作为文件名"rem 判断文件是否存在,如果存在询问用户是否删除重新生成
setlocal enableextensions enabledelayedexpansionrem 检查 index.m3u8 文件是否存在
rem set "m3u8=index.m3u8"
set "m3u8=%curr%.m3u8"
if not exist "!m3u8!" (set "m3u8=index.m3u8"
)
echo "!m3u8!"rem if exist "%curr%.mp4" (del /f "%curr%.mp4")
rem 定义目标文件路径,你可以根据实际情况修改set "target_file=%curr%.mp4"rem 检查目标文件是否存在
if exist "%target_file%" (:ask_userset /p "choice=目标文件 %target_file% 已存在,是否重新生成?(Y/N)(回车=是): ":: 检测用户输入if /i "!choice!"=="" (set "choice=Y" :: 如果用户直接回车,则设置默认值为 Y)if /i "!choice!"=="Y" (rem 用户选择重新生成,删除原有文件del /f "%target_file%"echo "已删除原有文件 %target_file%。") else if /i "!choice!"=="N" (echo 你选择不重新生成,程序将退出。goto ask_user3pauseexit /b) else (echo 无效的输入,请输入 Y 或 N。goto ask_user)
)rem 如果 newindex.m3u8 文件存在则直接合并文件
if exist "newindex.m3u8" (:ask_user2set /p "choice=目标文件 newindex.m3u8 已存在,是否重新生成?(Y/N)(回车=是): "echo !choice!:: 检测用户输入if /i "!choice!"=="" (set "choice=Y" :: 如果用户直接回车,则设置默认值为 Y)if /i "!choice!"=="Y" (rem 用户选择重新生成,删除原有文件del /f newindex.m3u8del /f links.listecho 已删除原有文件 newindex.m3u8。) else if /i "!choice!"=="N" (echo 你选择不重新生成,直接跳转到合并过程。goto ffmpeg_merge) else (echo 无效的输入,请输入 Y 或 N。goto ask_user2)
)set /a b=0
set /a fn=0
rem 遍历 index.m3u8 文件的每一行
for /f "usebackq delims=" %%a in ("!m3u8!") do (rem 去除可能的引号set "url=%%a"set "url=!url:"=!"rem 判断 url 是否为有效的文件链接(简单判断是否以 http 或 https 开头)if "!url:~0,4!"=="http" (rem 提取文件名for %%f in ("!url!") do set "filename=%%~nxf"if exist "!filename!" (rem 判断文件大小 for /f %%i in ('dir /b %%a') do if 0 lss %%~zi (echo file %%a >> newindex.m3u8)echo !filename! 文件已存在!) else (echo !url! >> links.list)echo !filename! >> newindex.m3u8) else (if "!b!"=="0" (if "!url:~0,30!"=="#EXT-X-KEY:METHOD=AES-128,URI=" (echo "!url!"set "uri=!url:~30!"set "uri=!uri:"=!"echo "uri=!uri!"if "!uri:~0,4!"=="http" (if not exist "!uri!" (echo !uri! >> links.list)set /a b+=1echo #EXT-X-KEY:METHOD=AES-128,URI=key.key >> newindex.m3u8rem 输出提取到的 URIecho 提取到的 URI 是: !uri!))if "!b!"=="0" (rem echo !url! 不是有效的文件链接,跳过echo !url! >> newindex.m3u8)) else (rem echo !url! 不是有效的文件链接,跳过echo .echo !url! >> newindex.m3u8))set /a fn+=1
)rem 设置包含下载链接的文本文件路径
set "links_file=links.list"
rem 设置下载文件保存的目录
set "download_dir=%cd%"
if exist "%links_file%" (rem 调用 aria2c 批量下载文件aria2c -i "%links_file%" -d "%download_dir%" -x 16 -s 8 -j 10 -cecho 调用 aria2c 批量下载完成!
):ffmpeg_merge
rem 如果 key.key 文件不存在,ffmpeg 不会报错,会继续执行
echo ffmpeg merge beginffmpeg -protocol_whitelist "file,crypto" -allowed_extensions ALL -threads auto -i "newindex.m3u8" -c copy -bsf:a aac_adtstoasc "%curr%.mp4"
rem ffmpeg -protocol_whitelist "file,crypto" -allowed_extensions ALL -i "newindex.m3u8" -c copy -bsf:a aac_adtstoasc "output.mp4"
rem ffmpeg -protocol_whitelist "file,crypto" -allowed_extensions ALL -threads auto -i "newindex.m3u8" -c copy "%curr%.mp4"
rem ffmpeg -protocol_whitelist "file,crypto" -allowed_extensions ALL -i "newindex.m3u8" -c:v libx264 -c:a aac "%curr%.mp4"
rem ffmpeg -f concat -safe 0 -protocol_whitelist "file,concat" -i newindex.m3u8 -c copy %curr%.mp4
if errorlevel 1 (echo Error: ffmpeg failed to merge files.
) else (echo "%curr%.mp4 合并成功!":ask_user3set /p "choice=是否删除下载的切片文件?(Y/N)(回车=Y): "echo "!choice!":: 检测用户输入if /i "!choice!"=="" (set "choice=Y" :: 如果用户直接回车,则设置默认值为 Y)if /i "!choice!"=="Y" (rem 用户选择重新生成,删除原有文件echo "!m3u8!"del /f *.tsrem 遍历 index.m3u8 文件的每一行for /f "usebackq delims=" %%a in ("!m3u8!") do (rem 去除可能的引号set "url=%%a"set "url=!url:"=!"rem 判断 url 是否为有效的文件链接(简单判断是否以 http 或 https 开头)if "!url:~0,4!"=="http" (rem 提取文件名for %%f in ("!url!") do set "filename=%%~nxf"echo !filename!if exist "!filename!" (del /f "!filename!")))if exist "newindex.m3u8" (del /f newindex.m3u8)if exist "links.list" (del /f links.list)if exist "index.html" (del /f index.html)if exist "index.m3u8" (del /f index.m3u8)if exist "index.1.html" (del /f index.1.html)if exist "url.txt" (del /f url.txt)if exist "!m3u8!" (del /f "!m3u8!")) else if /i "!choice!"=="N" (echo 你选择不删除,程序即将退出!exit /b 0) else (echo 无效的输入,请输入 Y 或 N。goto ask_user3)
)endlocal
pause

如何使用呢?

将以上内容保存为 “ts2mp4.bat”,放在系统目录下,比如:C:\Windows,这样你就可以在任何一个目录调用它了;

首先你得知道如何拿到视频的 .m3u8 文件的URL地址 ,下载到本地;

然后就可以使用上面的bat下载ts切片并合并为 mp4视频文件了,例如: ts2mp4 index.m3u8

 你也可以将以下内容导入注册表:

Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\VLC.m3u8\shell\ts2mp4\command]
@="ts2mp4.bat \"%1\""

这样在  .m3u8 文件上点击鼠标右键时,就可以通过右键菜单的形成调用  ts2mp4 了;

该程序目前还存在一个问题 :如果  .m3u8 文件中的ts切片url地址是相对的,不是完整的url的话,无法实现下载;

编写该bat文件遇到的坑:

echo 后面输出的内容中有变量(并且变量中包含特殊字符,比如小括号)的情况必须使用双引号将输出内容括起来,否则即使程序没有执行到那一行,而是执行到那个程序块的话也是会报错停止执行,这给查找问题发生的位置带来不小的麻烦

bat的字符查找功能比较弱,要要找字符串的话实现起来比较麻烦;

相关文章:

从.m3u8到.mp4:使用批处理脚本完成视频处理的完整指南

这里介绍一个Windows批处理脚本(Windows Batch Script),主要用于处理 .m3u8 ts 视频文件的下载和合并功能。 以下是程序的主要功能和逻辑流程: 功能概述 参数检查与路径处理: 检查是否传递了文件或文件夹路径作为参数…...

qt5的中文乱码问题,QString、QStringLiteral 为 UTF-16 编码

qt5的中文乱码问题一直没有很明确的处理方案。 今天处理进程间通信时,也遇到了qt5乱码问题,一边是设置的GBK,一边设置的是UTF8,单向通信约定采用UTF8。 发送端保证发的是UTF8字符串,因为UTF8在网络数据包中没有字节序…...

Gurobi 并行计算的一些问题

最近尝试用 gurobi 进行并行计算,即同时用多个 cpu 核计算 gurobi 的 model,但是发现了不少问题。总体来看,gurobi 对并行计算的支持并不是那么好。 gurobi 官方对于并行计算的使用在这个网址,并有下面的大致代码: i…...

Vue3 中如何实现响应式系统中的依赖收集和更新队列的解耦?

一、问题解析:为什么需要解耦? 在响应式系统中,依赖收集​(追踪数据与视图的关联关系)和更新队列​(批量处理数据变化带来的副作用)是两个核心但职责不同的模块。 Vue3 通过以下设计实现解耦&…...

vue项目中动态添加类名样式不生效问题

一、问题描述 在vue项目中使用:class{tableContent: summary}给元素动态添加了类名tableContent&#xff0c;运行代码后查看类名已经添加成功但样式并未生效。 二、问题产生原因并解决 刚开始把样式写在了<style lang"scss" scoped></style>中&#x…...

供应链管理系统--升鲜宝门店收银系统功能解析,登录、主界面、会员 UI 设计图(一)

供应链管理系统--升鲜宝门店收银系统功能解析&#xff0c;登录、主界面 会员 UI 设计图&#xff08;一&#xff09;...

用AI写游戏3——deepseek实现kotlin android studio greedy snake game 贪吃蛇游戏

项目下载 https://download.csdn.net/download/AnalogElectronic/90421306 项目结构 就是通过android studio 建空项目&#xff0c;改下MainActivity.kt的内容就完事了 ctrlshiftalts 看项目结构如下 核心代码 MainActivity.kt package com.example.snakegame1// MainA…...

设计模式的引入

面向对象设计原则 1. 软件设计固有的复杂性2. 面向对象设计原则2.1 引入2.2 依赖倒置原则2.3 开放封闭原则2.4 单一职责原则2.5 Liskov 替换原则&#xff08; LSP&#xff09;2.6 接口隔离原则&#xff08; ISP&#xff09;2.7 优先使用对象组合&#xff0c;而不是类继承2.8 封…...

P8697 [蓝桥杯 2019 国 C] 最长子序列

P8697 [蓝桥杯 2019 国 C] 最长子序列 题目 分析代码 题目 分析 先分析一波xdm 题意呢就是在s中找有多少个能和t匹配的字符&#xff0c;注意&#xff1a;连续匹配&#xff0c;输出连续的次数 欧克&#xff0c;开始分析&#xff0c;首先&#xff0c;哎~字母&#xff01;还强调…...

基于阿里云PAI平台快速部署DeepSeek大模型实战指南

一、DeepSeek大模型&#xff1a;企业级AI应用的新标杆 1.1 为什么选择DeepSeek&#xff1f; 近期&#xff0c;DeepSeek系列模型凭借其接近GPT-4的性能和开源策略&#xff0c;成为全球开发者关注的焦点。在多项国际评测中&#xff0c;DeepSeek-R1模型在推理能力、多语言支持和…...

【java进阶】java多态深入探讨

前言 在Java的编程宇宙中,多态是极为关键的概念,它宛如一条灵动的纽带,串联起面向对象编程的诸多特性,赋予程序宛如生命般的动态活力与高度灵活性。透彻理解多态,不仅是提升代码质量的关键,更是开启高效编程大门的钥匙。 一、多态的定义与本质 多态,从概念层面来讲,…...

蓝桥杯备赛-拔河

问题描述 小明是学校里的一名老师&#xff0c;他带的班级共有 nn 名同学&#xff0c;第 ii 名同学力量值为 aiai​。在闲暇之余&#xff0c;小明决定在班级里组织一场拔河比赛。 为了保证比赛的双方实力尽可能相近&#xff0c;需要在这 nn 名同学中挑选出两个队伍&#xff0c…...

Zookeeper(67) Zookeeper在HBase中的应用是什么?

Zookeeper 在 HBase 中起到了至关重要的作用&#xff0c;主要用于协调和管理 HBase 集群中的多个组件。具体来说&#xff0c;Zookeeper 在 HBase 中的应用包括以下几个方面&#xff1a; Master 选举&#xff1a;HBase 集群中可以有多个 Master 节点&#xff0c;但只有一个处于…...

java后端开发day20--面向对象进阶(一)--static继承

&#xff08;以下内容全部来自上述课程&#xff09; 1.static–静态–共享 static表示静态&#xff0c;是java中的一个修饰符&#xff0c;可以修饰成员方法&#xff0c;成员变量。 1.静态变量 被static修饰的成员变量&#xff0c;叫做静态变量。 特点&#xff1a; 被该类…...

IDEA使用Maven方式构建SpringBoot项目

1、环境准备 确保你已经安装了以下工具&#xff1a; Java JDK&#xff08;推荐 JDK 8 或更高版本&#xff09; IntelliJ IDEA&#xff08;推荐使用最新版本&#xff09; 2、创建 Spring Boot 项目 &#xff08;1&#xff09; 打开 IntelliJ IDEA。 &#xff08;2&#xff09…...

Spring Boot2.0之十 使用自定义注解、Json序列化器实现自动转换字典类型字段

前言 项目中经常需要后端将字典类型字段值的中文名称返回给前端。通过sql中关联字典表或者自定义函数不仅影响性能还不能使用mybatisplus自带的查询方法&#xff0c;所以推荐使用自定义注解、Json序列化器&#xff0c;Spring的缓存功能实现自动转换字典类型字段。以下实现Spri…...

C#问题解决方案 --- 生成软件hash,生成文件hash

生成软件hash值&#xff1a; private string GetEXEHashString() {//获得软件哈希值Process currProcess Process.GetCurrentProcess();string filePath currProcess.MainModule.FileName;string hashEXE string.Empty;using (FileStream fs new FileStream(filePath, Fil…...

云计算如何解决延迟问题?

在云计算中&#xff0c;延迟&#xff08;latency&#xff09;指的是从请求发出到收到响应之间的时间间隔。延迟过高可能会严重影响用户体验&#xff0c;特别是在需要实时响应的应用中&#xff0c;如在线游戏、视频流、金融交易等。云计算服务如何解决延迟问题&#xff0c;通常依…...

多模态人物视频驱动技术回顾与业务应用

一种新的商品表现形态&#xff0c;内容几乎存在于手淘用户动线全流程&#xff0c;例如信息流种草内容、搜索消费决策内容、详情页种草内容等。通过低成本、高时效的AIGC内容生成能力&#xff0c;能够从供给端缓解内容生产成本高的问题&#xff0c;通过源源不断的低成本供给倒推…...

鸿蒙中连接手机可能遇到的问题

连接权限问题&#xff1a;手机开启了严格的权限管理机制&#xff0c;若未授予鸿蒙设备连接所需的权限&#xff0c;如蓝牙连接时未开启蓝牙权限&#xff0c;或者 USB 连接时未允许设备进行调试、文件传输等操作&#xff0c;就会导致连接失败。例如&#xff0c;当使用鸿蒙平板通过…...

15.代码随想录算法训练营第十五天|(递归)110. 平衡二叉树,257. 二叉树的所有路径*,404. 左叶子之和,222.完全二叉树的节点个数[打卡自用]

15.代码随想录算法训练营第十五天|&#xff08;递归&#xff09;110. 平衡二叉树&#xff0c;257. 二叉树的所有路径*&#xff0c;404. 左叶子之和&#xff0c;222.完全二叉树的节点个数 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a; 输入&#xf…...

H5 火柴人科目三和GitHub获取仓库点星星的用户列表发生了艺术的碰撞

先看效果&#xff0c;代码写的比较乱&#xff0c;有待优化 效果 https://linyisonger.github.io/H5.Examples/?name./089.%E7%9C%8B%E6%98%9F%E6%98%9F%E7%9A%84%E8%88%9E%E8%80%85.html 思路 看起来很简单&#xff0c;实则也不是很难&#xff0c;就是需要思路要打开。 一…...

使用消息队列怎样防止消息重复?

大家好&#xff0c;我是君哥。 使用消息队列时&#xff0c;我们经常会遇到一个可能对业务产生影响的问题&#xff0c;消息重复。在订单、扣款、对账等对幂等有要求的场景&#xff0c;消息重复的问题必须解决。 那怎样应对重复消息呢&#xff1f;今天来聊一聊这个话题。 1.三…...

06.【C++】模板初阶(template<typename T>,充分复用函数,函数模板和类模板的使用)

目录 一. 泛型编程 二. 函数模板&#xff08;template的使用&#xff09; 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 三. 类模板 3.1 类模板的定义格式 3.2 类模板的实例化 一. 泛型编程 如何实现一个通用…...

深入理解 并查集LRUCaChe

并查集&LRUCaChe 个人主页&#xff1a;顾漂亮 文章专栏&#xff1a;Java数据结构 1.并查集的原理 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&#xff0c;然后根据一定规律将归于同一组元素的…...

在 macOS 系统上安装 kubectl

在 macOS 系统上安装 kubectl 官网&#xff1a;https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-macos/ 用 Homebrew 在 macOS 系统上安装 如果你是 macOS 系统&#xff0c;且用的是 Homebrew 包管理工具&#xff0c; 则可以用 Homebrew 安装 kubectl。 运行…...

如何设置HTTPOnly和Secure Cookie标志?

设置HttpOnly和Secure标志于Cookie中是增强Web应用安全性的重要措施。这两个标志帮助防止跨站脚本攻击&#xff08;XSS&#xff09;和中间人攻击&#xff08;MitM&#xff09;。下面是关于如何设置这些标志的具体步骤&#xff1a; 设置方法 在服务器端设置 根据你的服务器端…...

seacmsv9注入管理员账号密码+orderby+limi

1&#xff1a;mysql默认存储引擎innoDB携带的表 1&#xff0c;mysql.innodb_table_stats 2,mysql.innodb_index_stats SELECT table_name FROM mysql.innodb_table_stats WHERE database_name DATABASE(); 2&#xff1a; 关键字做处理 HEX编码:0x696E666F726D6174696F6E5F7…...

Orange 开源项目 - 集成百度智能云-千帆大模型

1 集成百度智能云-千帆大模型 百度智能云-千帆ModelBuilder百度智能云千帆大模型服务与开发平台ModelBuilder&#xff08;以下简称千帆ModelBuilder&#xff09;是面向企业开发者的一站式大模型开发及服务运行平台。千帆ModelBuilder不仅提供了包括文心一言底层模型和第三方开源…...

mac 安装Eclipse,汉化及安装ERMaster

1、下载Eclipse 进入官网直接下载 https://www.eclipse.org/downloads/ 2、Eclipse 汉化 以下是 Eclipse 2024-12 汉化的具体方法&#xff1a; 1、打开安装新软件界面&#xff1a;打开 Eclipse&#xff0c;点击菜单栏中的 “Help”&#xff0c;选择 “Install New Software……...

C++程序员内功修炼——Linux C/C++编程技术汇总

在软件开发的宏大版图中&#xff0c;C 语言宛如一座巍峨的高山&#xff0c;吸引着无数开发者攀登探索。而 Linux 操作系统&#xff0c;以其开源、稳定、高效的特性&#xff0c;成为了众多开发者钟爱的开发平台。将 C 与 Linux 相结合&#xff0c;就如同为开发者配备了一把无坚不…...

Unity3D 战斗系统架构与设计详解

引言 战斗系统是许多游戏的核心玩法之一&#xff0c;尤其是在动作游戏、角色扮演游戏&#xff08;RPG&#xff09;和策略游戏中。Unity3D 作为一款强大的游戏引擎&#xff0c;提供了丰富的工具和 API 来帮助开发者实现复杂的战斗系统。本文将详细探讨 Unity3D 中战斗系统的架构…...

Apache Commons Chain 与 Spring Boot 整合:构建用户注册处理链

文章目录 概述1. 环境准备2. 创建自定义上下文3. 创建命令验证用户输入保存用户数据发送欢迎邮件 4. 构建并执行处理链5. 使用处理链6. 运行结果7. 总结 概述 本文档旨在展示如何在 Spring Boot 应用中使用 Apache Commons Chain 来实现一个用户注册的处理链。我们将通过 Chai…...

数据结构:二叉树的数组结构以及堆的实现详解

目录 一.树与二叉树 1.树的概念与相关术语&#xff1a; 2.二叉树&#xff1a; &#xff08;1&#xff09;定义&#xff1a; &#xff08;2&#xff09;特殊的二叉树&#xff1a; &#xff08;3&#xff09;完全二叉树 &#xff08;4&#xff09;二叉树的存储结构&#x…...

机器学习01

机器学习的基本过程如下&#xff1a; 1.数据获取 2.数据划分 3.特征提取 4.模型选择与训练 5.模型评估 6.模型调优 一、特征工程&#xff08;重点&#xff09; 0. 特征工程步骤为&#xff1a; 特征提取(如果不是像dataframe那样的数据&#xff0c;要进行特征提取&#…...

常见锁类型介绍

下面结合代码详细介绍 Mutex、RW Lock、Futex、自旋锁、信号量、条件变量 和 synchronized&#xff0c;并分析它们的适用场景、特点以及为什么这些锁适用于特定场景。我们将从锁的实现机制和性能特点出发&#xff0c;解释其适用性。 1. Mutex&#xff08;互斥锁&#xff09; 代…...

[uboot][stm32]配置LTDC屏幕

文章目录 前提dts设备树修改Kconfig日志打印后记 https://github.com/wdfk-prog/u-boot 前提 手上刚好有块屏幕,尝试在uboot中点亮一下使用前请使用其他手段点亮该屏幕确保屏幕的完好再进行操作.确保配置的参数及引脚是可用的. dts设备树修改 ltdc状态修改为重定向前绑定,另…...

nodejs用ws模块反向代理socks5数据,即用ws写服务端和客户端及加密

首先思路是客户端发送socks5请求数据——>服务端解密并解析socks5数据是否为真&#xff0c;解析出Host和port,并用net.socket访问目标网站&#xff0c;目标网站返回数据&#xff0c;服务端再用ws发送返回数据给客户端 //解析socks5数据和返回socks5格式响应 //在读下面代码…...

【MySQL篇】数据库基础

目录 1&#xff0c;什么是数据库&#xff1f; 2&#xff0c;主流数据库 3&#xff0c;MySQL介绍 1&#xff0c;MySQL架构 2&#xff0c;SQL分类 3&#xff0c;MySQL存储引擎 1&#xff0c;什么是数据库&#xff1f; 数据库&#xff08;Database&#xff0c;简称DB&#xf…...

linux后台运行程序怎么停止

启动 nohup ./jmeter -nt test.jmx 查看 ps -ef | grep nohup或者 ps -ef | grep test 停止 kill 掉上面查询出的进程 疑惑 停止掉java进程或者jmeter进程&#xff0c;但是没有实际停止任务&#xff0c;所以用nohup查出来进程再停止比较靠谱&#xff01;&#xff01;...

华为认证考试证书下载步骤(纸质+电子版)

华为考试证书可以通过官方渠道下载相应的电子证书&#xff0c;部分高级认证如HCIE还支持申请纸质证书。 一、华为电子版证书申请步骤如下&#xff1a; ①访问华为培训与认证网站 打开浏览器&#xff0c;登录华为培训与认证官方网站 ②登录个人账号 在网站首页&#xff0c;点…...

scala基础

Scala基础 scala基础Scala介绍第一个scala代码object和class的区别关键区别伴生类和伴生对象&#xff1a; 字节码解析在java中创建三个类 反编译代码编译User.class源码后的结果编译Emp.class源码后的结果 注释Scala类型推断&至简原则变量var和val之间的区别可变变量不可变…...

Linux中的查看命令

路径分为相对路径&#xff08;行相对当前工作目录开始的路径&#xff09;和绝对路径&#xff08;不管是&#xff09;#&#xff1a;命令提示符&#xff0c;从这个位置可以开始输入命令&#xff0c;另一个提示符为$&#xff0c;如果是root&#xff0c;则提示为#&#xff1b;如果是…...

深入了解 NAT 模式:网络地址转换的奥秘

深入了解 NAT 模式&#xff1a;网络地址转换的奥秘 在计算机网络的世界里&#xff0c;NAT 模式&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;扮演着至关重要的角色。它就像是网络中的翻译官&#xff0c;在不同网络地址之间进行转换&#xff0…...

HTML第二节

一.列表 1.列表的简介 2.无序列表 注&#xff1a;1.ul里面只能放li&#xff0c;不能放标题和段落标签 2.li里面可以放标题和段落等内容 3.有序列表 4.定义列表 注&#xff1a;要实现上图的效果需要CSS 二.表格 1.表格介绍 注&#xff1a;1.th有额外的效果&#xff0c;可以…...

203、【数组】NLP分词实现(Python)

题目描述 给定一个词典&#xff0c;比如[“杭州”,“西湖”,“博物馆”,“杭州西湖博物馆”,“我”]​ 对于输入的文本进分词&#xff1a;我在杭州的杭州西湖博物馆玩了一天​ 分词结果处理为如下形式的字符串: 我\W 在 杭州\W 的 杭州西湖博物馆\W 玩了一天​ 对于输入的文本…...

Qt 开源音视频框架模块之QtAV播放器实践

Qt 开源音视频框架模块QtAV播放器实践 1 摘要 QtAV是一个基于Qt的多媒体框架&#xff0c;旨在简化音视频播放和处理。它是一个跨平台的库&#xff0c;支持多种音视频格式&#xff0c;并提供了一个简单易用的API来集成音视频功能。QtAV的设计目标是为Qt应用程序提供强大的音视…...

在虚拟机CentOS安装VMware Tools

在虚拟机 CentOS 中安装 VMware Tools 可以增强虚拟机与宿主机之间的交互&#xff0c;例如实现文件共享、屏幕自适应等功能。以下是详细的安装步骤&#xff1a; 1.前提条件 已安装 VMware Workstation 或 VMware Fusion 等虚拟机软件。已在虚拟机中安装 CentOS 操作系统。 2…...

LeetCode热题100- 字符串解码【JavaScript讲解】

古语有云&#xff1a;“事以密成&#xff0c;语以泄败”&#xff01; 关于字符串解码&#xff1a; 题目&#xff1a;题解&#xff1a;js代码&#xff1a;代码中遇到的方法&#xff1a;repeat方法&#xff1a;为什么这里不用this.strstack.push(result)&#xff1f; 题目&#x…...

验证码介绍及生成与验证(HTML + JavaScript实现)

验证码介绍及生成与验证&#xff08;HTML JavaScript实现&#xff09; 验证码 验证码&#xff08;全自动区分计算机和人类的图灵测试&#xff0c;‌CAPTCHA &#xff0c;C‌ompletely ‌A‌utomated ‌P‌ublic ‌T‌uring test to tell ‌C‌omputers and ‌H‌umans ‌A‌…...