You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MoviePy字幕文本居中对齐失效问题求助

MoviePy字幕文本居中对齐失效问题求助

嘿,我完全懂你的困扰!你设置了align="center",但手动指定x坐标时文本就变成左对齐,只有用('center','center')才正常——这其实是因为MoviePy的位置定位逻辑和你想的不一样。

问题根源

当你给set_pos传入固定数值(比如950)时,MoviePy默认是把字幕剪辑的左上角放在这个坐标点上。而你设置的align="center"是控制文本在字幕自身的画布内对齐,但默认情况下字幕画布的宽度刚好和文本一样宽,所以这个居中设置根本看不出来效果。只有用('center','center')时,MoviePy会把整个字幕剪辑的中心对齐到视频中心,这时候文本自然就看起来居中了。

解决方案

要实现「字幕整体位置在视频中心偏右,同时文本自身居中」的效果,我们需要动态计算每个字幕的左上角位置,让字幕的中心落在你想要的偏右位置上:

  1. 首先获取你的视频宽度(假设你已经加载了视频文件):
from moviepy.editor import VideoFileClip

# 替换成你的视频路径
video = VideoFileClip("your_video.mp4")
video_width = video.size[0]
  1. 定义一个动态计算位置的函数,让字幕中心偏离视频中心向右(这里偏移量设为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')
  1. 把原来的固定位置设置换成这个动态函数:
# 替换掉你原来的subtitles.set_pos((950, 'center'))
subtitles = subtitles.set_pos(get_sub_position)

这样调整后,每个字幕的中心都会精准落在视频中心偏右50像素的位置,同时因为你在generator里设置了align="center",如果是多行字幕的话,每行文本也会在字幕块内居中显示,完全符合你的需求!

备注:内容来源于stack exchange,提问作者Bucky

火山引擎 最新活动