2017-12-17 4 views
2

저는 2 개의 자막 블록을 병합하여보다 쉬운 번역을 사용하려고합니다. 문장을 병합하고 종료 시간을 변경하는 동안 색인 번호를 변경하는 데 문제가 있습니다. count 변수는 증가하지만 인덱스에서 절대로 절대로 나오지 않습니다.문제가 생겼습니다. 2 자막 블록 병합

5 
00:00:23,315 --> 00:00:25,108 
A streetwise but soulful 
teen needed somewhere to live 

6 
00:00:25,192 --> 00:00:26,610 
as he waited for his Juilliard audition. 

7 
00:00:26,693 --> 00:00:29,488 
We'd support his dancing and let 
him stay in the guest room, right. 

5, 6 병합 할 예정 : 우리는이 자막 블록이있는 경우 예를 들어

. 종료 시간 의지가 합병 때 그것은 내가 5와 6의 인덱스를 받아야입니다 대신 내가 5를 얻을 내가 할 노력하고있어 7.

예를 제외하고 잘 workjs 6의 :

5 
00:00:23,315 --> 00:00:26,610 
A streetwise but soulful 
teen needed somewhere to live 
as he waited for his Juilliard audition. 

6 
00:00:26,693 --> 00:00:29,488 
We'd support his dancing and let 
him stay in the guest room, right. 

이것은 내 코드입니다. 나는 2 개의 장소를 추가하려고 시도했다, subs[sub.index].index = subs[sub.index] - count를 시험해 보았다.

import pysrt 
import os 

count = 0 

# Init pysrt 
subs = pysrt.open(" Bojack Horseman36.srt") 
# Go through each subtitle 
for sub in subs: 
    try: 
     # Check if it's a sentence if not check if there is another sentence there if not nothing just remove index 
     sentence = None 
     if subs[sub.index].text.endswith('.') or subs[sub.index].text.endswith('?') or subs[sub.index].text.endswith('!'): 
      subs[sub.index].index - count 
     else: 
      subs[sub.index].text = subs[sub.index].text + '\n' + subs[sub.index+1].text 
      count+=1 
      subs[sub.index].index - count 
      subs[sub.index].end = subs[sub.index+1].end 
      del subs[sub.index+1] 
    except IndexError:  
     pass 

subs.save('translatedsubs.srt', encoding='utf-8') 

어떤 도움 것입니다

주시면 감사하는 감사 : D

+0

병합 된 출력이 실제로 표시되어야하는 내용을 포함시킬 수 있습니까? 이해하면 훨씬 명확 해집니다. –

+0

@MartinEvans 지금 확인하십시오 – MatejMecka

답변

1

다음 당신은 시작한다 : 행에 필요한 조인 여러 개인 경우 비록 문제로 실행 할 수

import pysrt 

subs = pysrt.open("test.srt") 
append_index = None 
remove_list = []    # List of unwanted indexes 
sub_index = subs[0].index  # Existing starting index 

for index, sub in enumerate(subs): 
    if append_index is not None: 
     subs[append_index].text += "\n" + sub.text 
     subs[append_index].end = sub.end 
     remove_list.append(index) 
    if sub.text[-1] not in '.?!': 
     append_index = index 
    else: 
     append_index = None 

# Remove orphaned subs in reverse order   
for index in remove_list[::-1]:  
    del subs[index] 

# Reindex remaining subs 
for index in range(len(subs)): 
    subs[index].index = index + sub_index 

subs.save('test out.srt', encoding='utf-8') 

.

그것은 다음과 같은 출력을 생성합니다

5 
00:00:23,315 --> 00:00:26,610 
A streetwise but soulful 
teen needed somewhere to live 
as he waited for his Juilliard audition. 

6 
00:00:26,693 --> 00:00:29,488 
We'd support his dancing and let 
him stay in the guest room, right. 

참고, 그것을 제거 이상 반복되는 목록에 항목을 추가하지 않는 것이 좋습니다. 대신 제거 할 색인 목록을 만듭니다. 이후 원하지 않는 색인은 역순으로 삭제되므로 제거 할 나머지 항목의 색인은 동일하게 유지됩니다.

+0

고마워요 @MartinEvans는 당신 없이는 할 수 없었습니다! :디 – MatejMecka

관련 문제