프로그래밍/토이 프로젝트

성경 자막 자동생성 프로그램

YoshiaLee 2023. 1. 14. 05:09

예전에 교회 방송실에서 자막 만드는 일을 했을때 만든 python 프로그램입니다.

설교 내용을 성경 여러군데에서 인용해야할 경우 성경 텍스트를 찾고 메모장에 옮기는

과정이 상당히 반복적이고 실수도 생겨서 자동화 하였습니다.

 

# subtitles.py

import re
import os
import time

dic1 ={ '창세기' : '창', '출애굽기' : '출', '레위기' : '레', '민수기' : '민',
        '신명기' : '신', '여호수아' : '수', '사사기' : '삿', '룻기' : '룻',
        '사무엘상' : '삼상', '사무엘하' : '삼하', '열왕기상' : '왕상', '열왕기하' : '왕하',
        '역대상' : '대상', '역대하' : '대하', '에스라' : '스', '느헤미야' : '느',
        '에스더' : '에', '욥기' : '욥', '시편' : '시', '잠언' : '잠', '전도서' : '전',
        '아가' : '아', '이사야' : '사', '예레미야' : '렘', '예레미야애가' : '애',
        '에스겔' : '겔', '다니엘' : '단', '호세아' : '호', '요엘' : '욜', '아모스' : '암',
        '오바댜': '옵', '요나' : '욘', '미가' : '미', '나훔' : '나', '하박국' : '합',
        '스바냐' : '습', '학개' : '학', '스가랴' : '슥', '말라기' : '말',
        '마태복음' : '마', '마가복음' : '막','누가복음': '눅', '요한복음' : '요',
        '사도행전' : '행', '로마서' : '롬', '고린도전서' : '고전', '고린도후서' : '고후',
        '갈라디아서' : '갈', '에베소서' : '엡', '빌립보서' : '빌' , '골로새서' : '골',
        '데살로니가전서' : '살전', '데살로니가후서' : '살후', '디모데전서' : '딤전',
        '디모데후서' : '딤후', '디도서' : '딛', '빌레몬서' : '몬', '히브리서' : '히',
        '야고보서' : '약', '베드로전서' : '벧전', '베드로후서' : '벧후',
        '요한일서' : '요일', '요한이서' : '요이', '요한삼서' : '요삼', '유다서' : '유',
        '요한계시록' :'계'}

dic2 ={ '창세기' : '1-01창세기', '출애굽기' : '1-02출애굽기', '레위기' : '1-03레위기', '민수기' : '1-04민수기',
        '신명기' : '1-05신명기', '여호수아' : '1-06여호수아', '사사기' : '1-07사사기', '룻기' : '1-08룻기',
        '사무엘상' : '1-09사무엘상', '사무엘하' : '1-10사무엘하', '열왕기상' : '1-11열왕기상', '열왕기하' : '1-12열왕기하',
        '역대상' : '1-13역대상', '역대하' : '1-14역대하', '에스라' : '1-15에스라', '느헤미야' : '1-16느헤미야',
        '에스더' : '1-17에스더', '욥기' : '1-18욥기', '시편' : '1-19시편', '잠언' : '1-20잠언', '전도서' : '1-21전도서',
        '아가' : '1-22아가', '이사야' : '1-23이사야', '예레미야' : '1-24예레미야', '예레미야애가' : '1-25예레미야애가',
        '에스겔' : '1-26에스겔', '다니엘' : '1-27다니엘', '호세아' : '1-28호세아', '요엘' : '1-29요엘', '아모스' : '1-30아모스',
        '오바댜': '1-31오바댜', '요나' : '1-32요나', '미가' : '1-33미가', '나훔' : '1-34나훔', '하박국' : '1-35하박국',
        '스바냐' : '1-36스바냐', '학개' : '1-37학개', '스가랴' : '1-38스가랴', '말라기' : '1-39말라기',
        '마태복음' : '2-01마태복음', '마가복음' : '2-02마가복음','누가복음': '2-03누가복음', '요한복음' : '2-04요한복음',
        '사도행전' : '2-05사도행전', '로마서' : '2-06로마서', '고린도전서' : '2-07고린도전서', '고린도후서' : '2-08고린도후서',
        '갈라디아서' : '2-09갈라디아서', '에베소서' : '2-10에베소서', '빌립보서' : '2-11빌립보서' , '골로새서' : '2-12골로새서',
        '데살로니가전서' : '2-13데살로니가전서', '데살로니가후서' : '2-14데살로니가후서', '디모데전서' : '2-15디모데전서',
        '디모데후서' : '2-16디모데후서', '디도서' : '2-17디도서', '빌레몬서' : '2-18빌레몬서', '히브리서' : '2-19히브리서',
        '야고보서' : '2-20야고보서', '베드로전서' : '2-21베드로전서', '베드로후서' : '2-22베드로후서',
        '요한일서' : '2-23요한일서', '요한이서' : '2-24요한이서', '요한삼서' : '2-25요한삼서', '유다서' : '2-26유다서',
        '요한계시록' :'2-27요한계시록'}


os.chdir("C:\\users\\youraddress\\desktop\\성경") # 성경파일 위치

worship = input("\n어떤예배 입니까?(ex 2010_0723_금요철야): ")

os.mkdir("C:\\users\\youraddress\\desktop\\%s" % worship) # 바탕화면에 폴더 생성(ex 2010_0723_금요철야)

count = 0


while True:


    flat = 1

    while flat:

        book_name = input("『찾는 권?(ex 창세기)』: ")

        if dic1.get(book_name):
            flat = 0
        else:
            print("해당 성경을 찾을수없습니다(띄어쓰기 X), 다시 입력해주세요\n")


    flat = 1

    p_p = re.compile("\d+")

    page = input("『몇장?(ex 1)』: ")

    p_m = p_p.match(page)

    page = int(p_m.group())


    while flat:
        try:
            phase = input("『몇절부터 몇절까지?(ex 3 또는 3~7) 』: ")
            flat = 0
            start_end = phase.split('~')
            
            if len(start_end) == 2: 
                phase_range = range(int(start_end[0]), int(start_end[1]) + 1)
            else:
                phase_range = range(int(start_end[0]), int(start_end[0]) + 1)
                
        except IndexError:
            print("잘못 입력하셨습니다. 다시 입력해주세요\n")
            flat = 1
        except ValueError:
            print("잘못 입력하셨습니다. 다시 입력해주세요\n")
            flat = 1


    f1 = open("%s.txt" % dic2[book_name] ,'r')

    data = f1.read()

    f1.close()

    f3 = open("C:\\users\\youraddress\\desktop\\%s\\제목.txt" %(worship) , 'a') # 제목 파일
    if len(phase_range) == 1:
        if book_name == '시편':
            f3.write("%s %d편 %d절" %(book_name, page, phase_range[0]) )
        else:
            f3.write("%s %d장 %d절" %(book_name, page, phase_range[0]) )
    else:
        if book_name == '시편':
            f3.write("%s %d편 %d-%d절" %(book_name, page, phase_range[0], phase_range[-1]) )
        else:
            f3.write("%s %d장 %d-%d절" %(book_name, page, phase_range[0], phase_range[-1]) )



    if count == 0:
        f2 = open("C:\\users\\youraddress\\desktop\\%s\\본문.txt" %(worship) ,'a') # 본문 파일
    else:
        f2 = open("C:\\users\\youraddress\\desktop\\%s\\인용%d.txt" % (worship, count), 'a') # 인용 파일


    l = []
    for i in phase_range:
        p = re.compile("%s%d:(%d\s)(<.*?>\s)?(.*)" % (dic1[book_name], page, i)) # 문자열 매칭 알고리즘
        m = p.finditer(data)
        for j in m:
            l.append(j.group(1) + j.group(3))


    new_data = '\n//\n'.join(l)

    f2.write(new_data)

    flat = 1

    while flat:
        try:
            flag = int(input("인용구절이 더 있습니까?(1.예, 2.아니오): "))
            flat = 0
            if flag != 1 and flag != 2:
                raise ValueError
        except ValueError:
            print("잘못 입력하셨습니다. 다시 입력해주세요\n")
            flat = 1

    if flag == 2:
        f2.close()
        f3.close()
        print("\n바탕화면에 <%s> 폴더가 생성되였습니다.\n" % worship)
        time.sleep(3)
        break

    count += 1
    f2.close()

    f3.write("\n//\n")
    f3.close()

성경.zip
1.21MB

첨부파일에서 성경 파일을 다운로드받은후

위 코드에서 youraddress만 본인 컴퓨터 ID로 고치면 바로 사용이 가능합니다.

 

사용법은 python을 다운로드한뒤

위 코드가 담긴 파일(subtitle)를 더블 클릭하여 화면에 문구에 따라 원하는 구절을 입력하면 됩니다.

사진으로 보여드리겠습니다.

 

위 같이 입력하고 나면 바탕화면에 파일이 만들어 집니다.

 

 

 

 

 

 

 

 

 

 

 

파일 내용은 입력한 구절들 입니다.

 

 

 

 

 

 

 

 

 

 

 

 

내용은 아래와 같습니다.

 

감사합니다.