人工智能AI 应用大模型计算机视觉语音本地部署视频处理【免费下载链接】video-analyzerAnalyze videos using LLMs, Computer Vision and Automatic Speech Recognition项目地址https://gitcode.com/gh_mirrors/vi/video-analyzer点击查看免费下载本文以video-analyzer-ui子包为对象讲清这个为video-analyzer命令行工具配套的轻量 Web 界面如何安装启动、表单字段如何一一映射为 CLI 参数、上传/分析/结果/清理四条 API 背后的会话机制以及基于 Server-Sent EventsSSE的实时输出流是如何实现的。读完你可以独立部署并运行该界面并能结合源码理解它上传视频 → 拼装命令 → 流式回显 → 下载 JSON 结果的完整调用链。一、video-analyzer-ui 是什么功能定位与安装video-analyzer-ui是 video-analyzer 项目的 Web 界面层按 README 的定义它的功能包括简洁直观的交互式分析界面实时命令输出流式回显Real-time command output streaming拖拽式视频上传结果可视化与下载会话Session管理与清理。它本身不做任何音视频或模型推理而是一个薄封装服务端把浏览器表单参数翻译成video-analyzerCLI 命令用子进程执行再把 stdout 逐行推回浏览器。这种UI 即 CLI 包装器的架构让命令行用户和浏览器用户可以共享同一套分析逻辑。1.1 前置条件Python 3.8 或更高pyproject.toml 中声明requires-python 3.8注意主项目 readme 对本地运行视觉模型的完整环境建议 Python 3.11实际部署建议从主项目的要求已安装video-analyzer包已安装 FFmpegvideo-analyzer 的音频处理依赖。依赖声明见 requirements.txtflask3.0.0、video-analyzer0.1.0、werkzeug3.0.0。1.2 安装方式按 README 给出的方式是pip install video-analyzer-ui如果手头是本项目源码则进入子目录做可编辑安装对应 README 的 Development Setup 流程仅把远程克隆替换为本地目录cd video-analyzer-ui python -m venv venv source venv/bin/activate # Windows 下为 venv\Scripts\activate pip install -e .打包时 MANIFEST.in 会把templates与static目录一并打入分发包保证 Flask 模板和前端静态资源随包分发。1.3 快速开始video-analyzer-ui # 浏览器打开 http://localhost:5000video-analyzer-ui这个可执行入口由 pyproject.toml 中的[project.scripts]注册指向video_analyzer_ui.server:main。服务端启动时会先做一项自检见下文确认video-analyzer命令可用后才真正起服务。二、启动参数与运行模式README 给出的命令行选项如下与 server.py 中main()的 argparse 定义对照选项说明默认值--dev启用开发模式关闭--host绑定地址localhost--port监听端口5000--log-file日志文件路径仅输出到控制台两种典型运行模式# 开发模式代码改动自动重载、DEBUG 级日志、开发错误页 video-analyzer-ui --dev # 生产模式绑定到 0.0.0.0 对外提供服务 video-analyzer-ui --host 0.0.0.0 --port 5000从源码看两种模式的差异体现在两处server.py日志级别--dev时logging级别为DEBUG否则为INFO日志格式统一为%(asctime)s - %(levelname)s - %(message)s指定--log-file时落到文件Flask 调试开关VideoAnalyzerUI.run()将debugself.dev_mode传给app.run()server.py 第 255–260 行即只有--dev才开启自动重载与交互式错误页。另外两个值得注意的启动行为前置检查main()在起服务前会执行video-analyzer --helpserver.py 第 281–288 行若命令不存在则打印video-analyzer command not found. Please install video-analyzer package.并以退出码 1 终止——这解释了为什么必须先装主包临时目录初始化VideoAnalyzerUI.__init__会在系统临时目录下创建video-analyzer-ui/uploads与video-analyzer-ui/results两级根目录server.py 第 25–29 行Path(tempfile.gettempdir()) / video-analyzer-ui后续每个会话再在其下按会话 ID 建子目录。事实核对提示README 的选项列表中列出了--config自定义配置文件路径但当前 server.py 的 argparse 只实现了--host、--port、--dev、--log-file四项从源码结构看 README 文档略超前于代码实际以--help输出为准。三、核心工作流上传、配置、分析、看结果README 的 How It Works 描述了四步流程下面结合前后端源码逐步拆解。3.1 第一步上传视频创建会话前端main.js把文件以FormData字段名videoPOST 到/upload。拖拽区同时做前端格式校验.mp4/.avi/.mov/.mkv服务端在/upload路由中做同样的白名单校验server.py 第 47 行不合法直接返回 400Invalid file type。服务端处理逻辑生成uuid.uuid4()作为session_id在uploads/session_id/与results/session_id/下分别建目录用 werkzeug 的secure_filename规范化文件名后落盘把{video_path, results_dir, filename}记入内存字典self.sessions返回session_id。后续所有 API 都凭这个session_id定位会话这就是 README 所说文件暂存在会话专属目录session-specific directory的实现。3.2 第二步配置分析参数实时命令预览上传成功后前端隐藏拖拽区、展示配置表单index.html。表单字段如下括号内为字段名它会被原样作为 CLI 选项名使用表单项字段名说明与默认Client 下拉clientollama本地或openai_api默认 ollamaOllama URL 输入框ollama-url表单默认http://localhost:11434仅 ollama 模式显示API Key 输入框api-key仅 openai_api 模式显示带*必填标记API URL 输入框api-url仅 openai_api 模式显示带*必填标记Vision Model 输入框model占位提示llama3.2-visionDuration 数字框duration分析时长秒min1Max Frames 数字框max-framesmin1Whisper Model 下拉whisper-modeltiny / base / small /medium默认选中/ largeLanguage 输入框language留空即自动检测占位提示 Auto-detectDevice 下拉devicecpu默认/cuda/mpsAnalysis Prompt 文本域prompt想向视频提的问题Keep Extracted Frames 复选框keep-frames布尔开关无值注意表单中*标记的字段api-key、api-url对应 README 中必填字段带 * 标记可选参数可留空的说明。选openai_api客户端时这两个字段是必填的——这一点与主项目 config.py 中get_client的校验一致api_key、api_url缺失会抛ValueError。表单下方有一个Command Preview区域每次输入变化都会触发 main.js 的updateCommandPreview()按video-analyzer video_path --字段名 值的规则拼出将要执行的命令实时显示实现 README 所说的实时命令预览。其中keep-frames作为无值 flag 处理与后端拼装规则保持一致。3.3 第三步运行分析SSE 流式回显点击 Start Analysis 后前端分两阶段请求main.jsPOST/analyze/session_id带表单数据服务端拼装命令并暂存到会话返回Analysis started此时还没真正执行GET/analyze/session_id/stream前端用new EventSource(...)建立 SSE 长连接服务端才真正用subprocess.Popen起子进程。/analyze的命令拼装是理解整个 UI 的关键server.pycmd [video-analyzer, session[video_path]] for param, value in request.form.items(): if value: # 只添加有值的参数 if param in [keep-frames, dev]: # 无值 flag cmd.append(f--{param}) else: cmd.extend([f--{param}, value]) cmd.extend([--output, str(results_dir)]) # 强制输出到会话结果目录也就是说表单字段名直接就是 CLI 选项名ollama-url→--ollama-url、whisper-model→--whisper-model……这与主项目 cli.py 中 argparse 定义的选项一一对应包括--client、--ollama-url、--api-key、--api-url、--model、--duration、--max-frames、--whisper-model、--language、--device、--prompt、--keep-frames。这些参数在 CLI 内部通过Config.update_from_args覆盖默认配置config.py例如--whisper-model写入audio.whisper_model、--model写入当前客户端的model字段与 default_config.json 的结构完全对齐。从源码结构看[keep-frames, dev]都被当作无值 flag 处理但表单里没有dev字段实际能触发的只有keep-frames。流式输出端server.pyprocess subprocess.Popen( session[cmd], stdoutsubprocess.PIPE, stderrsubprocess.STDOUT, # 错误流并入标准流一并回显 universal_newlinesTrue, bufsize1 # 行缓冲逐行读取 ) for line in process.stdout: line line.strip() if line: yield fdata: {line}\n\n # SSE 帧格式响应以text/event-stream返回并带Cache-Control: no-cache、Connection: keep-alive头。进程结束后按退出码追发一行Analysis completed successfully或Analysis failed with code N。前端收到每一帧就追加到输出pre区域并自动滚动到底部识别到成功/失败标记后关闭EventSource并切换按钮状态——这就是输出随产生即流式呈现的完整链路。由于主 CLI 用logging.basicConfig把日志打到 stderr而 stderr 已并入 stdout因此你在浏览器里看到的实时进度实际上就是video-analyzer的日志输出。3.4 第四步查看并下载结果分析成功后前端可点 Download Results请求 GET/results/session_idserver.py。服务端以analysis_原始文件名.json为下载名用send_file(..., as_attachmentTrue)返回analysis.json若会话结果目录里找不到该文件还会检查默认的output/analysis.json并尝试rename进会话目录失败则退化为读内容 → 写副本 → 删原文件的补偿逻辑这是对CLI 未按要求写目录的兜底。该 JSON 的结构由主 CLI 生成cli.py包含四部分metadata客户端、模型、whisper 模型、抽帧数等、transcript转录文本与分段、frame_analyses逐帧分析、video_description最终视频描述可对照 docs/sample_analysis.json 查看完整样例。若勾选了keep-frames抽出的帧会保留在结果目录中否则主 CLI 在结束时调用cleanup_files删除frames/与audio.wav见 cli.py对应 README 中View extracted frames (if kept)的说法。3.5 会话清理点击 New Analysis 时前端先 POST/cleanup/session_idmain.js服务端server.py会删除该会话的上传文件与目录、递归删除会话结果目录、顺带清理默认output/目录最后把会话从内存字典中移除。这对应 README 特性列表中的 Session management and cleanup。四、会话模型与存储布局小结把散落在源码中的存储信息汇总便于排障时定位文件$TMPDIR/video-analyzer-ui/ ├── uploads/ │ └── uuid session_id/ # 上传视频secure_filename 处理后的文件名 └── results/ └── uuid session_id/ # 分析输出analysis.json 等 └── analysis.json会话状态保存在self.sessions内存字典中server.py 第 22、63–67 行不写任何持久化存储从源码结构可以推断服务端重启后旧session_id都会返回 404Invalid session且未被 cleanup 清理过的临时文件需要手动到系统临时目录删除UI 以 Flaskapp.run()单进程方式启动server.py 第 255–260 行self.sessions为进程内共享适合本地单机使用。五、适用前提与限制结合仓库实际内容使用video-analyzer-ui时需要注意依赖主包UI 只负责调度和回显分析能力全部来自video-analyzerCLI启动前的video-analyzer --help自检失败会直接退出server.py。使用 OpenAI 兼容 API 时还需要在主包层面配好--api-key/--api-url经 UI 表单透传本地 Ollama 场景则需先ollama pull llama3.2-vision并启动ollama serve这些前置步骤见主项目 readme.md视频格式白名单仅.mp4 / .avi / .mov / .mkv前后端双重校验index.html 的accept属性与 server.py 第 47 行会话是易失的内存态会话 前端触发式清理浏览器长时间挂机后若服务端重启需重新上传文档与代码的小差异README 列出的--config选项在当前 server.py 中尚未实现实际可选参数以video-analyzer-ui --help为准版本要求UI 包声明Python 3.8但完整跑通本地视觉模型 Whisper 的主包环境建议遵循主项目的 Python 3.11 建议。六、小结video-analyzer-ui用约 300 行 Flask 代码完成了一次典型的CLI 包装为 Web 服务实践UUID 会话 临时目录隔离实现多任务并存secure_filename 扩展名白名单做上传防护表单字段名直映射 CLI 选项省去参数转换层POST 预检 GET 起流两段式接口配合 SSE 实现真·实时进度回显最后以send_file附件下载和前端触发的 cleanup 闭环收尾。对于想把任意命令行分析工具快速界面化、又不想引入前后端分离工程体系的场景这套子进程 行缓冲 SSE 帧的写法server.py 第 112–157 行可以直接参考复用。赞分享人工智能AI 应用大模型计算机视觉语音本地部署视频处理【免费下载链接】video-analyzerAnalyze videos using LLMs, Computer Vision and Automatic Speech Recognition项目地址https://gitcode.com/gh_mirrors/vi/video-analyzer点击查看免费下载相关推荐Zoom Video SDK Android 集成实战指南自定义视频会话 UI、事件驱动状态管理与全生命周期实现Zoom Video SDK Android 集成实战指南自定义视频会话 UI、事件驱动状态管理与全生命周期实现 导读 本指南基于 knowledge worAI 技能AI 插件video-analyzer 使用指南命令行参数、三阶段配置与本地/云端视觉模型实战video analyzer 使用指南命令行参数、三阶段配置与本地/云端视觉模型实战 本文基于官方使用文档 docs/USAGES.md 展开系统梳理 vi人工智能AI 应用大模型计算机视觉语音本地部署视频处理video-analyzer-tune 实战指南用 DSPy MIPROv2 自动优化视频分析提示词video analyzer tune 实战指南用 DSPy MIPROv2 自动优化视频分析提示词 video analyzer tune 是 video人工智能AI 应用大模型计算机视觉语音本地部署视频处理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考