#!/usr/bin/env python3 """PySceneDetect 场景检测脚本,由 Go 服务调用。""" import argparse import json import sys from scenedetect import open_video, SceneManager from scenedetect.detectors import ContentDetector def detect_scenes(video_path: str, threshold: float) -> list[dict]: """检测视频场景切分点,返回场景时间边界列表。""" video = open_video(video_path) scene_manager = SceneManager() scene_manager.add_detector(ContentDetector(threshold=threshold)) scene_manager.detect_scenes(video) scene_list = scene_manager.get_scene_list() scenes = [] for start, end in scene_list: scenes.append({ "start_time": start.get_seconds(), "end_time": end.get_seconds(), }) return scenes def main(): parser = argparse.ArgumentParser(description="视频场景检测") parser.add_argument("--input", required=True, help="输入视频路径") parser.add_argument("--output", required=True, help="输出 JSON 文件路径") parser.add_argument("--threshold", type=float, default=27.0, help="内容检测阈值") args = parser.parse_args() scenes = detect_scenes(args.input, args.threshold) with open(args.output, "w") as f: json.dump(scenes, f, indent=2) print(f"检测完成: {len(scenes)} 个场景", file=sys.stderr) if __name__ == "__main__": main()