使用Media Player Classic播放外挂字幕的电影,有时会出现字幕和语音有偏移的情况,这个可能有2个原因:
1、加载字幕文件时,系统忙造成偏移;
2、字幕文件本身时间不准;
对于第1种情况,只要打开视频文件,加载字幕以后按停止,再按播放即可解决。
第2种情况就需要特别处理了,一般会整个播放期间都有偏移,所以我们只需要把字幕文件里的时间相应作个位移即可,以下是用python写的调整脚本:
我在观看verycd.com上下载的《我是谁》时,由于字幕比语音落后了13秒,所以这里参数设为-13,如果是提前则设为正值。
1、加载字幕文件时,系统忙造成偏移;
2、字幕文件本身时间不准;
对于第1种情况,只要打开视频文件,加载字幕以后按停止,再按播放即可解决。
第2种情况就需要特别处理了,一般会整个播放期间都有偏移,所以我们只需要把字幕文件里的时间相应作个位移即可,以下是用python写的调整脚本:
offset = -13 # 需要位移的时间,单位是秒
## 下面分别是源文件和输出文件
## 写GUI是个麻烦事,使用命令行也会好用多少,所以先放在这里了,要修改只需要改这个即可。
src_file = '[我是谁].Jackie.Chan.-.Who.Am.I.(1998).DVDRip.AC3.imagecker-PoD-CD2.srt'
dest_file = 'cd2.srt'
import re
f = open (src_file, 'r+')
fcopy = open (dest_file, 'w+')
need_write = False
group = ''
for line in f.readlines ():
if len(line.strip()) == 0: # blank line, write a group lines
group += line
if need_write:
fcopy.write (group)
group = ''
continue
result = re.findall('^(\\d+):(\\d+):(\\d+),(\\d+) --> (\\d+):(\\d+):(\\d+),(\\d+)$', line)
if len(result) != 1 or len(result[0]) != 8:
group += line
continue
result = map(int, result [0])
start = result[0] * 3600 + result[1] * 60 + result[2] + offset
end = result[4] * 3600 + result[5] * 60 + result[6] + offset
if start < 0 or end < 0:
need_write = False
continue
result[0] = start / 3600
start %= 3600
result[1] = start / 60
start %= 60
result[2] = start
result[4] = end / 3600
end %= 3600
result[5] = end / 60
end %= 60
result[6] = end
line = '%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d\r\n' % tuple(result)
group += line
need_write = True
if group:
fcopy.write (group)
fcopy.close()
f.close()
## 下面分别是源文件和输出文件
## 写GUI是个麻烦事,使用命令行也会好用多少,所以先放在这里了,要修改只需要改这个即可。
src_file = '[我是谁].Jackie.Chan.-.Who.Am.I.(1998).DVDRip.AC3.imagecker-PoD-CD2.srt'
dest_file = 'cd2.srt'
import re
f = open (src_file, 'r+')
fcopy = open (dest_file, 'w+')
need_write = False
group = ''
for line in f.readlines ():
if len(line.strip()) == 0: # blank line, write a group lines
group += line
if need_write:
fcopy.write (group)
group = ''
continue
result = re.findall('^(\\d+):(\\d+):(\\d+),(\\d+) --> (\\d+):(\\d+):(\\d+),(\\d+)$', line)
if len(result) != 1 or len(result[0]) != 8:
group += line
continue
result = map(int, result [0])
start = result[0] * 3600 + result[1] * 60 + result[2] + offset
end = result[4] * 3600 + result[5] * 60 + result[6] + offset
if start < 0 or end < 0:
need_write = False
continue
result[0] = start / 3600
start %= 3600
result[1] = start / 60
start %= 60
result[2] = start
result[4] = end / 3600
end %= 3600
result[5] = end / 60
end %= 60
result[6] = end
line = '%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d\r\n' % tuple(result)
group += line
need_write = True
if group:
fcopy.write (group)
fcopy.close()
f.close()
我在观看verycd.com上下载的《我是谁》时,由于字幕比语音落后了13秒,所以这里参数设为-13,如果是提前则设为正值。