最近看《生活大爆炸》碰到字幕时间和声音不同步的问题,字幕或提前或延后的,实在恼人。
打开字幕原文件一看,4、5百条,手工调整什么的就算了,用Python自己写个小程序吧,没准以后追别的剧还能用到呢。
代码如下:
def adjust_srt(x, y = r'd:/output/new.src', z = 0):
"""
调整视频字幕时间,+z字幕延后z秒显示,输出新文件
x:原字幕文件路径
y:输出调整后文件路径+文件名
z:调整时间(s)
注:函数仅适用于整体调整,字幕随时间阶段偏移的情况比较复杂,
相对也比较少见,在此就不追加分段调整功能了,感兴趣的可以自己完善~
"""
import re, datetime, os
f0 = open(r'' + x, 'r')
pat = r"\d\d:\d\d:\d\d" # 正则表达式
f1 = f0.read()
l0 = re.findall(pat, f1) # 正则过滤所有字幕显示时间,输出是一个列表
temp = []
for i in l0:
h = int(i[0: 2])
m = int(i[3: 5])
s = int(i[6:])
delta = datetime.timedelta(seconds = z) # 调整时间
t = datetime.datetime(2018, 07, 20, h, m, s) + delta # 加入年月日格式化调整后的字幕时间
t1 = datetime.datetime.strftime(t, '%H:%M:%S') # 去掉年月日
temp.append(t1) # 得到调整后的时间列表
result = []
for i in range(len(temp)):
f1 = f1.replace(l0[i], te