修改 _create_ass_subtitle 函数:
在这个文件中,找到 _create_ass_subtitle 函数。该函数负责生成ASS字幕的内容。
您需要修改其中定义字幕样式的部分。通常,代码中会有类似 Style: Default,... 的行。
您需要为中文和英文分别创建两个样式,并指定不同的 MarginV(垂直边距)值。
查找并修改类似下面的代码块:
# 原始代码可能类似这样(具体行号可能因版本不同而变化):
ass_header = """[Script Info]
...
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,{fontname},60,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,2,20,20,20,1
""".format(fontname=fontname)
将其修改为(示例):
ass_header = """[Script Info]
...
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Top,{fontname},50,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,2,20,20,20,1 # 顶部样式,MarginV=20
Style: Bottom,{fontname},50,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,1,2,20,20,120,1 # 底部样式,MarginV=120
""".format(fontname=fontname)
Top 样式将用于英文字幕(顶部),Bottom 样式用于中文字幕(底部)。MarginV 是关键参数,控制字幕的垂直位置。数值越大,位置越靠下。您可能需要根据视频分辨率调整 120 这个值(例如,对于1080p视频,可以尝试 200 或 250)。
修改字幕行分配:
在同一个函数中,后续会有循环来写入每一条字幕。您需要根据语言为每一行字幕指定对应的样式名。
找到写入字幕行的部分(通常以 Dialogue: 开头),并修改其样式字段。
原始代码可能类似:
for it in subs:
# ... 计算时间轴 ...
ass_subtitle += f"Dialogue: 0,{start},{end},Default,,0,0,0,,{text}\\N{trans_text}\n"
修改为:
for it in subs:
# ... 计算时间轴 ...
# 假设 it['text'] 是原文(英文),it['trans_text'] 是翻译(中文)
ass_subtitle += f"Dialogue: 0,{start},{end},Top,,0,0,0,,{it['text']}\n" # 英文用Top样式
ass_subtitle += f"Dialogue: 0,{start},{end},Bottom,,0,0,0,,{it['trans_text']}\n" # 中文用Bottom样式
重要: 您需要根据实际代码中访问原文和翻译文本的字段名(可能是 text/trans_text 或 line/target_text)进行调整。这需要查看您当前版本的 genvideo.py 文件的具体实现。