我正在写一个字幕转换器,SRT到DFXP用于Netflix。我在Windows 8 64bit下使用Python 2.7.8 32位。
代码本身似乎在第一个站点工作正常,它确实创建了一个新的DFXP文件,一切似乎都是有序的。
然而,在Netflix上加载字幕不起作用,它不会被播放。例如,我试图为Thor:The Dark World转换字幕,结果是90,7kb(这个尺寸很重要)。如果我用Notepad ++打开转换后的子,复制它的所有内容,并使用Notepad ++我创建一个新文件,将其粘贴并保存为DFXP字幕,它将在Netflix上正常工作。问题在于,这个新创建的文件(使用Notepad ++)大了91,8kb,比使用Python创建的文件多1kb,即使它具有完全相同的内容。
我甚至尝试使用WinMerge比较两个文件,用我的代码创建的文件和用Notepad ++创建的文件,WinMerge说它们完全相同。
当尝试转换较小的字幕时,这个问题不存在,通过Python创建的字幕也可以在Netflix上正常工作。
执行此操作的代码的摘录如下:
with open(out_file, 'w') as outf, open(in_file, 'r') as inf:
outf.write('<tt xmlns="http://www.w3.org/2006/10/ttaf1">\n')
outf.write(' <body>\n')
outf.write(' <div xml:id="captions">\n')
counter = 1
for line in inf:
if counter == 1:
counter += 1
subtitle = ''
continue
elif counter == 2:
times = line.split('\n')[0].split(' --> ')
begin_time = times[0].replace(',', '.')
end_time = times[1].replace(',', '.')
counter += 1
continue
elif counter == 3:
if line == '\n':
counter = 1
new_line = ' <p begin="%s" end="%s">%s</p>\n' % (begin_time, end_time, subtitle)
outf.write(new_line)
continue
if subtitle != '':
subtitle += '<br />'
if '<i>' in line:
line = line.replace('<i>', '')
if '</i>' in line:
line = line.replace('</i>', '')
subtitle += line.replace('\n', '')
outf.write(' </div>\n')
outf.write(' </body>\n')
outf.write('</tt>\n')
创建新文件时是否遗漏了一些内容? Python创建的文件中缺少这个1,1kb究竟是什么?
答案 0 :(得分:0)
感谢大家的评论,通过我设法让它工作。事实上,问题在于Ignacio Vazquez-Abrams和Tripleee所建议的开场时使用的charset。 David也是正确的,因为Notepad ++确实将新行扩展到了\ r \ n。
我首先通过在Notepad ++上转换输入文件来使其工作,然后使用PyICU修复代码以进行字符集检测。
感谢您的帮助。