用威力导演制作短片,这个软件有个导入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()
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225195.html原文链接:https://javaforall.net
