diff --git a/app/services/SDE/prompt.py b/app/services/SDE/prompt.py index 7ddcfc0..eaf5752 100644 --- a/app/services/SDE/prompt.py +++ b/app/services/SDE/prompt.py @@ -68,7 +68,7 @@ subtitle_plot_analysis_v1 = """ """ plot_writing = """ -我是一个影视解说up主,需要为我的粉丝讲解短剧《家里家外》的剧情,目前正在解说1-5集的剧情,希望能让粉丝通过我的解说了解剧情,并且产生 继续观看的兴趣,请生成一篇解说脚本,包含解说文案,以及穿插原声的片段,下面中的内容是短剧的剧情概述: +我是一个影视解说up主,需要为我的粉丝讲解短剧《%s》的剧情,目前正在解说剧情,希望能让粉丝通过我的解说了解剧情,并且产生 继续观看的兴趣,请生成一篇解说脚本,包含解说文案,以及穿插原声的片段,下面中的内容是短剧的剧情概述: %s diff --git a/app/services/SDE/short_drama_explanation.py b/app/services/SDE/short_drama_explanation.py index 3ad0f82..e7d1c08 100644 --- a/app/services/SDE/short_drama_explanation.py +++ b/app/services/SDE/short_drama_explanation.py @@ -203,11 +203,12 @@ class SubtitleAnalyzer: logger.error(f"保存分析结果时发生错误: {str(e)}") return "" - def generate_narration_script(self, plot_analysis: str, temperature: float = 0.7) -> Dict[str, Any]: + def generate_narration_script(self, short_name:str, plot_analysis: str, temperature: float = 0.7) -> Dict[str, Any]: """ 根据剧情分析生成解说文案 Args: + short_name: 短剧名称 plot_analysis: 剧情分析内容 temperature: 生成温度,控制创造性,默认0.7 @@ -216,8 +217,8 @@ class SubtitleAnalyzer: """ try: # 构建完整提示词 - prompt = plot_writing % plot_analysis - + prompt = plot_writing % (short_name, plot_analysis) + # 构建请求体数据 payload = { "model": self.model, @@ -371,6 +372,7 @@ def analyze_subtitle( def generate_narration_script( + short_name: str = None, plot_analysis: str = None, api_key: Optional[str] = None, model: Optional[str] = None, @@ -383,6 +385,7 @@ def generate_narration_script( 根据剧情分析生成解说文案的便捷函数 Args: + short_name: 短剧名称 plot_analysis: 剧情分析内容,直接提供 api_key: API密钥 model: 模型名称 @@ -403,7 +406,7 @@ def generate_narration_script( ) # 生成解说文案 - result = analyzer.generate_narration_script(plot_analysis, temperature) + result = analyzer.generate_narration_script(short_name, plot_analysis, temperature) # 保存结果 if save_result and result["status"] == "success": diff --git a/webui/components/script_settings.py b/webui/components/script_settings.py index 9a66ca1..b452d08 100644 --- a/webui/components/script_settings.py +++ b/webui/components/script_settings.py @@ -30,12 +30,12 @@ def render_script_panel(tr): script_path = st.session_state.get('video_clip_json_path', '') # 根据脚本类型显示不同的布局 - if script_path == "short": - # 短剧混剪 模式下显示的内容 - render_short_generate_options(tr) - elif script_path == "auto": + if script_path == "auto": # 画面解说 render_video_details(tr) + elif script_path == "short": + # 短剧混剪 + render_short_generate_options(tr) elif script_path == "summary": # 短剧解说 short_drama_summary(tr) @@ -187,6 +187,7 @@ def render_short_generate_options(tr): 渲染Short Generate模式下的特殊选项 在Short Generate模式下,替换原有的输入框为自定义片段选项 """ + short_drama_summary(tr) # 显示自定义片段数量选择器 custom_clips = st.number_input( tr("自定义片段"), @@ -284,9 +285,13 @@ def short_drama_summary(tr): except Exception as e: st.error(f"{tr('Upload failed')}: {str(e)}") - + + # 名称输入框 video_theme = st.text_input(tr("短剧名称")) st.session_state['video_theme'] = video_theme + # 数字输入框 + temperature = st.slider("temperature", 0.0, 2.0, 0.7) + st.session_state['temperature'] = temperature return video_theme @@ -312,14 +317,15 @@ def render_script_buttons(tr, params): # 执行纪录片视频脚本生成(视频无字幕无配音) generate_script_docu(params) elif script_path == "short": - # 获取自定义片段数量参数 + # 执行 短剧混剪 脚本生成 custom_clips = st.session_state.get('custom_clips') - # 直接将custom_clips作为参数传递,而不是通过params对象 generate_script_short(tr, params, custom_clips) elif script_path == "summary": - # 执行短剧解说脚本生成 + # 执行 短剧解说 脚本生成 subtitle_path = st.session_state.get('subtitle_path') - generate_script_short_sunmmary(params, subtitle_path) + video_theme = st.session_state.get('video_theme') + temperature = st.session_state.get('temperature') + generate_script_short_sunmmary(params, subtitle_path, video_theme, temperature) else: load_script(tr, script_path) diff --git a/webui/tools/generate_short_summary.py b/webui/tools/generate_short_summary.py index e351992..6e5eb0b 100644 --- a/webui/tools/generate_short_summary.py +++ b/webui/tools/generate_short_summary.py @@ -18,7 +18,7 @@ from app.config import config from app.services.SDE.short_drama_explanation import analyze_subtitle, generate_narration_script -def generate_script_short_sunmmary(params, subtitle_path): +def generate_script_short_sunmmary(params, subtitle_path, video_theme, temperature): """ 生成 短剧解说 视频脚本 要求: 提供高质量短剧字幕 @@ -71,11 +71,13 @@ def generate_script_short_sunmmary(params, subtitle_path): # 根据剧情生成解说文案 narration_result = generate_narration_script( + short_name=video_theme, plot_analysis=analysis_result["analysis"], api_key=text_api_key, model=text_model, base_url=text_base_url, - save_result=True + save_result=True, + temperature=temperature ) if narration_result["status"] == "success":