文件内容
skills/smyx_analysis/scripts/smyx_analysis.py
#!/usr/bin/env python3
import sys
import os
current_dir = os.path.dirname(os.path.abspath(__file__))
parent_dir = os.path.dirname(os.path.dirname(os.path.dirname(current_dir)))
sys.path.insert(0, parent_dir)
import argparse
import json
import mimetypes
import traceback
from datetime import datetime
import requests
import sys
import os
from .config import *
from .skill import skill
# import_path_common()
from skills.smyx_common.scripts.util import RequestUtil
# 从config导入常量
SUPPORTED_FORMATS = ConstantEnum.SUPPORTED_FORMATS
MAX_FILE_SIZE_MB = ConstantEnum.MAX_FILE_SIZE_MB
def analyze_video(input_path=None, url=None, api_url=None, api_key=None, output_level=None):
"""调用API分析视频"""
if not input_path and not url:
raise ValueError("必须提供本地视频路径(--input)或网络视频URL(--url)")
try:
input_path = input_path or url
return skill.get_output_analysis(input_path)
except requests.exceptions.RequestException as e:
traceback.print_stack()
raise Exception(f"API请求失败: {str(e)}")
def show_analyze_list(open_id, start_time=None, end_time=None):
try:
output_content = skill.get_output_analysis_list()
return output_content
except requests.exceptions.RequestException as e:
traceback.print_stack()
raise Exception(f"API请求失败: {str(e)}")
def main():
parser = argparse.ArgumentParser(description="视频分析工具")
parser.add_argument("--input", help="本地MP4视频文件路径")
parser.add_argument("--url", help="网络视频MP4的URL地址")
parser.add_argument("--open-id", required=True, help="当前用户的OpenID/UserId/用户名/手机号")
parser.add_argument("--list", action='store_true', help="显示视频历史列表清单")
parser.add_argument("--api-url", help="服务端API地址")
parser.add_argument("--api-key", help="API访问密钥(必需)")
parser.add_argument("--output", help="结果输出文件路径")
parser.add_argument("--detail", choices=["basic", "standard", "json"],
default=ConstantEnum.DEFAULT__OUTPUT_LEVEL,
help="输出详细程度")
parser.add_argument("--export-env-only", action='store_true',
help="仅输出 export 命令设置环境变量,不执行分析")
args = parser.parse_args()
try:
if args.open_id:
ConstantEnumBase.CURRENT__OPEN_ID = args.open_id
# 检查必需参数
if args.list:
open_id = ConstantEnum.CURRENT__OPEN_ID
result = show_analyze_list(open_id)
print(result)
exit(0)
# 检查必需参数
if not args.input and not args.url:
print("❌ 错误: 必须提供 --input 或 --url 参数")
exit(1)
print("🔍 正在分析视频,请稍候...")
output_content = analyze_video(
input_path=args.input,
url=args.url,
api_url=args.api_url,
api_key=args.api_key,
output_level=args.detail
)
print(output_content)
# 保存到文件
if args.output:
with open(args.output, "w", encoding="utf-8") as f:
if args.detail == "full":
json.dump(result, f, ensure_ascii=False, indent=2)
else:
f.write(output_content)
print(f"✅ 结果已保存到: {args.output}")
except Exception as e:
traceback.print_stack()
print(f"❌ 分析失败: {str(e)}")
exit(1)
if __name__ == "__main__":
main()