news 2026/9/4 11:44:13

从VPE.rar实战解析虚拟化环境部署:配置驱动与自动化运维

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从VPE.rar实战解析虚拟化环境部署:配置驱动与自动化运维

简介:本资源是Linux内核级虚拟网络引擎VPE(Virtual Packet Engine)的源码实现包,面向具备Linux内核网络子系统基础的中高级开发者与虚拟化网络研究者,用于深入理解SDN理念下的软件定义包转发与路由机制。压缩包为RAR格式,共2个文件(11KB),核心包含vpe.c——实现数据包接收、路由决策、多协议(IPv4/IPv6/MPLS)转发及虚拟接口管理的主逻辑;以及vpe.h——定义关键数据结构、函数原型与常量,支撑模块编译与内核集成。已有284人学习下载,适合通过源码剖析掌握VPE与内核网络栈交互细节、定制策略路由或扩展隧道功能(如配合VXLAN/GRE),亦可作为容器/虚拟机网络隔离方案的底层参考实现。

1. 项目概述:从“VPE.rar”文件说起

最近在整理一些老项目的资料时,翻到了一个名为vpe.rar的压缩包,解压后是一个名为VPE的文件夹。这个看似简单的压缩包,背后其实涉及到一个在特定领域内非常经典且实用的技术方案。对于很多从事网络设备管理、系统集成或者自动化运维的朋友来说,VPE 这个概念应该不陌生,它通常指的是虚拟化平台环境虚拟化私有环境的搭建与管理。这个压缩包很可能就是一个完整的、用于快速部署或迁移某个虚拟化应用场景的“种子包”。

这个VPE.rar文件,它不仅仅是一个压缩包,更像是一个“时间胶囊”,封装了特定时期、特定需求下的技术选型、配置逻辑和部署脚本。今天,我就想和大家深入聊聊,当我们拿到这样一个“种子包”时,应该如何去理解、拆解并最终让它在一个新的环境中“活”起来。这个过程,远比简单地双击解压、运行安装脚本要复杂和有趣得多。它考验的是我们对底层架构的理解、对配置文件的解读能力,以及对环境差异的适配技巧。无论你是想复现一个老旧的测试环境,还是想学习经典的虚拟化部署模式,这篇文章都能给你提供一套完整的思路和实操指南。

2. 核心思路拆解:VPE部署的通用逻辑与挑战

在动手之前,我们必须先理解 VPE 类项目部署的通用逻辑。一个典型的 VPE 部署包,其核心目标是在物理服务器或云主机上,快速构建一个包含计算、网络、存储资源的虚拟化层,并在此之上部署特定的应用或服务。vpe.rar这个文件,其内部结构通常遵循一个清晰的逻辑层次。

2.1 环境封装与依赖管理

首先,VPE 部署包最大的价值在于环境封装。开发者将软件安装包、配置文件、初始化脚本、甚至操作系统镜像或容器镜像,全部打包在一起。这样做的好处是确保了环境的一致性,避免了“在我机器上能跑,在你那里就报错”的经典问题。例如,包里可能包含了特定版本的虚拟化软件(如基于 KVM、VirtualBox 或某种轻量级容器运行时)、定制的 Linux 内核模块、以及一系列依赖库。

注意:这种强封装性既是优点也是陷阱。优点是开箱即用;陷阱是它可能对宿主机的操作系统版本、内核版本、甚至硬件架构(x86_64 vs ARM)有严格且隐含的要求。直接在不符的环境上运行,往往会遭遇各种诡异的失败。

2.2 配置驱动与自动化流程

其次,这类项目通常是配置驱动的。你不会看到复杂的图形界面安装向导,取而代之的是一堆*.conf,*.yaml,*.json或者*.ini文件。部署过程就是通过脚本读取这些配置文件,然后自动执行资源创建、网络配置、服务启动等操作。核心的自动化脚本可能用 Shell、Python 或 Ansible 等编写。

理解配置文件的组织结构是关键。通常,会有一个主配置文件(比如config.inisettings.yaml),它定义了全局参数,如网络网段、存储路径、镜像名称等。然后,各个子组件(如虚拟网络、虚拟机定义、负载均衡规则)会有自己独立的配置文件。部署脚本的逻辑就是按顺序解析这些文件,并调用底层虚拟化平台的 API 或命令行工具来创建资源。

2.3 网络与存储的抽象设计

VPE 的复杂性往往集中在网络存储的抽象上。为了隔离和灵活,它可能会创建多个虚拟网络(如管理网络、业务网络、存储网络),并配置复杂的路由、防火墙或 NAT 规则。存储方面,可能会使用本地目录、NFS 共享、或者分布式存储的客户端配置。

在拆解vpe.rar时,我们需要特别关注网络拓扑图(如果有的话)和存储挂载点的配置。这些配置通常与宿主机的实际网络接口和磁盘分区紧密相关,是迁移或复现过程中需要重点修改的部分。

3. 实战拆解:一步步解剖vpe.rar

理论说得再多,不如动手拆解。下面,我们假设已经将vpe.rar解压到了/opt/vpe目录下,一起来看看里面可能有什么,以及该如何处理。

3.1 目录结构探秘

首先,用tree命令(如果没安装,可以用find . -type d | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"粗略查看)来观察整体结构。

/opt/vpe/ ├── README.md (或 README.txt) # 最重要的文件,但经常被忽略 ├── LICENSE ├── bin/ # 可执行脚本目录 │ ├── deploy.sh # 主部署脚本 │ ├── cleanup.sh # 清理脚本 │ └── utils/ # 工具脚本 ├── conf/ # 配置目录 │ ├── global.yaml # 全局配置 │ ├── network/ # 网络配置 │ │ ├── mgmt-net.json │ │ └──># 全局配置 project_name: "my_vpe_env" cluster_id: "vpe-001" # 虚拟化后端类型:kvm, virtualbox, docker virtualization_backend: "kvm" # 网络配置 networks: management: cidr: "192.168.100.0/24" gateway: "192.168.100.1" dhcp_start: "192.168.100.100" dhcp_end: "192.168.100.200" data: cidr: "10.10.0.0/16" vlan_id: 100 # 可选 # 存储配置 storage: type: "local" # local, nfs, ceph path: "/var/lib/vpe/images" # 本地路径或NFS挂载点 pool_name: "vpe_pool" # libvirt存储池名称 # 节点定义(引用 conf/nodes/ 下的文件) nodes: - "node1" - "node2"

关键修改点:

  1. 网络CIDR192.168.100.0/2410.10.0.0/16必须与你的现有物理网络不冲突。如果冲突,需要整体修改。
  2. 存储路径/var/lib/vpe/images需要有足够的磁盘空间和正确的读写权限。如果使用NFS,需要确保先挂载成功。
  3. 虚拟化后端:确认你的宿主机支持kvm。可以通过egrep -c '(vmx|svm)' /proc/cpuinfo检查CPU虚拟化支持,并通过lsmod | grep kvm检查内核模块。如果不支持,可能需要改为docker后端(如果包支持),或者更换宿主机。

3.3 部署脚本逻辑分析

打开bin/deploy.sh,不要直接运行,先看看它做了什么。

#!/bin/bash # 这是一个简化的示例逻辑 set -e # 遇到错误即退出,这是个好习惯 CONFIG_FILE=${1:-"../conf/global.yaml"} # 读取配置文件参数 # 1. 解析配置 PROJECT_NAME=$(yq eval '.project_name' $CONFIG_FILE) BACKEND=$(yq eval '.virtualization_backend' $CONFIG_FILE) # 2. 检查依赖 check_dependencies() { case $BACKEND in "kvm") command -v virsh >/dev/null 2>&1 || { echo "请安装 libvirt-client (virsh)"; exit 1; } command -v qemu-img >/dev/null 2>&1 || { echo "请安装 qemu-utils"; exit 1; } ;; "docker") command -v docker >/dev/null 2>&1 || { echo "请安装 Docker"; exit 1; } ;; *) echo "不支持的虚拟化后端: $BACKEND" exit 1 ;; esac } # 3. 准备存储 setup_storage() { local storage_path=$(yq eval '.storage.path' $CONFIG_FILE) if [ ! -d "$storage_path" ]; then sudo mkdir -p "$storage_path" sudo chown $USER:$USER "$storage_path" # 注意权限,有时需要libvirt-qemu用户 fi # 如果是libvirt,可能需要定义存储池 if [ "$BACKEND" = "kvm" ]; then virsh pool-info vpe_pool >/dev/null 2>&1 || { virsh pool-define-as vpe_pool dir - - - - "$storage_path" virsh pool-build vpe_pool virsh pool-start vpe_pool virsh pool-autostart vpe_pool } fi } # 4. 创建虚拟网络 setup_networks() { # 基于 conf/network/ 下的JSON文件创建 for net_conf in conf/network/*.json; do local net_name=$(jq -r '.name' $net_conf) if [ "$BACKEND" = "kvm" ]; then virsh net-info $net_name >/dev/null 2>&1 || { virsh net-define $net_conf virsh net-start $net_name virsh net-autostart $net_name } fi # Docker 后端会创建对应的 bridge done } # 5. 创建并启动节点 setup_nodes() { for node in $(yq eval '.nodes[]' $CONFIG_FILE); do local node_conf="conf/nodes/${node}.xml" if [ "$BACKEND" = "kvm" ]; then # 定义虚拟机 virsh define $node_conf # 可能需要从 images/ 复制镜像到存储池 local base_image=$(xmllint --xpath 'string(/domain/devices/disk/source/@file)' $node_conf) if [[ $base_image == *"images/"* ]]; then cp -n "images/$(basename $base_image)" "$(yq eval '.storage.path' $CONFIG_FILE)/" fi virsh start $node fi done } # 主流程 main() { echo "开始部署 VPE 项目: $PROJECT_NAME" check_dependencies setup_storage setup_networks setup_nodes echo "部署完成!请检查各节点状态。" # 可能还会输出访问IP等信息 } main

脚本分析要点:

  1. 依赖检查:脚本明确指出了需要哪些命令行工具。如果缺失,你需要手动安装(如sudo apt install libvirt-clients qemu-utils jq yq)。
  2. 权限问题:脚本中使用了sudo创建目录,但后续的virsh命令可能需要当前用户是libvirt组的成员(sudo usermod -aG libvirt $USER,然后需要重新登录生效)。
  3. 资源冲突:脚本使用virsh net-infopool-info来检查资源是否已存在,避免重复定义。但如果之前部署失败残留了资源,这个检查可能不充分,需要手动清理。
  4. 镜像复制:注意cp -n(不覆盖)复制镜像。如果镜像很大,这个过程会很耗时。确保目标存储路径有足够空间。

4. 部署实操与核心环节实现

理解了结构,我们就可以开始尝试部署了。但请记住,永远不要在关键的生产环境或没有快照的机器上直接运行未知脚本。最好先在一个干净的虚拟机或隔离的测试环境中进行。

4.1 环境预检与准备

在运行./deploy.sh之前,手动执行一遍检查:

  1. 系统更新与基础包

    sudo apt update && sudo apt upgrade -y # 对于Debian/Ubuntu sudo yum update -y # 对于RHEL/CentOS
  2. 安装明确依赖

    # 示例:Ubuntu/Debian sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager sudo apt install -y jq # 用于解析JSON sudo snap install yq # 或从GitHub安装yq用于解析YAML # 安装 pip 并安装 python 版本的 yq (如果 snap 版有问题) # sudo apt install -y python3-pip && pip3 install yq
  3. 启用并启动服务

    sudo systemctl enable --now libvirtd
  4. 用户组权限

    sudo usermod -aG libvirt $USER sudo usermod -aG kvm $USER

    重要:执行此命令后,必须注销并重新登录,或者开启一个新的终端会话,组权限才会生效。你可以用groups命令检查是否成功加入。

  5. 检查虚拟化支持

    egrep -c '(vmx|svm)' /proc/cpuinfo # 输出大于0即可 lsmod | grep kvm # 应该看到 kvm_intel 或 kvm_amd 模块

4.2 配置适配与修改

根据你的测试环境,修改配置文件:

  1. 修改网络CIDR:在conf/global.yaml中,将networks.management.cidr改为一个肯定不会冲突的网段,比如192.168.77.0/24。同时修改对应的网关和DHCP范围。
  2. 确认存储路径:确保storage.path指向的路径存在且有足够权限。可以提前创建:sudo mkdir -p /var/lib/vpe/images && sudo chown -R $USER:$USER /var/lib/vpe
  3. 检查节点配置:打开conf/nodes/node1.xml,检查里面的资源分配(CPU、内存)是否超出你测试机的负载。特别是磁盘镜像路径source file='...',确保它指向images/目录下的正确文件,或者脚本能正确复制。

4.3 执行部署与监控

  1. 首次运行,使用“干跑”模式:很多脚本支持--dry-run-n参数,可以打印出将要执行的命令而不实际执行。如果没有,你可以临时在脚本开头set -n或者在关键命令前加上echo来预览。

    cd /opt/vpe/bin bash -n deploy.sh # 检查语法错误 # 或者,在脚本中主要命令前加 echo 预览
  2. 分步执行:如果脚本是模块化的,可以尝试注释掉main函数调用,然后手动依次调用check_dependencies,setup_storage等函数,观察每一步的输出。

  3. 正式运行

    ./deploy.sh ../conf/global.yaml

    运行过程中,打开另一个终端,实时监控:

    # 监控 libvirt 事件 sudo tail -f /var/log/libvirt/libvirtd.log # 查看虚拟机创建状态 watch -n 1 'virsh list --all' # 查看网络状态 virsh net-list --all
  4. 验证部署结果

    • 使用virsh list查看虚拟机是否处于“运行中”状态。
    • 使用virsh net-dhcp-leases <network_name>查看虚拟机是否获取到了IP地址。
    • 尝试使用virsh console <vm_name>(可能需要先在虚拟机内配置ttyS0 console)或通过获取的IP进行SSH连接。

5. 常见问题与排查技巧实录

在实际操作中,几乎不可能一帆风顺。下面是我在多次部署类似VPE环境时遇到的典型问题及解决方法。

5.1 依赖与权限问题

问题1:脚本执行报错command not found: yq

  • 排查:说明解析YAML的工具yq没安装。脚本可能依赖yq的特定版本(v4 和 v3 语法不兼容)。
  • 解决
    # 确认安装的是 yq 版本4(推荐) sudo wget https://github.com/mikefarah/yq/releases/download/v4.34.1/yq_linux_amd64 -O /usr/local/bin/yq sudo chmod +x /usr/local/bin/yq yq --version # 应显示 4.x.x
    如果脚本用的是老语法(如yq r global.yaml project_name),那是yq版本2,需要安装旧版或调整脚本。

问题2:virsh命令执行失败,提示权限被拒绝

  • 排查:当前用户不在libvirt组,或者没有对/var/run/libvirt/libvirt-sock的读写权限。
  • 解决
    1. 确认组已添加并已重新登录:groups | grep libvirt
    2. 检查libvirt服务socket权限:ls -l /var/run/libvirt/libvirt-sock。有时需要调整策略。可以尝试:
      sudo systemctl restart libvirtd
    3. 对于非root用户使用virsh,确保使用了正确的连接URI。可以尝试明确指定:
      virsh -c qemu:///system list --all

5.2 网络与存储创建失败

问题3:虚拟网络创建失败,提示“网络已存在”或“地址冲突”

  • 排查:可能是之前失败的部署残留了同名网络。
  • 解决
    # 列出所有网络 virsh net-list --all # 销毁并删除冲突的网络(谨慎操作!) virsh net-destroy <network_name> virsh net-undefine <network_name> # 然后重新运行部署脚本的网络部分,或直接使用脚本中的定义文件重新定义 virsh net-define conf/network/mgmt-net.json virsh net-start <network_name>

问题4:存储池创建失败,路径权限不足

  • 排查/var/lib/vpe/images目录的所有者或组可能是root,而libvirt守护进程(以libvirt-qemu用户运行)无法写入。
  • 解决
    # 将存储目录的组改为libvirt-qemu,并赋予组权限 sudo chown -R :libvirt-qemu /var/lib/vpe/images sudo chmod -R g+rwx /var/lib/vpe/images # 或者,更简单的方式,在脚本中将路径设置为所有用户可读写(仅限测试环境) sudo chmod -R 777 /var/lib/vpe/images

5.3 虚拟机启动失败

问题5:虚拟机定义成功,但启动失败,提示“无法打开磁盘镜像”

  • 排查:这是最常见的问题之一。node1.xml中指定的磁盘镜像路径source file='/opt/vpe/images/base-os.qcow2'可能不存在,或者权限不对,或者格式不被识别。
  • 解决
    1. 确认路径:检查镜像文件是否真的在指定位置。脚本中的复制逻辑(cp -n)可能因为文件已存在而跳过,但那个文件可能是损坏的。
    2. 检查镜像格式:使用qemu-img info /opt/vpe/images/base-os.qcow2检查镜像信息。确保它是qcow2格式,而不是rawvmdk。如果是其他格式,可能需要转换:
      qemu-img convert -f vmdk -O qcow2 source.vmdk /var/lib/vpe/images/base-os.qcow2
    3. 修正XML路径:Libvirt更倾向于使用存储池内的路径。最佳实践是将镜像复制到存储池路径(如/var/lib/vpe/images)后,修改XML中的source file为存储池内的相对或绝对路径,例如source file='/var/lib/vpe/images/base-os.qcow2'

问题6:虚拟机启动后无法获取IP地址

  • 排查
    1. 检查虚拟网络是否启动并激活:virsh net-info mgmt-net
    2. 进入虚拟机控制台(virsh console node1,需虚拟机内核支持),检查网卡是否识别(ip link),以及DHCP客户端是否运行。
    3. 查看虚拟网络的DHCP租约:virsh net-dhcp-leases mgmt-net
  • 解决
    1. 确保虚拟机网卡的MAC地址在XML配置中,且网络定义中开启了DHCP。
    2. 在虚拟机内部,手动尝试获取IP:dhclient -v eth0(或对应的网卡名)。
    3. 检查虚拟网络的防火墙设置,是否阻止了DHCP请求(对于Linux bridge,检查iptablesnftables规则)。

5.4 性能与资源问题

问题7:虚拟机运行极其缓慢

  • 排查
    1. CPU/内存超分:使用tophtop查看宿主机资源使用率。检查是否所有虚拟机的CPU内核总数超过了物理核心数,内存总和超过了物理内存。
    2. 磁盘I/O瓶颈:如果所有虚拟机共享一个机械硬盘,I/O会成为瓶颈。使用iostat -x 1观察%utilawait
    3. 没有启用KVM硬件加速:确认虚拟机XML配置中使用了kvm加速器(<domain type='kvm'>),而不是qemu
  • 解决
    1. 调整虚拟机的资源配置,减少超分比例。
    2. 将镜像文件放在SSD上。
    3. 确保XML中使用了正确的加速器。

问题8:宿主机在部署后网络异常

  • 排查:VPE脚本可能会创建网桥(br0),并修改宿主机的网络配置(如将物理网卡eth0加入桥接)。这可能会中断你当前的SSH连接。
  • 解决(预防)
    1. 在测试环境中,使用带外管理(如云服务商的控制台、IPMI、物理机的显示器和键盘)进行操作。
    2. 如果脚本会修改主网络接口,可以先在虚拟机内测试,或者确保你有备用网络连接(如Wi-Fi)。
    3. 仔细审查网络配置脚本,理解它将对宿主机网络做出哪些改变。

6. 进阶:从部署到定制与扩展

成功部署只是第一步。要让这个VPE环境真正为你所用,还需要学会定制和扩展。

6.1 自定义节点配置

你可能需要修改conf/nodes/node1.xml来调整虚拟机的规格:

  • CPU和内存:修改<vcpu><memory>标签。
  • 磁盘大小qcow2格式磁盘可以动态扩容,无需修改镜像本身。
    qemu-img resize /var/lib/vpe/images/base-os.qcow2 +20G
    然后,需要进入虚拟机操作系统内,使用fdisk,parted,resize2fs等工具扩展分区和文件系统。
  • 添加新磁盘:在XML文件的<devices>部分添加一个新的<disk>段落。
  • 网络接口:可以添加多个网卡,连接到不同的虚拟网络。

6.2 集成外部服务

原始的VPE包可能只提供了基础环境。你可以:

  • 配置负载均衡:在宿主机上安装haproxynginx,将流量代理到VPE内部的多个虚拟机。
  • 设置外部访问:通过配置libvirt网络的端口转发(使用iptablesfirewalld),将宿主机的某个端口映射到虚拟机的SSH或Web服务端口。
    # 示例:将宿主机的2222端口转发到虚拟机192.168.77.100的22端口 sudo iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 192.168.77.100:22 sudo iptables -I FORWARD -d 192.168.77.100/32 -p tcp --dport 22 -j ACCEPT
  • 挂载外部存储:修改存储配置,将storage.type改为nfs,并正确配置NFS服务器地址和共享路径。

6.3 版本管理与迭代

当你对这个VPE环境做了成功的定制后,应该将其保存为新版本。

  1. 备份配置:将整个/opt/vpe/conf目录进行备份。
  2. 制作新镜像:以某个运行良好的虚拟机为模板,创建新的基础镜像。
    # 1. 在虚拟机内部清理历史(如bash历史、临时文件) # 2. 关闭虚拟机 virsh shutdown node1 # 3. 压缩磁盘镜像(可选,减少体积) qemu-img convert -O qcow2 -c /var/lib/vpe/images/node1.qcow2 /opt/vpe/images/new-base-os.qcow2
  3. 更新部署包:用新的配置和镜像替换旧的,重新打包成vpe_v2.rar。同时,更新README.md,记录变更点。

处理一个像vpe.rar这样的遗留部署包,就像进行一次考古发掘和技术修复。核心不在于盲目运行脚本,而在于系统地理解其设计意图、解构其实现逻辑,并最终掌控它,使其适应新的土壤。这个过程会极大地提升你对虚拟化底层、自动化运维和系统集成的理解。下次再遇到类似的“黑盒”压缩包,你就能从容不迫地让它重焕新生了。记住,耐心阅读日志、分步验证、做好备份,这三条是应对任何复杂部署任务的黄金法则。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 11:41:33

Grok Build:声明式任务自动化工具,简化开发运维工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/4 11:37:22

niri 配置快速上手:10 分钟配好可平铺可滚动的 Wayland 桌面

niri 配置快速上手&#xff1a;10 分钟配好可平铺可滚动的 Wayland 桌面 【免费下载链接】niri A scrollable-tiling Wayland compositor. 项目地址: https://gitcode.com/GitHub_Trending/ni/niri niri 是一个可滚动平铺的 Wayland 合成器&#xff1a;窗口自动排成竖直…

作者头像 李华
网站建设 2026/9/4 11:37:09

NE555单稳态延时电路:从原理到智能车硬件盲盒实战应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/4 11:35:49

轮胎图像标注工业化SOP:从数据校准到质量闭环

简介&#xff1a;本资源是一套面向计算机视觉初学者与算法工程师的轮胎图像分割训练数据集&#xff0c;专为YOLOv5等PyTorch框架下的目标检测与实例分割任务设计。1003个文件包含500张经人工精细标注的轮胎JPEG图像、502个对应YOLO格式&#xff08;归一化坐标&#xff09;的txt…

作者头像 李华
网站建设 2026/9/4 11:34:06

Pixelle-Video 免费AI短视频生成引擎上手指南

Pixelle-Video 免费AI短视频生成引擎上手指南 【免费下载链接】Pixelle-Video &#x1f680; AI 全自动短视频引擎 | AI Fully Automated Short Video Engine 项目地址: https://gitcode.com/GitHub_Trending/pi/Pixelle-Video 每天要更短视频、但脚本、找图、配音、剪辑…

作者头像 李华