码农的生活小技巧之舒适看美剧-修改字幕的时间

在六维空间下载了电影,想看一看,结果无字幕,菜鸡表示听不懂。去其他网站找字幕,结果时间不一致。
可以去下载新的,码农表示更想用代码操作试一试。
写个脚本,自动翻译,让电脑先看一遍电影,然后自动生成英文字幕,并同声翻译。后期的电影内容如果可以矫正对前期内容的理解,自动修正前面已经翻译好的内容。
不过好像旷世还没这个功能。
在这里插入图片描述
真香警告,菜鸡选择修改字幕文件。将字幕时间提前(扩展功能:也可滞后)
源代码:

import re,os,time,math,os.path,datetime
def time_stamp2time(x):
    time_list = [str(i) for i in x.split(' --> ')]
    time_list1_1 = [x for x in time_list[0].split(':')]
    time_list1_2 = [int(x) for x in time_list1_1[2].split(',')]
    time_list1_1.pop()

    time_list2_1 = [x for x in time_list[1].split(':')]
    time_list2_2 = [int(x) for x in time_list2_1[2].split(',')]
    time_list2_1.pop()

    t1=[int(time_list1_1[0]),int(time_list1_1[1]),(time_list1_2[0]+time_list1_2[1]/1000)]
    t2=[int(time_list2_1[0]),int(time_list2_1[1]),(time_list2_2[0]+time_list2_2[1]/1000)]
    return t1,t2

#加上指定的时间
def add_time(time,s):
    time[2] = time[2]+s
    if time[2] >= 60:        
        time[1] = time[1]+int(time[2]//60)
        time[2] = time[2]%60
        if time[1] >=60:
            time[0] = time[0]+int(time[1]//60)
            time[1] = time[1]%60
    return time

#减去指定的时间
def reduce_time(time,s):
    time[2] = time[2]-s
    if time[2] < 0:
        time[1] = time[1]-int((time[2] + 60)//60)
        time[2] = (time[2] + 60)%60
        if time[1] < 0:
            time[0] = time[0]+int((time[1] + 60)//60)
            time[1] = (time[1] + 60)%60
    return time

def time2time_stamp(x):
    x.append(round((x[2]-math.floor(x[2])),3))
    x[2] = math.floor(x[2])
    H = str(x[0]).zfill(2)
    M = str(x[1]).zfill(2)
    S = str(x[2]).zfill(2)
    MS = str(int(x[3]*1000)).zfill(3)
    time_stamp = H+':'+M+':'+S+','+MS
    return time_stamp

def modify(f, s):    
    with open(f,'r') as f1:
        path, name = os.path.split(f)
        f2 = open(os.path.join(path,'Temporary.txt'),'a')
        for line in f1:
            if re.match(r'\d{1,2}:\d{1,2}:\d{1,2},\d{1,3} --> \d{1,2}:\d{1,2}:\d{1,2},\d{3}',line):
                line = line.strip()
                time_stamp1 = line

                t1,t2 = time_stamp2time(time_stamp1)

                # t1 = add_time(t1,s)
                # t2 = add_time(t2,s)

                t1 = reduce_time(t1,s)
                t2 = reduce_time(t2,s)

                time_stamp_1 = time2time_stamp(t1)
                time_stamp_2 = time2time_stamp(t2)
                time_stamp2=time_stamp_1+' --> '+time_stamp_2+'\n'
                line = time_stamp2
            f2.write(line)
        f2.close()
    
    os.remove(name)
    os.rename('Temporary.txt',name)

if __name__ == '__main__': 
    file_name = '1.srt'# 填写修改srt文件的目录
    time_mody = float(input('请输入向后移动时间轴的秒数:',))
    starttime = datetime.datetime.now()
    modify(file_name, time_mody)
    endtime = datetime.datetime.now()
    print ('转换耗时:',endtime - starttime)

下一步看能否删除中文,只留英文,因吹斯汀

发布了178 篇原创文章 · 获赞 30 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/ACBattle/article/details/102669259