1. Python / Говнокод #7804

    −85

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    def captions_and_translations_to_srt(captions_and_translations):
        output = StringIO.StringIO()
        for i in range(len(captions_and_translations)):
            translation_to_srt(captions_and_translations[i][1],
                               captions_and_translations[i][0],
                               i, output)
        srt = output.getvalue()
        output.close()
        return srt
    
    def translation_to_srt(translation, video_caption, index, output):
        subtitle_to_srt_impl(video_caption.caption_text if translation is None \
                             else translation.translation_text, 
                             video_caption, index, output)
    
    def subtitle_to_srt_impl(text, video_caption, index, output):
        output.write(str(index + 1))
        output.write("\n")
        write_srt_time_line(video_caption, output)
        output.write(text)
        output.write("\n\n")
    
    def write_srt_time_line(video_caption, output):
        write_srt_time(video_caption.start_time, output)
        output.write(" --> ")
        write_srt_time(video_caption.end_time, output)
        output.write("\n")
    
    def write_srt_time(seconds, output):
        seconds_int = int(seconds)
        write_padded_num((seconds_int / 3600) % 60, 2, output)
        output.write(":")
        write_padded_num((seconds_int / 60) % 60, 2, output)
        output.write(":")
        write_padded_num(seconds_int % 60, 2, output)
        output.write(",")
        write_padded_num(int(seconds * 1000) % 1000, 3, output)
    
    def write_padded_num(num, numchars, output):
        strnum = str(num)
        numzeros = numchars - len(strnum)
        for i in range(numzeros):
            output.write("0")
        output.write(strnum)

    Генератор SRT субтитров.

    Запостил: alerion, 08 Сентября 2011

    Комментарии (10) RSS

    • Противоречивое впечатление. Вроде и работает правильно всё, но увлёкся товарищ велосипедостроительством. Unpythonic.
      Ответить
    • Быдлокодер пишет так, чтобы работало, программист - так, чтобы легко читалось и правилось и правильно работало
      Ответить
    • Просто потом понадобилось добавить поддержку еще 5 форматов. Ну хорошо что добавлял не этот человек, а то было бы 20+ функций.
      Ответить
      • Он ещё не слышал про ООП?
        Ответить
        • Вообще это "буржуйский" код. Мне интересно было только мне он кажется страшным или нет. Потому что все они это воспринимают нормально и никто рефакторить даже не думает.
          Ответить
          • Ну, ничего страшного. write_srt_time_line и ниже лучше заменить простым форматированием — читается и изменяется легче, не намного медленнее. А для остального вполне нормально.
            Ответить
            • Та уже все сделано на классах, через наследование легко добавляются новые форматы. Этот кусок никто не решается удалить т.к. там где он применяется ничего не понятно :)
              Ответить
      • А что это вообще?
        Ответить
        • передается список dict(start_time='...', end_time='...', text='...') - на выходе субтитры в srt формате.
          Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий