|
@@ -10,7 +10,7 @@ from google.generativeai.types import (HarmBlockThreshold, HarmCategory)
|
|
|
from loguru import logger
|
|
|
from utils.coze_hook import CozeHook
|
|
|
|
|
|
-from utils.google_ai_prompt import VIDEO_TOPIC_ANALYSIS_PROMPT, VIDEO_SEGMENT_ANALYSIS_PROMPT
|
|
|
+from utils.google_ai_prompt import VIDEO_TOPIC_ANALYSIS_PROMPT, VIDEO_SEGMENT_ANALYSIS_PROMPT, VIDEO_ANALYSIS_PROMPT
|
|
|
# from utils.feishu_data import Material
|
|
|
|
|
|
CACHE_DIR = os.path.join(os.getcwd(), 'video_cache')
|
|
@@ -25,13 +25,17 @@ def load_prompts():
|
|
|
print("\n[初始化] 从prompt.py加载Prompt")
|
|
|
|
|
|
prompts = [
|
|
|
+ # {
|
|
|
+ # "name": "视频选题与要点理解",
|
|
|
+ # "content": VIDEO_TOPIC_ANALYSIS_PROMPT
|
|
|
+ # },
|
|
|
+ # {
|
|
|
+ # "name": "视频分段与时间点分析",
|
|
|
+ # "content": VIDEO_SEGMENT_ANALYSIS_PROMPT
|
|
|
+ # }
|
|
|
{
|
|
|
- "name": "视频选题与要点理解",
|
|
|
- "content": VIDEO_TOPIC_ANALYSIS_PROMPT
|
|
|
- },
|
|
|
- {
|
|
|
- "name": "视频分段与时间点分析",
|
|
|
- "content": VIDEO_SEGMENT_ANALYSIS_PROMPT
|
|
|
+ "name": "视频内容分析",
|
|
|
+ "content": VIDEO_ANALYSIS_PROMPT
|
|
|
}
|
|
|
]
|
|
|
|
|
@@ -154,7 +158,15 @@ class GoogleAI(object):
|
|
|
print(f"[分析] 正在执行: {prompt['name']}")
|
|
|
try:
|
|
|
result = cls._analyze_content(video, prompt['content'])
|
|
|
- analysis_data[prompt['name']] = result
|
|
|
+ # 提取 result 中的 "内容分段" 和 "视频简介"
|
|
|
+ analysis_data['视频选题与要点理解'] = {
|
|
|
+ "视频简介": result.get('视频简介', ''),
|
|
|
+ "视频内容类型": result.get('视频内容类型', ''),
|
|
|
+ "段落类型相似度": result.get('段落类型相似度', 1)
|
|
|
+ }
|
|
|
+ analysis_data['视频分段与时间点分析'] = {
|
|
|
+ "内容分段": result.get('内容分段', [])
|
|
|
+ }
|
|
|
except Exception as e:
|
|
|
analysis_data[prompt['name']] = {
|
|
|
"error": str(e),
|
|
@@ -173,10 +185,64 @@ class GoogleAI(object):
|
|
|
logger.error(f"[内容分析] 处理异常,异常信息{e}")
|
|
|
os.remove(video_path)
|
|
|
return f"[异常] {e}",""
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def _analyze_content_with_api(cls, video_url):
|
|
|
+ """使用API分析视频内容"""
|
|
|
+ try:
|
|
|
+ # 使用API分析视频内容
|
|
|
+ response = requests.post(
|
|
|
+ 'http://ai-api.piaoquantv.com/aigc-server/gemini/generateContent',
|
|
|
+ json={
|
|
|
+ "mediaUrl": video_url,
|
|
|
+ "type": 2,
|
|
|
+ "prompt": VIDEO_ANALYSIS_PROMPT,
|
|
|
+ "model":"gemini-2.0-flash",
|
|
|
+ "temperature":"0.3"
|
|
|
+ }
|
|
|
+ )
|
|
|
+ response.raise_for_status()
|
|
|
+ result = response.json()
|
|
|
+ print(f"[内容分析] API分析完成, 结果: {result}")
|
|
|
+
|
|
|
+ if not result or result.get('code') != 0:
|
|
|
+ raise Exception("API分析结果异常")
|
|
|
+
|
|
|
+ # 解析返回的JSON字符串
|
|
|
+ analysis_result = orjson.loads(result['data']['result'])
|
|
|
+
|
|
|
+ # 构建analysis_data
|
|
|
+ analysis_data = {
|
|
|
+ '视频选题与要点理解': {
|
|
|
+ "视频简介": analysis_result.get('视频简介', ''),
|
|
|
+ "视频内容类型": analysis_result.get('视频内容类型', ''),
|
|
|
+ "段落类型相似度": analysis_result.get('段落类型相似度', 1)
|
|
|
+ },
|
|
|
+ '视频分段与时间点分析': {
|
|
|
+ "内容分段": analysis_result.get('内容分段', [])
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ # 使用coze_hook处理数据
|
|
|
+ coze_hook = CozeHook()
|
|
|
+ demand_list = coze_hook.run(
|
|
|
+ analysis_data["视频选题与要点理解"],
|
|
|
+ analysis_data["视频分段与时间点分析"]
|
|
|
+ )
|
|
|
|
|
|
+ print(f"[内容分析] API分析完成, 结果: {analysis_data}, {demand_list}")
|
|
|
+
|
|
|
+ return analysis_data, demand_list
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ logger.error(f"[内容分析] API分析失败,异常信息{e}")
|
|
|
+ return f"[异常] {e}", ""
|
|
|
+
|
|
|
+
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
ai = GoogleAI()
|
|
|
- ai.run("AIzaSyBFLCKMLX-Pf1iXoC2e_rMDLbNhNG23vTk",
|
|
|
- "http://rescdn.yishihui.com/jq_oss/video/2025012215472528213")
|
|
|
+ # ai.run("AIzaSyAHt9h0ScYki7NmgOXa1jj-UEimCa6JEOs",
|
|
|
+ # "http://rescdn.yishihui.com/jq_oss/video/2025012215472528213")
|
|
|
+ ai._analyze_content_with_api("http://rescdn.yishihui.com/jq_oss/video/2025012215472528213")
|
|
|
|