from moviepy.editor import *
import pysrt
import os
# 配置参数
font_path='minijianti.TTF'#不支持中文命名的字体,如果是中文命名就改为拼音或拼音首字母,这样就解决了字幕不能显示中文的问题
background_image = "background.jpg" # 1080x1440图片
audio_file = "audio.mp3" # 音频文件
subtitle_file = "audio.srt" # 字幕文件(SRT格式)
output_video = "output_video.mp4" # 输出视频
# 检查文件是否存在
for f in [background_image, audio_file, subtitle_file]:
if not os.path.exists(f):
raise FileNotFoundError(f"文件 {f} 不存在")
# 加载音频并获取时长
audio = AudioFileClip(audio_file)
video_duration = audio.duration
# 创建图片剪辑(竖屏1080x1440)
image_clip = ImageClip(background_image).set_duration(video_duration)
# 解析字幕文件
subs = pysrt.open(subtitle_file)
# 创建字幕剪辑集合
sub_clips = []
for sub in subs:
# 转换时间格式为秒
start_time = (sub.start.hours * 3600
+ sub.start.minutes * 60
+ sub.start.seconds
+ sub.start.milliseconds / 1000)
end_time = (sub.end.hours * 3600
+ sub.end.minutes * 60
+ sub.end.seconds
+ sub.end.milliseconds / 1000)
# 创建文字剪辑
txt_clip = TextClip(
sub.text.strip(),
fontsize=85,
color='black',
font=font_path,
size=(800, None), # 控制文字宽度
method='caption', # 自动换行
align='center',# 设置对齐方式
stroke_color='black',# 设置边框颜色
stroke_width=2.5# 设置边框宽度
).set_start(start_time).set_end(end_time)
# 设置字幕位置(底部向上100像素)
txt_clip = txt_clip.set_position(('center', image_clip.h -1300))
sub_clips.append(txt_clip)
# 合成最终视频
final_video = CompositeVideoClip([image_clip] + sub_clips)
final_video = final_video.set_audio(audio)
# 导出视频(竖屏保持原始分辨率)
final_video.write_videofile(
output_video,
fps=24,
codec='libx264',
audio_codec='aac',
threads=4,
preset='medium',
ffmpeg_params=['-crf', '20']
)
print(f"视频生成成功:{output_video}")
音频,字幕合成为视频
最新推荐文章于 2025-06-08 02:52:26 发布