mirror of
https://github.com/linyqh/NarratoAI.git
synced 2026-01-09 00:08:12 +00:00
0.3.2 发版
This commit is contained in:
parent
072cfb9856
commit
624889a32f
@ -263,7 +263,7 @@ class ScriptProcessor:
|
||||
else:
|
||||
self.generator = OpenAIGenerator(model_name, self.api_key, self.prompt)
|
||||
|
||||
def _get_default_prompt(self) -> str:
|
||||
def _get_default_prompt(self, word_count=None) -> str:
|
||||
return f"""你是一位极具幽默感的短视频脚本创作大师,擅长用"温和的违反"制造笑点,让{self.video_theme}视频既有趣又富有传播力。你的任务是将视频画面描述转化为能在社交平台疯狂传播的爆款口播文案。
|
||||
|
||||
目标受众:热爱生活、追求独特体验的18-35岁年轻人
|
||||
@ -293,7 +293,7 @@ class ScriptProcessor:
|
||||
3. 用接地气的表达方式拉近与观众距离
|
||||
|
||||
【节奏控制 Rhythm】
|
||||
1. 严格控制文案字数在{self.word_count}字左右,允许误差不超过5字
|
||||
1. 严格控制文案字数在{word_count}字左右,允许误差不超过5字
|
||||
2. 像讲段子一样,注意铺垫和包袱的节奏
|
||||
3. 确保每段都有笑点,但不强求
|
||||
4. 段落结尾干净利落,不拖泥带水
|
||||
@ -306,7 +306,7 @@ class ScriptProcessor:
|
||||
5. 确保情节和建造过程的逻辑连续性
|
||||
|
||||
【字数控制要求】
|
||||
1. 严格控制文案字数在{self.word_count}字左右,允许误差不超过5字
|
||||
1. 严格控制文案字数在{word_count}字左右,允许误差不超过5字
|
||||
2. 如果内容过长,优先精简修饰性词语
|
||||
3. 如果内容过短,可以适当增加细节描写
|
||||
4. 保持文案结构完整,不因字数限制而牺牲内容质量
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
[app]
|
||||
project_version="0.3.0"
|
||||
project_version="0.3.2"
|
||||
# 支持视频理解的大模型提供商
|
||||
# gemini
|
||||
# NarratoAPI
|
||||
|
||||
@ -11,7 +11,7 @@ from loguru import logger
|
||||
|
||||
from app.config import config
|
||||
from app.models.schema import VideoClipParams
|
||||
from app.services import llm
|
||||
from app.utils.script_generator import ScriptProcessor
|
||||
from app.utils import utils, check_script, vision_analyzer, video_processor
|
||||
from webui.utils import file_utils
|
||||
|
||||
@ -421,8 +421,23 @@ def generate_script(tr, params):
|
||||
|
||||
# ===================开始生成文案===================
|
||||
update_progress(90, "正在生成文案...")
|
||||
# 使用 ScriptProcessor 生成脚本
|
||||
from app.utils.script_generator import ScriptProcessor
|
||||
# 校验配置
|
||||
api_params = {
|
||||
'batch_size': st.session_state.get('narrato_batch_size', 10),
|
||||
'use_ai': False,
|
||||
'start_offset': 0,
|
||||
'vision_model': vision_model,
|
||||
'vision_api_key': vision_api_key,
|
||||
'llm_model': text_model,
|
||||
'llm_api_key': text_api_key,
|
||||
'custom_prompt': st.session_state.get('custom_prompt', '')
|
||||
}
|
||||
logger.debug(f"Narrato API 请求参数: {api_params}")
|
||||
requests.post(
|
||||
f"{config.app.get('narrato_api_url')}/video/config",
|
||||
params=api_params,
|
||||
timeout=30
|
||||
)
|
||||
custom_prompt = st.session_state.get('custom_prompt', '')
|
||||
processor = ScriptProcessor(
|
||||
model_name=text_model,
|
||||
@ -430,10 +445,10 @@ def generate_script(tr, params):
|
||||
prompt=custom_prompt,
|
||||
video_theme=st.session_state.get('video_theme', '')
|
||||
)
|
||||
|
||||
|
||||
# 处理帧内容生成脚本
|
||||
script_result = processor.process_frames(frame_content_list)
|
||||
|
||||
|
||||
# 将结果转换为JSON字符串
|
||||
script = json.dumps(script_result, ensure_ascii=False, indent=2)
|
||||
|
||||
@ -550,7 +565,10 @@ def generate_script(tr, params):
|
||||
st.error("生成脚本失败,请检查日志")
|
||||
st.stop()
|
||||
logger.info(f"脚本生成完成\n{script} \n{type(script)}")
|
||||
st.session_state['video_clip_json'] = script
|
||||
if isinstance(script, list):
|
||||
st.session_state['video_clip_json'] = script
|
||||
elif isinstance(script, str):
|
||||
st.session_state['video_clip_json'] = json.loads(script)
|
||||
update_progress(90, "脚本生成完成")
|
||||
|
||||
time.sleep(0.5)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user