

就是在昨天,为了能制作一个短视频并配上字幕,我突发奇想。用影刀将语音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} 文件。")