본문 바로가기

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

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

예전에 교회 방송실에서 자막 만드는 일을 했을때 만든 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)를 더블 클릭하여 화면에 문구에 따라 원하는 구절을 입력하면 됩니다.

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

 

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

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

내용은 아래와 같습니다.

 

감사합니다.