You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为MoviePy中SubtitlesClip的字幕添加淡入淡出效果并处理时间戳?

为字幕添加淡入淡出效果的实现方法及时间戳获取方案

一、实现字幕淡入淡出的两种方法

1. 给整个字幕片段添加全局淡入淡出

直接调用MoviePy的fadein()和fadeout()方法,为截取后的字幕片段添加效果,注意调整方法调用顺序以保证时间线正确:

generator = lambda txt: TextClip(txt, font='Font.otf', fontsize=18, color='white')
# 先截取原字幕19-35秒的内容,再设置在主视频1秒处开始,最后添加淡入淡出
subtitles = SubtitlesClip('subs.srt', generator).subclip(19, 35).set_start(1)
# 配置淡入淡出时长(示例为0.5秒)
subtitles = subtitles.fadein(0.5).fadeout(0.5)

video = CompositeVideoClip([clip, subtitles])
video.write_videofile("crop.mp4", fps=30, codec="libx264", audio=False, preset='veryfast')

2. 为单条字幕逐个添加淡入淡出

如果需要更精细的控制,修改字幕生成器,给每条生成的TextClip单独添加淡入淡出效果:

def subtitle_generator(txt):
    text_clip = TextClip(txt, font='Font.otf', fontsize=18, color='white')
    # 为单条字幕配置0.3秒的淡入淡出
    return text_clip.fadein(0.3).fadeout(0.3)

subtitles = SubtitlesClip('subs.srt', subtitle_generator).subclip(19, 35).set_start(1)

video = CompositeVideoClip([clip, subtitles])
video.write_videofile("crop.mp4", fps=30, codec="libx264", audio=False, preset='veryfast')

二、获取处理后字幕的时间戳

1. 获取整个字幕片段的时间范围

直接访问片段的start和end属性,就能得到该片段在合成视频中的起始与结束时间:

generator = lambda txt: TextClip(txt, font='Font.otf', fontsize=18, color='white')
subtitles = SubtitlesClip('subs.srt', generator).subclip(19, 35).set_start(1)

# 打印整体时间范围
print("字幕片段起始时间:", subtitles.start)
print("字幕片段结束时间:", subtitles.end)

这里的start就是你设置的1秒,end为1 + (35-19) = 17秒,即片段总时长是截取的原字幕时长加上偏移量。

2. 获取每条字幕的具体播放时间

遍历SubtitlesClip的subs属性,得到每条字幕的原时间戳后,加上set_start的偏移量(1秒)就是实际播放时间:

for sub_entry in subtitles.subs:
    # sub_entry格式为 (原起始时间, 原结束时间, 字幕文本)
    actual_start = sub_entry[0] + 1
    actual_end = sub_entry[1] + 1
    print(f"字幕文本:{sub_entry[2]},实际起始时间:{actual_start}s,实际结束时间:{actual_end}s")

内容的提问来源于stack exchange,提问作者wrench

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:53:19