0.3.2 发版

This commit is contained in:
linyqh 2024-11-10 01:12:44 +08:00
parent 072cfb9856
commit 624889a32f
3 changed files with 28 additions and 10 deletions

View File

@ -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. 保持文案结构完整不因字数限制而牺牲内容质量

View File

@ -1,5 +1,5 @@
[app]
project_version="0.3.0"
project_version="0.3.2"
# 支持视频理解的大模型提供商
# gemini
# NarratoAPI

View File

@ -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)