python使用moviepy+pysrt+whisper自动识别声音并为视频添加字幕生成新视频

代码语言:python

所属分类:其他

代码描述:python使用moviepy+pysrt+whisper自动识别声音并为视频添加字幕生成新视频,使用VideoFileClip提取视频的音频,然后利用whisper识别成字幕文件srt,最后合并到视频中,opencc主要解决繁体字转简体。

代码标签: python moviepy pysrt whisper 自动 识别 声音 视频 添加 字幕 生成

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

#pip install -U openai-whisper
#pip install -U opencc
#pip install moviepy
#pip install pysrt 
from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
import pysrt
import whisper
from opencc import OpenCC  # 用于繁体到简体转换


# 提取音频文件
def extract_audio_from_video(video_file, audio_file):
    video = VideoFileClip(video_file)
    audio = video.audio
    audio.write_audiofile(audio_file, codec='pcm_s16le')  # 使用无损的音频编码

# 使用 Whisper 转录音频并生成 SRT 文件
def generate_srt_from_audio(audio_file, srt_file):
    # 加载 Whisper 模型
    model = whisper.load_model("base")
    # 初始化 OpenCC 转换器
    cc = OpenCC('t2s')  # 从繁体转为简体
    # 转录音频并获取时间戳
    result = model.transcribe(audio_file, language="zh", task="transcribe")

    # 导出 SRT 字幕文件
    def export_srt(result, filename):
        def srt_timestamp(seconds):
            h = int(seconds // 3600)
            m = int((seconds % 3600) // 60)
            s = int(seconds % 60)
            ms = int((seconds % 1) * 1000)
            return f"{h:02}:{m:02}:{s:02},{ms:03}"

        srt_content = []
        for i, segment in enumerate(result["segments"]):
            start = srt_timestamp(segment["start"])
            end = srt_timestamp(segment["end"])
            text = segment["text"].strip()
                        # 将繁体文本转换为简体
            text = cc.convert(segment["text"].strip())

            srt_content.append(f"{i+1}\n{start} --> {end}\n{text}\n\n")

        with open(filename, "w", encoding="utf-8") as f:
            f.writelines(srt_content)

    export_srt(result, srt_file)


def time_to_seconds(time_obj):
    return time_obj.hours * 3600 + time_obj.minutes * 60 + time_.........完整代码请登录后点击上方下载按钮下载查看

网友评论0