chattts生成的音频与字幕修改完善,每段字幕对应不同颜色的视频,准备下一步插入视频。

上一节中,实现了先生成一个固定背景的与音频长度一致的视频,然后插入字幕。再合并成一个视频的方法。

但是:这样有点单了,所以:

1.根据字幕的长度先生成视频片断

2.在片段上加上字幕。

3.合并所有片断,成为一个新的视频。

4.在新的视频上添加上音频。再次合成一个新的视频,即最后的视频。

可用代码1

from moviepy import VideoFileClip, AudioFileClip, TextClip, CompositeVideoClip, ImageClip
import cv2
import numpy as np
import random
import os
import warnings

# 忽略特定的 UserWarning
# warnings.filterwarnings("ignore", category=UserWarning, message="In file .*\.mp4, .* bytes wanted but 0 bytes read at frame index .* \(out of a total .* frames\), at time .* sec. Using the last valid frame instead.")

def parse_time(time_str):
    """ 解析 SRT 时间格式 """
    hours, minutes, seconds = time_str.split(':')
    seconds, milliseconds = seconds.split(',')
    return float(hours) * 3600 + float(minutes) * 60 + float(seconds) + float(milliseconds) / 1000

def create_video(audio_path, subtitle_path, video_path, subtitle_position='center', use_temp_files=False):
    # 创建一个灰色背景的视频
    width, height = 1920, 1080  # 横屏视频分辨率
    fps = 24  # 视频帧率
    duration = AudioFileClip(audio_path).duration  # 视频时长与音频相同

    # 加载音频
    audio_clip = AudioFileClip(audio_path)

    # 读取字幕文件
    with open(subtitle_path, 'r', encoding='utf-8') as file:
        subtitles = file.readlines()

    # 处理字幕
    video_clips = []
    temp_files = []  # 用于存储临时文件路径
    for i in range(0, len(subtitles), 3):  # 4代表字幕文件中每一块所占行数
        index = subtitles[i].strip()
        time_range = subtitles[i + 1].strip().split(' --> ')
        start_time = time_range[0]
        end_time = time_range[1]
        text = subtitles[i + 2].strip()

        # 计算片段的持续时间
        start_seconds = parse_time(start_time)
        end_seconds = parse_time(end_time)
        clip_duration = end_seconds - start_seconds

        # 生成随机背景颜色
        random_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
        frame = np.zeros((height, width, 3), dtype=np.uint8)
        frame[:, :] = random_color

        # 创建视频片段
        fourcc = cv2.VideoWriter_fourcc(*'
上一篇:LVS能否实现两台服务器的负载均衡


下一篇:从万维网到人工智能:改变生活的11项技术里程碑-1993 年:万维网