파이썬 실전/동영상 자막 이름 변경 프로그램

파이썬 실전) 자막 이름 변경 프로그램(Subtitles Changer) 1. 파일 이름 변경

마리사라 2021. 4. 25. 20:10
반응형

이번 글에서는 파이썬의 os 라이브러리를 이용하여 자막 이름을 영상의 이름으로 바꾸는 방법에 대해서 써보겠습니다.


1. 코드

우선 파일에 접근해야 하므로 os 라이브러리를 import 해 줍니다.

import os

이제 폴더에 접근할 예정입니다. 폴더에는 Python 파일과 테스트를 위해 만든 Movie.avi(영상), subtitle.smi(자막)이 있습니다.

 

이제 파일이 존재하는 폴더의 경로를 찾아야 합니다. 실제로 프로그램을 만들게 되면 평소 다른 프로그램에서 사용되는 Window의 폴더 선택 창을 통해서 폴더 경로를 찾을 수 있지만, 이번 시간에는 Python 파일과 같이 있다는 전제로 진행하겠습니다.

 

Python 파일의 경로를 찾는 코드는 os 모듈의 getcwd()라는 함수입니다.

directory = os.getcwd()

 

이후 경로값을 통해서 해당 폴더에 어떠한 파일이 있는지 확인하는 합니다. 이때 사용하는 코드는 os 모듈의 listdir(path)입니다.

files = os.listdir(directory)

 

files 출력 결과

이때 나오는 값은 list 자료형으로 출력되게 되며, 해당 폴더에 있는 모든 파일을 출력하기 때문에 Python 파일까지 출력됩니다. 그렇기 때문에 영상 파일과 자막 파일을 위한 필터가 필요합니다.

 

movie_filter = [".avi", ".mkv", ".mp4", ".mpeg"]
subtitle_filter = [".smi", ".ass", ".srt", ".ssa"]

 

영상 파일 필터에는 자주 사용되는 영상 포맷인 avi, mkv, mp4, mpeg를, 자막 파일 필터에는 자막 포맷인 smi, ass, srt, ssa를 사용하도록 하였습니다. 이 부분은 개인별로 추가하실 수 있습니다.

 

이제 필터를 통해 영상 파일과 자막 파일을 나누어 보도록 하겠습니다. 나누는 방법은 중첩 for문을 사용하여 나누도록 하였습니다.

movies = []
subtitles = []
for i in files:
    for j in movie_filter:
        if j in i:
            movies.append(i)

    for j in subtitle_filter:
        if j in i:
            subtitles.append(i)

먼저 영상 파일과 자막 파일들의 목록이 저장될 빈 list를 만들어 줍니다. 이후 중첩 for문을 통해서 files 안에 해당 필터의 확장자가 존재한다면 영상 list나 자막 list에 추가하도록 합니다. 이것을 실행하여 moves와 subtitles를 출력하게 되면 다음과 같습니다.

print(movies, subtitles)

 

이제 자막의 이름을 영화의 이름으로 바꾸도록 하겠습니다. 파일의 이름을 바꾸는 코드는 os 모듈의 rename(src, dst)입니다.

os.rename(directory + "/" + subtitles[0], directory + "/" + movies[0][:-4] + subtitles[0][-4:])

src는 이름을 바꿀 파일의 이름과 위치, dst는 바뀌어질 이름과 위치를 입력해 주시면 됩니다. directory에 현재 폴더의 경로가 저장되어 있으며, subtitles에 바꿀 자막의 이름이 저장되어 있습니다. 이후 바뀌어질 이름에는 영상의 이름에서 확장자(. avi)를 뺀 부분을 넣고 뒷부분에 자막의 확장자(. smi)를 넣도록 합니다. 이후 실행한 뒤, 파일을 확인해 보면 다음과 같이 바뀌어 있습니다.

프로그램 실행 후 파일들


2. 마치며

이번 글에서는 os 라이브러리를 이용하여 파일의 이름을 바꾸는 코드를 만들어 보았습니다. 다음 시간까지 여러분들은 여러개의 영상과 자막이 있을 때 어떻게 해야 하는지 생각을 한번 해보시면 좋을 듯합니다.

 

(1) 상황부여

현재 파일의 상황은 다음과 같습니다.

영상 3개, 자막 3개

자막과 영상이 3개씩 있으며, 3개의 파일을 한 번의 프로그램 실행으로 수정해야 합니다. 마지막 os.rename을 제외한 모든 부분은 동일하며, movies와 subtitles를 실행하면 다음과 같습니다.

print(movies, subtitles)


3. 완성 코드

import os


directory = os.getcwd()
files = os.listdir(directory)
movie_filter = [".avi", ".mkv", ".mp4", ".mpeg"]
subtitle_filter = [".smi", ".ass", ".srt", ".ssa"]
movies = []
subtitles = []
for i in files:
    for j in movie_filter:
        if j in i:
            movies.append(i)

    for j in subtitle_filter:
        if j in i:
            subtitles.append(i)
os.rename(directory + "/" + subtitles[0], directory + "/" + movies[0][:-4] + subtitles[0][-4:])
반응형