Python+FFmpeg视频自动化打包实战:一键合并转码与元信息处理
最近在整理个人项目时经常需要将多个视频片段打包成一个完整的演示文件方便分享和存档。这个过程看似简单但涉及到格式兼容、画质保持、批量处理等多个环节手动操作不仅效率低下还容易出错。本文将分享一套从零开始的视频自动化打包实战方案使用 Python 和 FFmpeg 为核心工具实现一键式视频合并、转码与元信息处理。无论你是想管理自己的视频素材还是需要在项目中集成视频处理功能这套代码都能直接复用。1. 视频打包的核心概念与工具选型在开始动手之前我们首先要明确“视频打包”的具体含义和所需的技术栈。1.1 什么是视频打包视频打包通常指将多个独立的视频文件片段按照指定的顺序合并成一个单一的视频文件。它不仅仅是简单的文件拼接还可能包括格式统一将不同编码格式如 MP4、MOV、AVI的视频转成目标格式。编码参数统一统一分辨率、帧率、比特率等确保输出视频质量一致。添加元信息为最终视频文件添加标题、作者、封面等元数据。目录归档将源视频和生成文件按规则存放便于管理。1.2 核心工具FFmpegFFmpeg 是一个强大的开源多媒体框架包含了 libavcodec、libavformat 等库能够用于录制、转换以及流化音视频。它是处理视频任务的行业标准工具。优点功能极其强大支持几乎所有格式可通过命令行精细控制每一个处理环节。挑战命令行参数复杂直接使用有一定学习成本。1.3 方案设计Python FFmpeg为了降低使用门槛并实现自动化我们采用 Python 来驱动 FFmpegPython负责“逻辑控制”。包括遍历文件目录、生成 FFmpeg 命令、处理异常、生成日志等。FFmpeg负责“底层执行”。执行具体的视频转码、合并、封装等重体力活。 这种组合既发挥了 FFmpeg 的专业能力又利用了 Python 的易用性和灵活性非常适合构建自动化脚本或集成到更大的应用中。2. 环境准备与项目结构2.1 基础环境安装安装 Python确保系统已安装 Python 3.6 及以上版本。可以从 Python官网 下载。安装 FFmpegWindows从 FFmpeg官网 下载编译好的可执行文件解压后将bin目录添加到系统的环境变量PATH中。macOS使用 Homebrew 安装brew install ffmpegLinux (Ubuntu/Debian)使用 apt 安装sudo apt update sudo apt install ffmpeg安装完成后在终端或命令提示符中输入ffmpeg -version若能显示版本信息则说明安装成功。2.2 创建项目目录建议按以下结构组织你的项目这有助于代码的清晰和可维护性。video_packager/ ├── src/ │ ├── video_packager.py # 主程序 │ └── utils/ │ ├── __init__.py │ ├── file_utils.py # 文件操作工具 │ └── ffmpeg_utils.py # FFmpeg 命令封装 ├── input_videos/ # 存放待处理的原始视频片段 │ ├── clip1.mp4 │ ├── clip2.mov │ └── ... ├── output/ # 存放处理后的视频 ├── temp/ # 存放临时文件如文件列表 ├── requirements.txt # Python 依赖列表 └── README.md # 项目说明2.3 安装 Python 依赖在项目根目录下创建requirements.txt文件内容如下# requirements.txt本例中我们主要使用 Python 标准库但为了更好的日志和路径处理可以添加tqdm进度条作为可选依赖。如果需要可以运行pip install tqdm。3. 核心模块设计与代码实现我们将功能拆分为几个模块逐步实现。3.1 文件工具模块 (file_utils.py)这个模块负责扫描输入目录筛选视频文件并生成供 FFmpeg 使用的文件列表。# file_utils.py import os import glob from typing import List, Tuple class FileUtils: # 常见的视频文件扩展名 VIDEO_EXTENSIONS (.mp4, .mov, .avi, .mkv, .flv, .wmv, .m4v, .webm) staticmethod def find_video_files(input_dir: str) - List[str]: 递归查找指定目录下的所有视频文件。 Args: input_dir: 输入目录路径 Returns: 视频文件绝对路径的列表按文件名排序 video_files [] # 使用 glob 递归匹配 for ext in FileUtils.VIDEO_EXTENSIONS: pattern os.path.join(input_dir, **, f*{ext}) video_files.extend(glob.glob(pattern, recursiveTrue)) # 排序确保合并顺序可控 video_files.sort() return video_files staticmethod def create_file_list_for_ffmpeg(video_files: List[str], list_file_path: str) - str: 生成 FFmpeg concat 协议所需的文件列表。 格式每行 file /path/to/video.mp4 Args: video_files: 视频文件路径列表 list_file_path: 生成的列表文件保存路径 Returns: 列表文件的路径 with open(list_file_path, w, encodingutf-8) as f: for file_path in video_files: # 路径中的反斜杠需要转义或者统一使用正斜杠 escaped_path file_path.replace(\\, /) f.write(ffile {escaped_path}\n) print(f[INFO] 已生成文件列表{list_file_path}) return list_file_path staticmethod def ensure_directory(dir_path: str): 确保目录存在如果不存在则创建。 if not os.path.exists(dir_path): os.makedirs(dir_path) print(f[INFO] 创建目录{dir_path})3.2 FFmpeg 工具模块 (ffmpeg_utils.py)这个模块封装 FFmpeg 的调用处理视频合并和转码。# ffmpeg_utils.py import subprocess import os from typing import Optional class FFmpegUtils: staticmethod def merge_videos_with_concat( file_list_path: str, output_path: str, codec: str copy, extra_args: Optional[List[str]] None ) - bool: 使用 FFmpeg 的 concat 协议合并视频。 使用 -c copy 可以快速无损合并要求视频编码参数一致。 如果需要重新编码统一参数请设置 codec 为 libx264 等。 Args: file_list_path: 包含视频文件列表的文本文件路径 output_path: 输出视频文件路径 codec: 视频编码器copy 表示直接流复制最快 extra_args: 额外的 FFmpeg 参数列表 Returns: 成功返回 True失败返回 False # 基础命令 cmd [ ffmpeg, -f, concat, # 指定 concat 分离器 -safe, 0, # 允许绝对路径或特殊字符 -i, file_list_path, # 输入是文件列表 -c, codec, # 编码方式 ] # 添加额外参数如分辨率、帧率、比特率等 if extra_args: cmd.extend(extra_args) # 添加输出路径 cmd.append(output_path) print(f[EXEC] 执行命令{ .join(cmd)}) try: # 运行命令捕获输出和错误 result subprocess.run( cmd, capture_outputTrue, textTrue, checkTrue # 如果返回码非零则抛出 CalledProcessError ) print(f[SUCCESS] 视频合并成功{output_path}) if result.stderr: print(f[FFmpeg Info] {result.stderr[:500]}...) # 打印部分信息 return True except subprocess.CalledProcessError as e: print(f[ERROR] 视频合并失败返回码{e.returncode}) print(f[ERROR] 错误输出{e.stderr}) return False except FileNotFoundError: print([ERROR] 未找到 ffmpeg 命令请确保 FFmpeg 已安装并添加到系统 PATH。) return False staticmethod def get_video_info(file_path: str) - Optional[dict]: 使用 ffprobe 获取视频的基本信息如时长、分辨率、编码格式。 用于高级功能如检查视频参数是否一致。 cmd [ ffprobe, -v, error, -select_streams, v:0, -show_entries, streamcodec_name,width,height,duration,r_frame_rate, -of, defaultnoprint_wrappers1:nokey1, file_path ] try: output subprocess.check_output(cmd, textTrue).strip().split(\n) info { codec: output[0], width: int(output[1]), height: int(output[2]), duration: float(output[3]), framerate: eval(output[4]) # 例如 30/1 - 30.0 } return info except Exception as e: print(f[WARN] 无法获取视频信息 {file_path}: {e}) return None3.3 主程序 (video_packager.py)主程序负责协调各个模块提供用户接口这里使用命令行参数。# video_packager.py import argparse import sys import os from datetime import datetime from src.utils.file_utils import FileUtils from src.utils.ffmpeg_utils import FFmpegUtils def main(): parser argparse.ArgumentParser(description视频自动打包工具) parser.add_argument(-i, --input, requiredTrue, help输入视频所在的目录路径) parser.add_argument(-o, --output, default./output, help输出目录路径 (默认: ./output)) parser.add_argument(-n, --name, defaultmerged_video, help输出视频文件名 (不含扩展名默认: merged_video)) parser.add_argument(-f, --format, defaultmp4, choices[mp4, mov, mkv], help输出视频格式 (默认: mp4)) parser.add_argument(--codec, defaultcopy, help视频编码器默认为 copy (无损快速合并)。如需转码可设为 libx264) parser.add_argument(--reencode, actionstore_true, help强制重新编码视频以统一参数较慢) args parser.parse_args() # 1. 路径处理与检查 input_dir os.path.abspath(args.input) output_dir os.path.abspath(args.output) FileUtils.ensure_directory(output_dir) if not os.path.isdir(input_dir): print(f[ERROR] 输入路径不存在或不是一个目录{input_dir}) sys.exit(1) # 2. 查找视频文件 print(f[INFO] 正在扫描目录{input_dir}) video_files FileUtils.find_video_files(input_dir) if not video_files: print([ERROR] 未在输入目录中找到任何视频文件。支持格式, , .join(FileUtils.VIDEO_EXTENSIONS)) sys.exit(1) print(f[INFO] 找到 {len(video_files)} 个视频文件) for idx, f in enumerate(video_files, 1): print(f {idx:2d}. {os.path.basename(f)}) # 3. 生成临时文件列表 temp_dir ./temp FileUtils.ensure_directory(temp_dir) timestamp datetime.now().strftime(%Y%m%d_%H%M%S) list_file_name ffilelist_{timestamp}.txt list_file_path os.path.join(temp_dir, list_file_name) FileUtils.create_file_list_for_ffmpeg(video_files, list_file_path) # 4. 准备输出文件路径和 FFmpeg 参数 output_filename f{args.name}.{args.format} output_path os.path.join(output_dir, output_filename) extra_args [] if args.reencode or args.codec ! copy: # 如果选择重新编码或指定了非 copy 的编码器可以在这里添加统一参数 # 例如统一为 H.264 编码CRF 23质量因子预设为 medium if args.codec libx264: extra_args [-preset, medium, -crf, 23] # 注意直接流复制copy时添加这些参数会导致错误。 # 5. 调用 FFmpeg 合并视频 print(f[INFO] 开始合并视频输出格式{args.format}, 编码{args.codec}) success FFmpegUtils.merge_videos_with_concat( file_list_pathlist_file_path, output_pathoutput_path, codecargs.codec, extra_argsextra_args ) # 6. 清理与结果报告 if success: # 可选删除临时文件列表 # os.remove(list_file_path) # print(f[INFO] 已清理临时文件{list_file_path}) print(f\n 视频打包完成) print(f 输出文件{output_path}) print(f 文件大小{os.path.getsize(output_path) / (1024*1024):.2f} MB) else: print(\n❌ 视频打包失败请检查上述错误信息。) sys.exit(1) if __name__ __main__: main()4. 完整实战运行与测试4.1 准备测试视频将几个不同格式、时长的视频片段如clip1.mp4,clip2.mov放入项目根目录的input_videos/文件夹中。4.2 运行打包脚本打开终端或命令提示符进入项目根目录执行以下命令# 基本用法快速无损合并要求视频编码参数一致 python src/video_packager.py -i ./input_videos -o ./output -n my_final_video # 指定输出格式为 MOV python src/video_packager.py -i ./input_videos -o ./output -n my_final_video -f mov # 强制重新编码为 H.264统一参数速度慢但兼容性最好 python src/video_packager.py -i ./input_videos -o ./output --codec libx264 --reencode4.3 查看运行结果脚本运行时会打印详细的日志扫描到的视频文件列表。生成的临时文件列表路径。执行的 FFmpeg 完整命令。处理进度FFmpeg 会输出进度信息。最终的成功状态和输出文件路径。处理完成后你可以在./output目录下找到合并好的视频文件。5. 常见问题与排查思路在实际使用中你可能会遇到以下问题问题现象可能原因解决思路报错Unsafe file name文件列表中的路径包含特殊字符或为绝对路径但未使用-safe 0参数。我们的代码已添加-safe 0参数确保兼容。检查生成的.txt列表文件格式是否正确。报错Invalid data found when processing input1. 文件列表格式错误。2. 视频文件本身已损坏。3. 视频编码格式不被 FFmpeg 支持。1. 检查file path格式路径是否用单引号括起是否换行。2. 用播放器单独打开问题视频测试。3. 尝试先用ffmpeg -i problem.mp4 -c copy test.mp4转码一次。合并后的视频只有声音没有画面或只有第一部分待合并的视频流参数编码、分辨率、帧率不一致-c copy模式无法处理。方案1推荐使用--reencode参数强制统一转码。方案2先用 FFmpeg 将所有视频预处理为相同参数再用-c copy合并。合并速度非常慢使用了--reencode或指定了非copy的编码器FFmpeg 在进行全视频编码。如果视频参数一致优先使用-c copy。必须转码时可调整-preset如fast更快但文件更大slow更小但更慢。找不到ffmpeg命令FFmpeg 未安装或未正确添加到系统环境变量PATH。在命令行输入ffmpeg -version测试。重新安装 FFmpeg 并确保其bin目录在PATH中。输出文件异常大或异常小编码参数如 CRF、比特率设置不合理。-c copy时大小是源文件之和。转码时使用-crf参数控制质量18-28值越小质量越高文件越大。通用排查步骤单独测试FFmpeg命令将脚本打印出的 FFmpeg 命令复制到命令行中手动执行观察更详细的错误输出。检查单个视频用ffprobe -i your_video.mp4检查有问题的视频文件信息。简化测试先用两个已知良好的、参数相同的 MP4 文件测试合并功能是否正常。6. 最佳实践与进阶优化掌握了基础功能后可以参考以下建议提升脚本的健壮性和实用性。6.1 工程化建议配置文件将输出格式、默认编码器、临时文件目录等配置项提取到 JSON 或 YAML 配置文件中避免硬编码。日志系统使用 Python 的logging模块替代print支持不同日志级别DEBUG, INFO, ERROR并输出到文件方便后期排查。异常恢复实现更精细的异常捕获。例如某个视频文件损坏时可以跳过它并记录日志而不是让整个任务失败。进度反馈对于长时间的重编码任务可以解析 FFmpeg 的输出行来估算和显示进度条可使用tqdm库。6.2 功能增强方向添加片头片尾可以在文件列表的首尾插入固定的片头、片尾视频路径。添加转场效果FFmpeg 的filter_complex可以实现简单的淡入淡出等转场但命令会非常复杂。可以考虑分两步先合并再对连接处添加滤镜。并行处理如果需要先对每个视频进行转码预处理可以利用 Python 的concurrent.futures库进行并行处理大幅提升效率。图形界面 (GUI)使用tkinter或PyQt为脚本包装一个简单的图形界面方便非技术人员使用。集成到工作流将脚本作为 CI/CD 流水线或自动化运维工具的一环自动处理指定目录下新增的视频。6.3 生产环境注意事项资源监控视频编码是 CPU 密集型任务。在生产服务器上运行大量任务时需要监控 CPU 和内存使用情况避免影响其他服务。输出验证合并完成后可以自动调用ffprobe检查输出视频的时长是否与源视频总和大体一致作为一个简单的完整性校验。清理策略定期清理temp/目录下的临时文件列表避免磁盘空间被占满。可以设置保留最近 N 天的文件。权限管理确保运行脚本的用户对输入目录有读权限对输出和临时目录有写权限。通过本文的步骤你不仅得到了一个可用的视频打包工具更重要的是理解了利用 Python 编排 FFmpeg 完成多媒体任务的通用模式。这个模式可以扩展到音频提取、视频截图、格式批量转换等众多场景。

相关新闻

AI角色扮演应用部署指南:从环境配置到API集成全流程

AI角色扮演应用部署指南:从环境配置到API集成全流程

这次我们来看一个很有意思的AI角色扮演项目。它不是一个新模型,而是一个基于现有大语言模型(如DeepSeek、GPT系列)构建的、具有特定人设和交互风格的“角色”应用。简单说,就是给AI套上一个“小女仆”或“小龙女”的壳&#xff0c…

2026/8/16 3:46:49 阅读更多 →
短视频去水印工具“水印鸭”使用指南:解析下载与合规实践

短视频去水印工具“水印鸭”使用指南:解析下载与合规实践

这次我们来看一个名为“水印鸭”的短视频去水印解析下载工具。它是一款由开发者发布的软件,核心功能是解析并下载抖音、快手、小红书等主流短视频平台的无水印视频。对于需要收集素材、进行二次创作或单纯想保存高清原片的用户来说,这类工具能直接解决“…

2026/8/17 2:48:18 阅读更多 →
具身智能数据基建:从多模态采集到闭环迭代的工程实践

具身智能数据基建:从多模态采集到闭环迭代的工程实践

上周和一位做机器人感知的朋友聊天,他提到一个很有意思的观察:过去半年,他们团队最大的变化不是算法模型又刷了几个点,而是办公室里多了好几台形态各异的机器人,每天“吭哧吭哧”地跑,唯一的目的就是“看”…

2026/8/15 16:28:37 阅读更多 →

最新新闻

免费离线!SugarTrack安卓血糖日志应用,保护隐私还能便捷记录

免费离线!SugarTrack安卓血糖日志应用,保护隐私还能便捷记录

免费离线:血糖记录新选择SugarTrack是一款免费的安卓血糖日志应用,无需账号、无需联网即可使用,所有数据都存储在手机上。这一特性让用户无需担心云服务费用和网络连接问题,随时随地都能记录血糖数据。隐私至上:本地存…

2026/8/17 3:04:04 阅读更多 →
SAP灵活工作流场景模板实战:从零配置采购申请分级审批

SAP灵活工作流场景模板实战:从零配置采购申请分级审批

1. 项目概述:为什么我们需要“灵活工作流场景模板”在SAP的日常运维和项目实施中,审批流是绕不开的核心环节。无论是采购订单的创建、财务凭证的过账,还是人事变动的申请,背后都有一套或多套工作流在默默运转。传统的SAP工作流&am…

2026/8/17 3:04:04 阅读更多 →
Firefox插件大全:从管理到精选,打造高效安全浏览器

Firefox插件大全:从管理到精选,打造高效安全浏览器

1. 项目概述:为什么我们需要一份“插件大全”? 作为一名和浏览器打了十几年交道的“老网虫”,我几乎见证了Firefox从一只小众的“火狐”成长为与Chrome分庭抗礼的“桌面利器”的全过程。时至今日,我依然将Firefox作为我的主力浏览…

2026/8/17 3:04:04 阅读更多 →
Linux文件批量重命名实战技巧与工具指南

Linux文件批量重命名实战技巧与工具指南

1. Linux文件名批量修改的核心场景与痛点在Linux系统日常管理中,文件批量重命名是每个运维人员和开发者都会遇到的高频需求。我处理过大量服务器日志归档、照片整理和代码重构的项目,最典型的情况包括:数百个日志文件需要按日期格式统一重命名…

2026/8/17 3:04:04 阅读更多 →
我做了一款软考 AI 笔记客户端:本地记笔记、论文计字,写完还能让 AI 评分润色

我做了一款软考 AI 笔记客户端:本地记笔记、论文计字,写完还能让 AI 评分润色

备考软考这几年,我最烦两件事: 一是知识点散落在各种文档、云笔记、截图里,换台电脑就找不到; 二是下午论文,摘要卡 300 字、正文卡 2000~2500 字,Word 里数格子既不准又折磨人。写完还得自己对…

2026/8/17 3:04:04 阅读更多 →
工业车间流水线上糖袋计数检测数据集VOC+YOLO格式12943张1类别

工业车间流水线上糖袋计数检测数据集VOC+YOLO格式12943张1类别

注意图片视频抽帧形成图片具体看图片数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):12943标注数量(xml文件个数):12943标注数量(…

2026/8/17 3:03:04 阅读更多 →

日新闻

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必修课? 如果你用LabVIEW做过稍微复杂点的项目,尤其是涉及界面响应、多任务并行或者硬件IO等待的场景,大概率遇到过这样的窘境:前面板点个按钮,整个程序就“卡死…

2026/8/17 0:00:08 阅读更多 →
LabVIEW异步调用实战:解决界面卡顿与并行处理难题

LabVIEW异步调用实战:解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必经之路如果你在LabVIEW里写过稍微复杂点的程序,尤其是涉及到界面响应、多任务并行或者硬件IO等待,大概率会遇到一个头疼的问题:程序“卡”住了。前面板点不动,进度条不更新…

2026/8/17 0:00:08 阅读更多 →
飞书局域网文件传输实战:3种方案实现高速点对点传输

飞书局域网文件传输实战:3种方案实现高速点对点传输

1. 项目概述:为什么要在局域网内用飞书传文件? 飞书作为一款主流的协同办公套件,其核心功能是围绕云端协作设计的。无论是文档、表格还是文件,通常的分享逻辑都是“上传到云端 -> 生成链接 -> 分享给同事”。这个流程在互联…

2026/8/17 0:00:08 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/17 2:58:27 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/17 2:58:30 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/17 2:58:32 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →