2017-12-17 3 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はあなたなしではできなかった! :D – MatejMecka

関連する問題