MoviePy字幕文本居中对齐失效问题求助
MoviePy字幕文本居中对齐失效问题求助
嘿,我完全懂你的困扰!你设置了align="center",但手动指定x坐标时文本就变成左对齐,只有用('center','center')才正常——这其实是因为MoviePy的位置定位逻辑和你想的不一样。
问题根源
当你给set_pos传入固定数值(比如950)时,MoviePy默认是把字幕剪辑的左上角放在这个坐标点上。而你设置的align="center"是控制文本在字幕自身的画布内对齐,但默认情况下字幕画布的宽度刚好和文本一样宽,所以这个居中设置根本看不出来效果。只有用('center','center')时,MoviePy会把整个字幕剪辑的中心对齐到视频中心,这时候文本自然就看起来居中了。
解决方案
要实现「字幕整体位置在视频中心偏右,同时文本自身居中」的效果,我们需要动态计算每个字幕的左上角位置,让字幕的中心落在你想要的偏右位置上:
- 首先获取你的视频宽度(假设你已经加载了视频文件):
from moviepy.editor import VideoFileClip # 替换成你的视频路径 video = VideoFileClip("your_video.mp4") video_width = video.size[0]
- 定义一个动态计算位置的函数,让字幕中心偏离视频中心向右(这里偏移量设为50像素,你可以根据需求调整):
def get_sub_position(sub_clip, t): # 你想要的中心偏右偏移量 offset_right = 50 # 计算字幕应该在的中心x坐标 target_center_x = (video_width / 2) + offset_right # 获取当前字幕剪辑的宽度 text_width = sub_clip.size[0] # 计算字幕左上角的x坐标:中心x减去字幕宽度的一半 pos_x = target_center_x - (text_width / 2) # y轴保持居中 return (pos_x, 'center')
- 把原来的固定位置设置换成这个动态函数:
# 替换掉你原来的subtitles.set_pos((950, 'center')) subtitles = subtitles.set_pos(get_sub_position)
这样调整后,每个字幕的中心都会精准落在视频中心偏右50像素的位置,同时因为你在generator里设置了align="center",如果是多行字幕的话,每行文本也会在字幕块内居中显示,完全符合你的需求!
备注:内容来源于stack exchange,提问作者Bucky




