DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

自动生成srt格式的脚本(Python实现)


用威力导演制作短片,这个软件有个导入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()



Published

Dec 9, 2010

Last Updated

Dec 9, 2010

Category

Tech

Tags

  • 剧本 1
  • Python 136
  • 时间 3
  • srt 2

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor