经过很多尝试,默认的读取srt的SubtitlesClip方法容易出错,只有调用pysrt来构建函数实现解析srt文件后添加字幕到视频上
from moviepy import VideoFileClip, CompositeVideoClip, TextClip
import pysrt
# 加载视频
video_path = "./example.mp4"
video_clip = VideoFileClip(video_path)
# 加载 SRT 文件
def parse_srt(srt_file):
"""解析 SRT 文件,返回字幕的时间和文本信息"""
subtitles = pysrt.open(srt_file, encoding='utf-8')
subtitle_clips = []
for subtitle in subtitles:
start_time = subtitle.start.ordinal / 1000 # 转换为秒
end_time = subtitle.end.ordinal / 1000 # 转换为秒
duration = end_time - start_time
# 创建字幕文本剪辑
subtitle_clip = (
TextClip(
font="C:/Windows/Fonts/simsun.ttc", # 字体文件路径
text=subtitle.text, # 明确指定 text 参数
font_size=50,
color="white",
bg_color="black", # 设置背景颜色
)
.with_start(start_time) # 字幕开始时间
.with_duration(duration) # 字幕持续时间
.with_position(("center", "bottom")) # 字幕位置
)
subtitle_clips.append(subtitle_clip)
return subtitle_clips
# 解析 SRT 文件,生成字幕剪辑
srt_file = "./example.srt"
subtitle_clips = parse_srt(srt_file)
# 将字幕叠加到视频上
final_clip = CompositeVideoClip([video_clip, *subtitle_clips])
# 导出带字幕的视频
output_path = "output_with_subtitles.mp4"
final_clip.write_videofile(output_path, fps=24, codec="libx264", audio_codec="aac")
print(f"带字幕的视频已导出:{output_path}")