#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 导演编辑提示词生成器 整合OCR字幕和Whisper口播时间轴,生成专业视频脚本 """ def generate_director_prompt(ocr_timeline, whisper_timeline, video_info=None): """ 生成导演编辑提示词 Args: ocr_timeline: OCR字幕时间轴数据 whisper_timeline: Whisper口播时间轴数据 video_info: 视频基本信息(可选) Returns: str: 导演编辑提示词 """ prompt = f""" # 导演编辑任务:视频脚本整合与优化 ## 任务背景 您是一位经验丰富的视频导演和编辑,需要基于以下两个时间轴数据,为视频创作一个完整、流畅的脚本。 ## 输入数据 ### OCR字幕时间轴(视觉文字内容) {ocr_timeline} ### Whisper口播时间轴(音频内容) {whisper_timeline} {video_info if video_info else ""} ## 导演编辑要求 ### 1. 内容整合策略 - **时间同步**:将OCR字幕与Whisper口播按时间轴精确对齐 - **内容互补**:识别字幕与口播的重复、补充和差异部分 - **信息完整性**:确保重要信息不遗漏,避免重复冗余 ### 2. 脚本结构设计 - **开场设计**:基于前3秒内容设计引人入胜的开场 - **节奏控制**:根据时间轴密度调整内容节奏 - **高潮设置**:识别关键信息点,设计内容高潮 - **结尾收束**:基于最后内容设计有力结尾 ### 3. 语言风格优化 - **口语化处理**:将OCR识别文字转换为自然口语表达 - **情感表达**:根据内容调整语调、语速和情感色彩 - **文化适配**:考虑目标受众,调整表达方式 ### 4. 视觉与音频协调 - **字幕时机**:优化字幕出现时机,与音频节奏配合 - **重点突出**:识别关键信息,在脚本中重点标注 - **转场设计**:设计自然的内容转场和过渡 ## 输出格式要求 请按以下格式输出脚本: ### 完整脚本 ``` [时间戳] [角色/场景] [内容] ``` ### 脚本分析 - **内容概览**:简要总结视频核心内容 - **关键信息点**:列出3-5个最重要的信息 - **目标受众**:分析适合的观众群体 - **传播建议**:提供传播和推广建议 ### 技术参数 - **总时长**:基于时间轴计算 - **内容密度**:评估信息密度是否合适 - **节奏分析**:分析内容节奏变化 ## 创作原则 1. **真实性**:保持原始内容的真实性,不添加虚构信息 2. **流畅性**:确保脚本逻辑清晰,表达流畅 3. **吸引力**:增强内容的吸引力和传播性 4. **专业性**:体现专业导演的编辑水平 请基于以上要求,创作一个完整、专业的视频脚本。 """ return prompt def format_timeline_for_prompt(timeline_data, timeline_type): """ 格式化时间轴数据用于提示词 Args: timeline_data: 时间轴数据 timeline_type: 时间轴类型 ("OCR" 或 "Whisper") Returns: str: 格式化的时间轴文本 """ if timeline_type == "OCR": formatted = "OCR字幕识别结果:\n" for entry in timeline_data: timestamp = entry.get('timestamp', 0) contents = entry.get('contents', []) formatted += f"时间点 {timestamp:.2f}s:\n" for content in contents: text = content.get('text', '') bbox = content.get('bbox', []) formatted += f" - 文字: '{text}'\n" if bbox: formatted += f" 位置: {bbox}\n" formatted += "\n" elif timeline_type == "Whisper": formatted = "Whisper语音识别结果:\n" for i, entry in enumerate(timeline_data): start_time = entry.get('start', 0) end_time = entry.get('end', 0) text = entry.get('text', '') formatted += f" id:{i}, start:{start_time:.2f}, end:{end_time:.2f}, text:{text}\n" return formatted def create_video_script_prompt(ocr_json_path, whisper_data=None): """ 创建完整的视频脚本提示词 Args: ocr_json_path: OCR JSON文件路径 whisper_data: Whisper识别数据(可选) Returns: str: 完整的导演编辑提示词 """ # 读取OCR数据 from pre_data_1 import read_json_file, format_ocr_json ocr_data = read_json_file(ocr_json_path) if not ocr_data: return "错误:无法读取OCR数据文件" # 格式化OCR时间轴 _, subtitle_array = format_ocr_json(ocr_data) ocr_timeline = format_timeline_for_prompt(subtitle_array, "OCR") # 格式化Whisper时间轴(如果有) whisper_timeline = "" if whisper_data: whisper_timeline = format_timeline_for_prompt(whisper_data, "Whisper") else: whisper_timeline = "(暂无Whisper数据)" # 视频基本信息 video_info = f""" ### 视频基本信息 - 文件路径: {ocr_json_path} - OCR引擎: {ocr_data.get('ocr_engine', 'Unknown')} - 视频时长: {ocr_data.get('duration', 0):.2f}秒 - 视频分辨率: {ocr_data.get('frame_width', 0)}x{ocr_data.get('frame_height', 0)} - 视频帧率: {ocr_data.get('fps', 0):.2f}FPS """ # 生成导演提示词 prompt = generate_director_prompt(ocr_timeline, whisper_timeline, video_info) return prompt # 示例使用 if __name__ == "__main__": # 示例Whisper数据(实际使用时应该从文件读取) example_whisper_data = [ {"start": 0.00, "end": 1.80, "text": "潑水街不只有云南"}, {"start": 1.80, "end": 3.56, "text": "老窝更远更传统"}, {"start": 3.56, "end": 5.64, "text": "快来接触这份湿身快乐"}, # ... 更多数据 ] # 生成提示词 prompt = create_video_script_prompt( "/root/autodl-tmp/new_cnocr/老挝泼水节_subtitles.json", example_whisper_data ) # 保存提示词到文件 import os output_path = "/root/autodl-tmp/new_cnocr/director_prompt.txt" with open(output_path, 'w', encoding='utf-8') as f: f.write(prompt) print(f"导演编辑提示词已保存到: {output_path}") print("\n提示词预览(前500字符):") print(prompt[:500] + "...")