SRT 자막 파일을 SAMI 파일로 바꾸는 방법, python source code (동영상 자막 변환, 비디오 자막 포맷 변환, 자막 파일 포맷 변경 방법)
//
"""
Convert SRT file to SMI file
"""
import os
import argparse
import pysrt
from bs4 import BeautifulSoup
import re
import chardet
def get_encoding(file_path):
with open(file_path, "rb") as f:
result = chardet.detect(f.read())
return result["encoding"]
def change_file_extension(srt_file_path, new_ext="smi"):
root, ext = os.path.splitext(srt_file_path)
smi_file_path = f"{root}.{new_ext}"
return smi_file_path
# -----------------------------------------------------------------------------
def convert_srt_to_smi(srt_file_path, lang="ko"):
root, ext = os.path.splitext(srt_file_path)
if ext != ".srt":
print("srt 파일이 아닙니다.")
return
# Load the SRT file
encoding = get_encoding(srt_file_path)
subs = pysrt.open(srt_file_path, encoding=encoding)
lang_str = "KRCC"
if lang == "ko":
lang_str = "KRCC"
elif lang == "ENCC":
lang_str = "ENCC"
# Start of SMI file
smi_content = '<SAMI>\n<HEAD>\n<STYLE TYPE="text/css">\n<!--\nP { font-family: Arial; font-weight: normal; color: white; background-color: black; text-align: center; }\n-->\n</STYLE>\n</HEAD>\n<BODY>\n'
# Convert each subtitle
for sub in subs:
start_time = (
sub.start.hours * 3600000
+ sub.start.minutes * 60000
+ sub.start.seconds * 1000
+ sub.start.milliseconds
)
end_time = (
sub.end.hours * 3600000 + sub.end.minutes * 60000 + sub.end.seconds * 1000 + sub.end.milliseconds
)
text = sub.text.replace("\n", "<br>")
smi_content += f"<SYNC Start={str(start_time)}><P Class={lang_str}>\n{text}\n"
smi_content += f"<SYNC Start={str(end_time)}><P Class={lang_str}> \n"
# End of SMI file
smi_content += "</BODY>\n</SAMI>"
# Write the SMI file
smi_file = change_file_extension(srt_file_path, "smi")
with open(smi_file, "w", encoding="utf-8") as f:
f.write(smi_content)
print("자막 변환", smi_file)
# -----------------------------------------------------------------------------
def main():
parser = argparse.ArgumentParser(
description="Convert SRT file to SMI file.",
usage="%(prog)s <file_path> [-l|--lang <language>]",
)
parser.add_argument("file_path", metavar="FILE", type=str, help="The target file")
parser.add_argument(
"-l",
"--lang",
type=str,
default="ko",
choices=["ko", "en"],
help="자막 언어, 한국어(ko), 영어(en)",
)
args = parser.parse_args()
target_file = args.file_path
target_lang = args.file_path
#
convert_srt_to_smi(target_file, target_lang)
if __name__ == "__main__":
main()
//
반응형
'Code > Python' 카테고리의 다른 글
python 패키지 의존성 검사 방법 (패키지 관리 방법) (0) | 2024.06.30 |
---|---|
SMI 자막 파일을 SRT 파일로 변환 코드 소스 (0) | 2024.06.18 |
python tray 아이콘 처리 (0) | 2024.04.17 |
python 키 입력 처리 - pynput 사용 (0) | 2024.04.17 |
파이썬 사용자 모듈 import 방법 (0) | 2023.09.16 |