音频,字幕合成为视频

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}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值