#!/usr/bin/env python3
"""
安装PySceneDetect的脚本
用于改进视频场景检测功能
"""

import subprocess
import sys
import os
from pathlib import Path

def install_scenedetect():
    """安装PySceneDetect库"""
    print("🎬 安装PySceneDetect...")
    
    try:
        # 尝试导入，检查是否已安装
        import scenedetect
        print("✅ PySceneDetect已经安装")
        print(f"版本: {scenedetect.__version__}")
        return True
    except ImportError:
        print("📦 PySceneDetect未安装，开始安装...")
    
    try:
        # 安装PySceneDetect
        subprocess.check_call([
            sys.executable, '-m', 'pip', 'install', 'scenedetect[opencv]'
        ])
        
        print("✅ PySceneDetect安装成功！")
        
        # 验证安装
        try:
            import scenedetect
            print(f"✅ 验证成功，版本: {scenedetect.__version__}")
            return True
        except ImportError:
            print("❌ 安装验证失败")
            return False
            
    except subprocess.CalledProcessError as e:
        print(f"❌ 安装失败: {e}")
        return False
    except Exception as e:
        print(f"❌ 安装过程中出现错误: {e}")
        return False

def test_scenedetect():
    """测试PySceneDetect功能"""
    print("\n🧪 测试PySceneDetect功能...")
    
    try:
        from scenedetect import VideoManager, SceneManager
        from scenedetect.detectors import ContentDetector
        
        print("✅ 导入成功")
        
        # 查找测试视频文件
        project_root = Path(__file__).parent.parent
        test_video_paths = [
            project_root / "assets" / "templates" / "template1" / "resources" / "video1.mp4",
            project_root / "assets" / "templates" / "template2" / "resources" / "video1.mp4",
            "/root/.mixvideo/temp/video_segments",
        ]
        
        test_video = None
        for path in test_video_paths:
            if isinstance(path, str):
                # 查找目录中的视频文件
                if os.path.exists(path):
                    for file in os.listdir(path):
                        if file.lower().endswith(('.mp4', '.avi', '.mov')):
                            test_video = os.path.join(path, file)
                            break
            else:
                if path.exists():
                    test_video = str(path)
                    break
        
        if test_video:
            print(f"🎬 使用测试视频: {test_video}")
            
            # 创建视频管理器
            video_manager = VideoManager([test_video])
            scene_manager = SceneManager()
            
            # 添加检测器
            scene_manager.add_detector(ContentDetector(threshold=30.0))
            
            # 开始检测
            video_manager.start()
            scene_manager.detect_scenes(frame_source=video_manager)
            
            # 获取结果
            scene_list = scene_manager.get_scene_list()
            
            print(f"✅ 检测到 {len(scene_list)} 个场景")
            
            if scene_list:
                print("📋 场景列表:")
                for i, scene in enumerate(scene_list[:5]):  # 只显示前5个
                    start = scene[0].get_seconds()
                    end = scene[1].get_seconds()
                    print(f"  场景 {i+1}: {start:.2f}s - {end:.2f}s")
            
            video_manager.release()
            print("✅ PySceneDetect功能测试成功！")
            return True
        else:
            print("⚠️ 没有找到测试视频文件，跳过功能测试")
            return True
            
    except Exception as e:
        print(f"❌ 功能测试失败: {e}")
        import traceback
        traceback.print_exc()
        return False

def show_usage_info():
    """显示使用信息"""
    print("\n📖 PySceneDetect使用信息:")
    print("1. PySceneDetect是一个专业的视频场景检测库")
    print("2. 相比OpenCV的简单帧差检测，它提供更准确的场景分割")
    print("3. 支持多种检测算法：ContentDetector、ThresholdDetector等")
    print("4. 可以自动检测淡入淡出、硬切等转场类型")
    
    print("\n🔧 配置参数:")
    print("- threshold: 场景变化敏感度 (默认30.0)")
    print("  - 较低值 (10-20): 更敏感，检测更多场景变化")
    print("  - 较高值 (40-50): 不太敏感，只检测明显的场景变化")
    
    print("\n📚 更多信息:")
    print("- 官方文档: https://pyscenedetect.readthedocs.io/")
    print("- GitHub: https://github.com/Breakthrough/PySceneDetect")

def main():
    """主函数"""
    print("🎬 PySceneDetect安装和测试工具")
    print("=" * 50)
    
    # 1. 安装PySceneDetect
    if not install_scenedetect():
        print("❌ 安装失败，退出")
        return
    
    # 2. 测试功能
    if not test_scenedetect():
        print("❌ 功能测试失败")
        return
    
    # 3. 显示使用信息
    show_usage_info()
    
    print("\n✅ 所有步骤完成！")
    print("\n🚀 现在可以使用改进的场景检测功能了：")
    print("- 重新导入视频素材将使用PySceneDetect进行更准确的分镜")
    print("- 如果PySceneDetect不可用，系统会自动回退到OpenCV方法")

if __name__ == "__main__":
    main()
