video-style-analysis
完美复刻原视频的完整内容(画面+声音),通过智能体分析原视频的视觉风格和音频特征,生成风格提示词,使用TTS复刻配音,基于原画面重新生成相似视频并合成;当用户需要完美复刻视频内容、语音克隆、视频风格迁移时使用
DeepseekModel
Curated skill
Quality Good · 64
v1.0.0
Get
https://deepseekmodel.com/api/download.php?id=huangserva-skill-video-style-analysis-skill-md&format=skill
Download .skill
Standard format with system_prompt and model_config, ready for any agent framework
The actual content of the system_prompt field in the .skill file.
name video-style-analysis description 完美复刻原视频的完整内容(画面+声音),通过智能体分析原视频的视觉风格和音频特征,生成风格提示词,使用TTS复刻配音,基于原画面重新生成相似视频并合成;当用户需要完美复刻视频内容、语音克隆、视频风格迁移时使用 dependency {"python":["opencv-python","numpy","moviepy","Pillow","openai-whisper","edge-tts","aiohttp","pyyaml","insightface","onnxruntime"]} 视频完美复刻(智能体分析+TTS配音+音视频合成) 任务目标 本 Skill 用于:完美复刻原视频的完整内容,包括重新生成画面(保持高相似度)和克隆原视频的配音风格(音色、语调、节奏),并合成最终视频 能力包含:智能体视频分析(视觉+音频)、风格提示词生成、TTS配音生成、音视频合成 触发条件:用户需要完美复刻视频内容、克隆原视频配音风格、保持原故事情节和画面风格时使用 前置准备 依赖说明:确保已安装以下Python包 opencv-python numpy moviepy Pillow openai-whisper 核心理念 ⭐ 多层视频语义分析:先粗判,再抽丝剥茧 这套 Skill 不应该一上来就把视频压缩成一句 prompt。 无论有没有 ASR,都必须先完成一个 逐层收敛 的分析过程:先判断视频属于什么内容机制,再判断画面里发生了什么,再抽取能帮助进一步判定的证据,最后才生成复刻约束。 强制顺序: 媒体基线 :分辨率、横竖屏、时长、帧率、是否有音轨、是否有 OCR/字幕 内容粗分类 :剧情 / 口播 / 纪录 / 教程 / 表演 / 训练 / 商品展示 / 氛围片 场景语义骨架 :地点类型、空间结构、人数规模、主体组织方式、光线与环境 主体与行为分析 :谁在画面里、在做什么、动作是同步还是对抗、是训练还是表演 判别性证据提取 :服装、鞋子、道具、器材、文字、标识、屏幕内容 子类收敛与复刻约束 :把“像运动”继续收敛到“训练 / 表演 / 比赛 / 排练”等,再写 prompt 和负约束 原则 : 不允许从“多人 + 室内”直接跳成“多人活动现场” 不允许从“像跳舞”直接停住,必须继续检查动作、队形、服装、鞋子、文字、道具 先写 事实层 ,再写 解释层 ,最后才写 生成层 每一层都要回答: 我看到了什么 、 这说明什么 、 还缺什么证据 语义分析 6 层 16 维(通用) Layer 0:媒体基线 媒体规格 :分辨率、比例、横竖屏、时长、帧率、清晰度 音频角色 :无人声 / 解说 / 对话 / 环境音 / 音乐主导 / 混合 Layer 1:内容机制判断 内容类型 :剧情、纪实、教程、舞台、训练、广告、旅行、产品、纯氛围 叙事驱动力 :ASR 驱动、视觉驱动、字幕驱动、音乐驱动,或混合驱动 Layer 2:场景语义骨架 地点与空间 :室内/室外、建筑类型、空间用途、景深与站位关系 时间与光线 :白天/夜晚、自然光/人工光、冷暖、硬光/漫射 主体规模 :单人、双人、小群体、大型群像 主体组织关系 :对话、协作、对抗、列队、围观、表演、教学 Layer 3:主体与行为 核心行为 :走、跑、跳、练、演、讲、做、展示、互动、操作 动作结构 :静态、重复动作、连续动作链、强爆发动作、同步动作 外观线索 :年龄段、性别倾向、服装类别、制服程度、发型、妆造 Layer 4:判别性证据 道具/器材/鞋服细节 :最能帮助子类判断的具体物件或穿着细节 文字与符号线索 :字幕、招牌、屏幕 UI、墙面文字、衣物印字、徽标 Layer 5:生成约束 构图与摄影 :景别、机位、构图、运镜、节奏 风格与氛围 :色调、质感、真实度、年代感、文化风格、情绪气候 复刻硬约束 :哪些必须保留,哪些不能错,哪些允许近似 示例(抽象方法,不是写死舞蹈模板) : 粗分类:室内多人同步活动 行为判断:重复抬步、队列训练、节奏一致 证据提取:统一服装、分趾舞鞋、木地板、墙面文字 子类收敛:群体基础舞步训练 / 民俗舞排练,而不是泛化成“多人运动” ⭐ ASR优先 + 分级容错机制 关键洞察 :ASR语音识别不仅仅是"语音转文字",更是 理解视频叙事的关键步骤 。 对比 : 方法 只看图像 图像+ASR 角色数量 可能误判(如数出7个) 准确(如实际2个) 主角识别 不确定 立刻知道 叙事线 需要猜测 文本直接说明 角色关系 不清楚 明确 因此 :当 ASR 有效时,ASR结果 指导 角色识别和叙事理解;但它不替代视觉语义分析,更不能跳过“粗分类 → 证据提取 → 子类收敛”。 执行方式 :ASR步骤如主session环境无法安装Whisper,会自动启动sub-agent session执行。 ⚠️ 分级容错机制 问题 :不是所有视频都有音频,也不是所有音频都能提取到有效的叙事线。 解决方案 :三级容错机制,自动降级处理。 Level 1:ASR成功 + 叙事线清晰(最佳)✅ 触发条件 : 视频有音频轨道 ASR成功提取文本 文本包含明确的角色信息和叙事线 处理方式 : 按标准流程:ASR → 叙事线分析 → 角色识别 → 视觉验证 输出高质量叙事分析 示例 :完整剧情类短视频(含明确角色关系与叙事线) Level 2:ASR成功但叙事线不清晰(次佳)⚠️ 触发条件 : 视频有音频轨道 ASR成功提取文本 文本缺少明确角色信息或叙事线(如:环境音、音乐、片段式对话) 处理方式 : ASR辅助模式 :使用ASR时间戳作为场景边界 文本辅助 :提取关键词作为风格提示 降级到视觉分析 :主要依靠关键帧视觉分析 角色识别 :纯视觉推断 + ASR关键词辅助 示例场景 : 旅游纪录片:ASR可能只有环境音,但时间戳可用于场景分割 美食视频:ASR可能只有烹饪声音,但可以提取场景节奏 Level 3:无ASR或ASR失败(兜底)🛡️ 触发条件 : 视频无音频轨道 ASR完全失败(音频损坏、格式不支持等) 纯视觉视频 处理方式 : 纯视觉分析模式 场景分割 :完全依赖关键帧视觉差异 角色识别 :使用步骤1.5的 character_detection.json (InsightFace人脸嵌入聚类,即使换装也能匹配同一角色) 逐层视觉语义分析 :按“内容粗分类 → 主体行为 → 证据提取 → 子类判定 → 生成约束”执行 叙事线推断 :基于场景变化和动作序列推断,而不是直接猜主题 风险提示 : 角色数量可能误判(如之前的7个 vs 实际2个) 叙事线可能不准确 需要用户确认角色识别结果 示例场景 : 无声视频、动画视频、纯画面展示视频 自动降级流程 def analyze_with_fallback ( video_path ): """ 带容错的视频分析流程 """ # 尝试提取音频 audio = extract_audio(video_path) if audio is None : # Level 3: 无音频 return pure_visual_analysis(video_path) # 尝试ASR asr_result = perform_asr(audio) if asr_result is None or not asr_result[ "full_text" ]: # Level 3: ASR失败 return pure_visual_analysis(video_path) # 尝试叙事线分析 narrative = analyze_narrative(asr_result[ "full_text" ]) if narrative[ "clarity_score" ] < 0.5 : # Level 2: 叙事线不清晰 return hybrid_analysis(video_path, asr_result, narrative) # Level 1: 完整流程 return full_analysis_with_narrative(video_path, asr_result, narrative) 输出标识 : 每个分析结果需包含 analysis_level 字段("level_1" / "level_2" / "level_3") Level 2/3 需增加 confidence_warning 字段,提示用户验证 操作步骤 阶段1:叙事理解(ASR优先) 步骤1:智能关键帧提取 执行方式:调用Python脚本 python scripts/smart_keyframe_extractor.py \ --video_path <原视频路径> \ --output_dir output/keyframes/ \ --min_fps 2.0 核心功能 : 场景切换检测 :识别场景边界(帧间像素差异阈值15%) 动作密度分析 :动作密集区域多提取,静态区域适度提取 均匀提取兜底 :每秒至少2帧,确保不遗漏重要镜头 输出 : output/keyframes/*.jpg - 关键帧图像 output/keyframes/extraction_result.json - 提取结果(场景列表、关键帧列表、视频信息) 步骤1.5:角色检测与跨帧聚类 执行方式:调用Python脚本(InsightFace) python scripts/character_detector.py \ --keyframes_dir output/keyframes/ \ --output_path output/analysis/character_detection.json \ --extraction_result output/keyframes/extraction_result.json \ --similarity_threshold 0.4 核心功能 : 人脸检测 :使用InsightFace (buffalo_l) 检测每帧中的人脸及位置 特征提取 :提取512维人脸嵌入向量(ArcFace) 跨帧聚类 :余弦相似度贪心聚类(默认阈值0.4),即使换装也能通过人脸特征匹配同一角色 角色档案 :生成每个角色的出现帧列表、人脸/身体区域bbox、代表性面部裁切图 ASR整合 (可选):步骤3.5完成后,可带 --narrative_path 重新运行以将视觉角色与文本角色名关联 为什么需要这一步 : 纯图像分析中,同一角色换装后会被误判为不同人 ASR失败时,没有角色检测就只能靠Claude看图猜测 人脸嵌入在换装、换场景时仍然稳定,是最可靠的跨帧角色匹配方式 输出 : output/analysis/character_detection.json - 角色检测与聚类结果 output/analysis/characters/char_N_face.jpg - 每个角色的代表性面部裁切 人数字段的正确理解 : unique_characters = 跨帧人脸聚类数 ,它表示底层检测里聚成了多少张“可能是不同人”的脸, 不能直接当成现场人数 frame_visible_people = 对步骤1提取出的每张关键帧做一次 单帧可见人数估计 visible_people_stats.stable_visible_people_estimate = 复刻链路默认使用的 稳定可见人数估计 scene_visible_people_stats = 每个场景的人数统计,后续判断主体规模、群像策略、prompt 人数关系时优先用它 输出示例 : { "total_keyframes_analyzed" : 10 , "total_faces_detected" : 15 , "unique_characters" : 2 , "visible_people_stats" : { "stable_visible_people_estimate" : 2 , "min_visible_people" : 1 , "max_visible_people" : 2 } , "scene_visible_people_stats" : [ { "scene_id" : 0 , "time_range" : "0.0-5.0s" , "stable_visible_people_estimate" : 2 } ] , "characters" : [ { "character_id" : 0 , "label" : "char_0" , "matched_name" : null , "appearance_count" : 7 , "keyframe_indices" : [ 0 , 2 , 3 , 5 , 6 , 8 , 9 ] , "scene_ids" : [ 0 , 1 , 2 , 3 ] , "face_bboxes" : { "frame_0000.jpg" : [ 120 , 50 , 220 , 180 ] } , "body_bboxes" : { "frame_0000.jpg" : [ 80 , 50 , 260 , 440 ] } , "representative_face_path" : "output/analysis/characters/char_0_face.jpg" , "avg_det_score" : 0.92 } ] } 步骤2:色彩与运动分析 执行方式:调用Python脚本 python scripts/video_analyzer.py \ --video_path <原视频路径> \ --output_path output/analysis/color_analysis.json 分析内容 : 技术规格 :分辨率、帧率、时长、编码格式 色彩分布 :RGB均值、HSV特征、亮度、对比度 色调识别 :warm_red_orange, warm_yellow, green, cyan, blue, purple等 运动特征 :static, slow_movement, normal_movement, dynamic_fast等 输出 : output/analysis/color_analysis.json - 色彩分析结果 步骤3:ASR语音识别 ⭐ 核心步骤 执行方式:调用Python脚本(自动提取音频+语音识别) python scripts/asr_transcriber.py \ --video_path <原视频路径> \ --output_path output/analysis/asr_result.json \ --model_size base \ --language zh \ --word_level 自动执行流程 : 音频提取 :使用ffmpeg从视频中提取音频轨道(16kHz, mono, WAV格式) 语音识别 :使用Whisper模型将音频转为文本 时间戳提取 :生成段落级和词级时间戳 ⚠️ 重要说明 : 如果主session环境无法安装Whisper库,会 自动启动sub-agent session执行 sub-agent session有独立环境,可以安装依赖并执行完整流程 ASR结果返回后,主session继续后续步骤 分析内容 : 语音转文本 :提取完整解说文本 时间戳提取 :段落级和词级时间戳(用于音画对齐) 叙事内容 :文本中包含的角色、身份、关系、叙事主题 输出 : output/audio/extracted_audio.wav - 提取的音频文件 output/analysis/asr_result.json - ASR识别结果 输出示例 : { "video_path" : "原视频.mp4" , "language" : "zh" , "full_text" : "大家好,今天要分享的是..." , "duration" : 45.2 , "segments" : [ { "id" : 0 , "start" : 0.0 , "end" : 3.5 , "text" : "大家好,今天要分享的是" , "words" : [ { "word" : "大家好" , "start" : 0.0 , "end" : 0.8 , "confidence" : 0.95 } ] } ] , "voice_style" : { "speed" : { "chars_per_second" : 3.2 , "level" : "中等" } , "pause" : { "count" : 5 , "frequency" : 1.1 } , "estimated_tone" : "温柔" , "estimated_emotion" : "温暖" } } 步骤3.5:叙事线分析 + 内容粗分类 ⭐ 关键步骤 执行方式:审核初稿 + 智能体补充 初稿已自动生成 : output/analysis/narrative_analysis.json 由 draft_generator.py 在阶段1结束时自动生成,包含从ASR文本提取的人名和按时间三等分的叙事弧线骨架。Claude 只需阅读 ASR 文本后,补充所有 [TODO] 占位符。 核心理念 :先判断这条视频是“什么类型的内容”,再用 ASR 文本识别角色和叙事线,指导后续图像验证。 分析内容 : 3.5.1 内容粗分类(必须先做) 判断视频属于:剧情 / 口播 / 纪录 / 教程 / 表演 / 训练 / 商品展示 / 纯氛围 判断当前视频的主导理解方式:ASR 驱动 / 视觉驱动 / 字幕驱动 / 音乐驱动 如果 ASR 文本很弱,只把它当辅助信号,不允许强行编造完整剧情 3.5.2 叙事主题识别 从文本识别故事类型(爱情/励志/纪录片/广告等) 识别叙事视角(第一人称"我"/第三人称) 识别情感基调(温暖/紧张/幽默/治愈等) 3.5.3 角色识别(从文本) 主角识别 :文本中明确提到的主角是谁? 角色关系 :角色之间是什么关系?(情侣/朋友/家人等) 角色身份 :角色的真实身份是什么?(富豪/普通人/企业家等) 3.5.4 叙事弧线 起 :故事的开端(0-?秒) 承 :故事的发展(?-?秒) 转 :故事的转折(?-?秒) 合 :故事的结局(?-?秒) 输出 : output/analysis/narrative_analysis.json - 叙事线分析结果 示例输出 (中性占位示例,仅演示结构): { "narrative_theme" : "都市人物关系变化故事" , "narrator" : "第一人称主角(女性)" , "characters_from_text" : [ { "name" : "角色甲" , "role" : "主要对手戏角色,表面身份普通" , "identity" : "隐藏真实背景" } , { "name" : "叙述者(我)" , "role" : "第一人称主角" , "identity" : "故事推动者" } ] , "narrative_arc" : {
Keywords that activate this skill. Click one to copy it.
This skill does not provide trigger words.
The downloaded .skill package contains the following fields.
| Field | Description |
|---|---|
| format | Format tag (skill/v1) |
| skill_id | Unique skill ID |
| name | Skill name |
| version | Version |
| description | Description |
| category | Categories (array) |
| trigger_words | Trigger words |
| tags | Tags |
| source | Source |
| source_url | Source URL (this page) |
| exported_at | Exported at (set per download) |
| system_prompt | System prompt body |
| model_config | Model config: provider / model / temperature / max_tokens / top_p |
| examples | Examples |
| install_guide | Import guide for Coze / Dify / Claude / custom frameworks |
The same skill can be exported in different platform formats.