update voice and font

This commit is contained in:
Larkspur-Wang 2025-04-19 16:51:18 +08:00
parent 36dffe8de3
commit 21073b5c25
4 changed files with 96 additions and 3 deletions

View File

@ -287,6 +287,9 @@ def generate_video(
bg_color=params.text_background_color,
stroke_color=params.stroke_color,
stroke_width=params.stroke_width,
size=(video_width, None),
method='caption',
text_align='center'
)
duration = subtitle_item[0][1] - subtitle_item[0][0]
_clip = _clip.with_start(subtitle_item[0][0])
@ -320,6 +323,9 @@ def generate_video(
text=text,
font=font_path,
font_size=params.font_size,
size=(video_width, None),
method='caption',
text_align='center'
)
if subtitle_path and os.path.exists(subtitle_path):

View File

@ -952,6 +952,9 @@ Gender: Male
Name: zh-CN-YunxiaNeural
Gender: Male
Name: zh-CN-YunzeNeural-V2
Gender: Male
Name: zh-CN-YunyangNeural
Gender: Male
@ -1012,6 +1015,7 @@ Gender: Female
Name: zh-CN-XiaoxiaoMultilingualNeural-V2
Gender: Female
""".strip()
voices = []
# 定义正则表达式模式,用于匹配 Name 和 Gender 行
@ -1106,6 +1110,27 @@ def azure_tts_v2(text: str, voice_name: str, voice_file: str) -> Union[SubMaker,
logger.error(f"invalid voice name: {voice_name}")
raise ValueError(f"invalid voice name: {voice_name}")
text = text.strip()
# 根据不同的声音使用不同的 SSML
if voice_name == "zh-CN-YunzeNeural":
print(f"DEBUG: Using SeniorMale role and calm style with styledegree=2 for voice {voice_name}")
ssml = f"""
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="zh-CN">
<voice name="{voice_name}">
<mstts:express-as role="SeniorMale" style="calm" styledegree="2">
{text}
</mstts:express-as>
</voice>
</speak>
"""
else:
print(f"DEBUG: Using standard SSML for voice {voice_name} (no special role or style)")
ssml = f"""
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="zh-CN">
<voice name="{voice_name}">
{text}
</voice>
</speak>
"""
def _format_duration_to_offset(duration) -> int:
if isinstance(duration, str):
@ -1172,7 +1197,9 @@ def azure_tts_v2(text: str, voice_name: str, voice_file: str) -> Union[SubMaker,
speech_synthesizer_word_boundary_cb
)
result = speech_synthesizer.speak_text_async(text).get()
#result = speech_synthesizer.speak_text_async(text).get()
print(f"DEBUG: Final SSML being used:\n{ssml}")
result = speech_synthesizer.speak_ssml_async(ssml).get() # 修改这一行
if result.reason == speechsdk.ResultReason.SynthesizingAudioCompleted:
logger.success(f"azure v2 speech synthesis succeeded: {voice_file}")
return sub_maker

View File

@ -122,7 +122,8 @@ def scroll_to_bottom():
scroll(1);
</script>
"""
st.components.v1.html(js, height=0, width=0)
# 使用st.markdown代替st.components.v1.html
st.markdown(js, unsafe_allow_html=True)
def init_log():
@ -763,7 +764,7 @@ with right_panel:
with font_cols[1]:
saved_font_size = config.ui.get("font_size", 60)
params.font_size = st.slider(tr("Font Size"), 30, 100, saved_font_size)
params.font_size = st.slider(tr("Font Size"), 30, 150, saved_font_size)
config.ui["font_size"] = params.font_size
stroke_cols = st.columns([0.3, 0.7])

59
测试.md Normal file
View File

@ -0,0 +1,59 @@
# Role: AI Copy Variation Assistant
# Context:
你是一位专业的AI文案裂变助手。你的核心任务是根据我提供的原始文案生成50条**高质量、语义一致**的变体文案。目标是实现“微调”效果,即每条变体与原文案相比只有少量词语不同,但整体意思和结构保持高度一致。**此过程无人工审核,请严格遵守规则确保质量。**
# Replacement Strategy & Keyword Categories:
请专注于替换以下类型的词语(你**需要智能识别**原文中属于这些类别的词语进行替换,**每次替换1-3个词语**即可,不必全部替换):
1. **形容词/副词**: 例如,描述效果、感觉、程度的词语 (如:"惊艳的", "快速地", "非常")。
2. **核心动词**: 例如,引发动作、说明功能的词语 (如:"解决", "提升", "带来")。
3. **呼吁行动语 (CTA)**: 例如,结尾引导用户行动的短语 (如:"立即体验", "马上行动", "不要错过")。
4. **[可选添加其他类别]**: 例如,目标人群词 (如:"年轻人", "职场人") 或 场景词 (如:"通勤路上", "熬夜加班时")。
# Strict Rules (不可违背的规则):
1. **保持核心信息不变**: 绝对不能改变原文的核心含义、产品/服务特点或关键价值主张。
2. **维持基本结构和长度**: 新文案的句子结构、段落划分和预估阅读/讲述时长应与原文高度相似。
3. **语气风格一致**: 保持原文的语气。
4. **自然流畅**: 生成的文案必须符合中文表达习惯,读起来自然、通顺,无语法错误或生硬拼接。
5. **避免低质重复**: 生成的 **[50]** 条文案之间应有**可感知的差异**,避免仅仅是同义词的简单堆砌或生成高度雷同的文案。使用多样化的、同一类别下的不同词汇。
6. **实现微调效果**: 强调!每条新生成的变体文案,相比原文,**仅替换1-3处**关键词或短语。
# Output Format:
请以编号列表的格式输出所有生成的 **[50]** 条变体文案。
请基于以下框架,针对[目标用户]设计爆款短视频引流文案。每条文案请变换变量内容,保持神秘感、紧迫感与互动感。
要求:
内容真实感强,悬念感强,情绪足够抓人。
合理换用不同身份、时间点、互动动作等,提高多样性。
引导至少一次行为(如点赞/关注/评论/去主页等)。
禁止机械式堆砌,需有自然表达与情感链接。
变量列表(用于分裂)
【用户标签】:(如生肖、星座、年龄、职业等)
【具体时间】如下周二上午十点十二分、今晚8点08分等
【事件数量】1件/2件/三件重要的事)
【事件描述】:(人生会有转机、大事要发生、好消息降临、秘密曝光等)
【保密动作】:(别出声、切勿外传、小心留意、务必安静听好等)
【互动动作】:(点亮小红心、评论“收到”、关注我、转发给朋友等)
【身份关系】:(妈、闺蜜、老师、姐姐、兄弟等)
【稀缺警告】:(今天不做就错过、见一次少一次、这次没看到下次不来了等)
【引流目标】:(主页第一条视频、最新视频、私信了解、关注我看真相等)
【悬念补充】:(所有真相都藏在里面、背后有原因、你会感谢今天看到了等)
结构化分裂文案提示词
请用下面结构填充变量,批量生成不同鲜活场景的文案:
【用户标签】,在【具体时间】,你身边有【事件数量】【事件描述】。我特意来告诉你,【保密动作】,仔细听好了,这件事不能随便说出去。现在就【互动动作】,让【身份关系】知道你收到提醒了。【稀缺警告】。记得去【引流目标】,【悬念补充】。
示例填充1
用户标签:属虎的
具体时间:明天早上九点半
事件数量:有两件
事件描述:重要的决定要降临
保密动作:不要声张
互动动作:点亮小红心
身份关系:哥哥
稀缺警告:错过了今天就再也没有机会
引流目标:主页置顶视频
悬念补充:那才是真正的关键