用影刀将语音MP3文件生成字幕文件模板
回答
收藏

用影刀将语音MP3文件生成字幕文件模板

金属车身系统产品线工艺部_贺轶龙
2023-08-06 09:23·浏览量:451
金属车身系统产品线工艺部_贺轶龙
影刀中级开发者
发布于 2023-08-06 09:23451浏览

就是在昨天,为了能制作一个短视频并配上字幕,我突发奇想。用影刀将语音MP3文件生成字幕文件模板。

然后直接修改模板里的具体文字。就可以方便的的给短视频加字幕了。

原理:对语音中停顿部分进行检查,把停顿时间记录来下。再将记录的时间格式化后形成字幕srt文件格式。

提醒:# 运行本程序需要安装ffmpeg,并设置环境变量,环境变量指向ffmpeg可执行文件目录。

          #最好是纯语音,杂音小一点

具体代码如下:

# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块

import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
from pydub import AudioSegment
from pydub.silence import split_on_silence
import datetime
from datetime import timedelta


def main(args):
    pass
    # voice_pause_detect(r'd:\MP3_combine.mp3',r'd:\gggg.srt')


def detect_pauses(audio_file, min_silence_len=500, silence_thresh=-50):
    # 加载音频文件
    # print(audio_file)
    # sound = AudioSegment.from_file(audio_file, format="mp3")
    sound= AudioSegment.from_mp3(audio_file)
    
    # 将音频文件切割成各个片段,根据静默区域检测
    chunks = split_on_silence(sound, min_silence_len=min_silence_len, silence_thresh=silence_thresh)
    
    pauses = []
    total_duration = 0
    
    for i, chunk in enumerate(chunks):
        # 获取每个片段的开始和结束时间
        start_time = total_duration
        end_time = total_duration + len(chunk)
        
        # 转换为 srt 格式的时间
        start_time_srt = str(timedelta(milliseconds=start_time))[:-3].replace('.', ',')
        end_time_srt = str(timedelta(milliseconds=end_time))[:-3].replace('.', ',')
        
        # 添加到停顿列表中
        pauses.append((start_time_srt, end_time_srt))
        
        total_duration += len(chunk)
    
    return pauses

def generate_srt(pauses):
    srt = ""
    
    for i, pause in enumerate(pauses):
        start_time = pause[0]
        end_time = pause[1]
        
        srt += str(i+1) + "\n"
        srt += start_time + " --> " + end_time + "\n"
        srt += "请填充具体内容\n\n"
    
    return srt
def voice_pause_detect(path_mp3,out_srt):

    # 输入音频文件路径
     audio_file =path_mp3

    # 检测停顿
     pauses = detect_pauses(audio_file)

    # 生成 srt 文件
     srt_data = generate_srt(pauses)

    # 将 srt 数据写入文件
     with open(out_srt, "w") as f:
        f.write(srt_data)

     print(f"停顿检查完成!已生成 {out_srt} 文件。")

收藏
全部回答1
最新
发布回答
回答