Python3.7 根据音频文件名批量生成SRT字幕脚本及校对技巧
本文介绍利用Python3.7和Librosa库,根据包含时间信息的音频文件名批量生成SRT字幕文件的方法。脚本通过解析文件名中的分隔符,按音频时长均分时间轴并写入字幕内容。此外,提供了基于Windows PowerShell和Excel VLOOKUP函数的快速校对方案,用于高效检查缺失字幕文件。
适用场景与注意事项
注意:此方法仅适用于文件名本身即包含字幕文本,且通过音频总时长平均拆分来生成字幕的场景。若音频时长与文件名结构不匹配,或文件名不含字幕信息,则不适用此方案。
音频文件名转SRT字幕脚本实现
以下示例演示如何读取 mp3 文件夹下的音频文件,并根据文件名中的分隔符(如 a-pp-le.mp3)生成对应的字幕。例如,若文件名为 a-pp-le.mp3,生成的字幕将分别对应 a、pp、le 三行内容。
核心脚本 make_srt.py 代码如下:
核心代码解析
import librosa
import os
g = os.walk(r"mp3")
def calTime(time):
sec = int(time)
micSec = time - sec
timeStr = ''
if (sec < 10):
timeStr += '0' + str(sec)
else:
timeStr += str(sec)
if micSec == 0:
timeStr += ',000'
else:
timeStr += ',' + str(round(micSec * 1000))
return timeStr
for path,dir_list,file_list in g:
for file_name in file_list:
filename = str('mp3/') + file_name
time = librosa.get_duration(filename = 'mp3/' + file_name)
split = file_name.strip('.mp3').split('-')
count = file_name.count('-') + 1
average = time / count
# y, sr = librosa.audioread('phonics_demo/' + file_name, sr=None)
# print(sr)
if count > 1:
for inx, val in enumerate(split):
# print(time)
f = open("srt/" + file_name + ".srt",'a')
f.write(str(inx + 1))
f.write('\n')
start = calTime((inx + 1) * average)
end = calTime((inx + 2) * average)
if inx == 0:
f.write("00:00:00,000" + " --> " + "00:00:" + start)
else:
f.write("00:00:" + start + " --> " + "00:00:" + end)
f.write('\n')
f.write(val)
f.write('\n\n')
生成的字幕文件大致效果如下所示:
1 00:00:00,000 --> 00:00:01,659 a
2 00:00:01,659 --> 00:00:03,318
broad
批量生成后的字幕校对技巧
在生成大量音频字幕后,往往需要校对是否有遗漏的字幕文件。这里提供一种快速检查手段(以 Windows 10 为例):在 mp3 目录下,按住 Shift 键并点击右键,调出 PowerShell 命令行工具。输入命令 ls > mp3.txt 可将目录下所有文件名逐行输出到 mp3.txt 文件中。随后,将生成的字幕文件目录同样导出,并复制至 Excel 的 Sheet1 A列备用。接着,执行相同操作将 srt 文件列表复制到 Sheet2 A列。在 Sheet2 中,批量将 .srt 后缀替换为空字符串。最后,利用 Excel 的 VLOOKUP 函数,在 Sheet1 B列输入公式 =IFERROR(VLOOKUP(A1,Sheet2!A:A,1,FALSE),"") 。若 B 列填充为空,则说明该文件未生成对应的字幕文件。通过筛选 B 列,即可快速定位缺失字幕的文件。
总结
总结
本文介绍了 Python3.7 读取音频并根据文件名生成 SRT 字幕脚本的代码实现。更多相关 Python3.7 读取音频文件名字幕脚本的内容,请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













