用威力导演制作短片,这个软件有个导入srt字幕的功能,可以写好文本后一次性导入短片的字幕,比手工在威力导演里写快多了,srt文本中,每一条字幕的格式是: 序号 起止时间 字幕内容
例如: 1 00:00:08,0 --> 00:00:13,0 发展历程
2 00:00:13,0 --> 00:00:18,0 2006年 通用产品线正式成立 ...
这种格式在字幕的条数发生变化时修改起来很麻烦,比如一共有50条字幕,在第3条后加一条新字幕,则后面47条的序号、起止时间点都要修改,简直是噩梦,为此编写了下面的Python脚本,现在只要将字幕写成如下格式,用脚本处理后就能生成上面要求的格式了:
发展历程
2006年 通用产品线正式成立 ...
其中主要的技术点有(Python 3.1): 时间偏移用timedelta对象,时间点用datetime对象,不能用time对象,因为time对象和timedelta对象不能做和; 时间转换为字符串的方法是strftime() 地址字符串要用“/”代替“\”; 将待处理文件保存为ANSI格式文本,在脚本里配好地址(这里是“f:/视频制作”)就可以了。
下面是脚本内容:
#!/usr/bin/env python
from datetime import datetime, timedelta
if name == 'main':
#读原始文件
oriScript = open('f:/视频制作/rawScript.srt','rt')
#写目标文件
destScript = open('f:/视频制作/destScript.srt','wt')
try:
block = ''
seqNo = 1
startTime = datetime(1980,1,1,0,0,8)
for curLine in oriScript:
#print(len(curLine))
if curLine.isspace() and len(block)>0: #本行是空行
destScript.write(str(seqNo)+'\n') #写字幕序号
endTime = startTime+timedelta(seconds=5)
#写起止时间:
destScript.write(startTime.strftime("%X") + ',0 --> '+ endTime.strftime("%X") + ',0\n')
destScript.write(block+'\n')
block = '' #清空缓存
seqNo = seqNo + 1 #序号递增
startTime = endTime #本条的终止时间是下一条的起始时间
else:
block = block + curLine #当前行追加到缓存中
finally:
oriScript.close()
destScript.close()