모바일&VR
  • 목록
  • 아래로
  • 위로
  • 쓰기
  • 검색

모바일&VR iOS용 DSVideo 사용을 위한 smi to srt 입니다.

풋히힝님의 기기정보
보유한 기기가 없습니다

경고 절대로 ssh로 convert.py와 recovery.py 실행 하지 마세요.
생성되는 파일, 폴더의 소유권과 권한이 root로 되어 버리면, 실행, 삭제, 수정이 안될 가능성이 있습니다.
반드시 제어판 -> 작업스케쥴러로 돌리시길 바랍니다.
변경점
1. 변환 안되는 smi파일경우 통과 하고 계속 진행
smi파일이 비정상인경우 수정후 srt변환을 하지만,
수정하여 변환 할수 없는 파일경우 멈추는 경우가 있었습니다.
수정하여 변환 할 수 없는 파일은 따로 로그를 남깁니다.
convert.py 에서
failedLogFile = u'/volume1/homes/개인계정/convert_mkv_ac3/log/Failed_SMI_FILES.log'.encode('utf-8')
이부분입니다.
개인 계정을 본인 관리자 계정으로 설정하시면 됩니다.
그럼 Failed_SMI_FILES.log 파일 내부에
변환 되지 않는 smi 파일경우
Convert Fail File = /volume1/Video/smi/error/3.smi
Error Line = <SYNC Start=NaN><P CLASS=KoreanSC>
이런식으로 표시가 되는데
Convert Fail File은 해당 변환 실패한 파일명을 나타내는것이고,
Error Line은 변환 실패한 줄입니다.
<SYNC Start=NaN> <-에러가 발생한 라인입니다. Start = 숫자가 나와야 되는데 NaN문자가 있습니다. 이를 숫자로 수동으로 변경해야 정상적으로 변환됩니다.
(본인이 직접 수정하셔야 됩니다.ㅠㅠ)
2. 스크립트 파일 1개로 여러개 폴더 변환 및 한글 폴더 지원
pwd = u'/volume1/Video'.encode('utf-8')
Convert(pwd,failedLogFile)
 
#pwd = u'/volume1/한글폴더명 가능'.encode('utf-8')
#Convert(pwd,failedLogFile)
해당 volume 내부에 있는 모든 파일들을 탐색해서 변환을 작업을 했는데
Convert 함수로 처리 했습니다.
만일 2개이상의 공유 폴더를 사용하고자 한다면,
#을 지우고 pwd 경로를 지정하시면 됩니다.
예전에는 한글 폴더명을 넣으면, 변환이 되지 않았는데
유니코드 형식으로 지원하게 했습니다.
3. 자막 중간이 생략되는 버그 수정
자막 중간 중간 생략되는 버그가 있었습니다.
그부분에 대한 버그 수정했습니다.
4. 비표준 태그 처리  (<ruby> 태그)
<ruby> 태그 경우 일본 애니메이션 자막경우
노래 가사 한자위에 작은 글씨로 히라가나 소리음을 표시하는 자막이 많습니다.
그때 사용되는 태그가 <ruby> 인데
이 테그는 표준 srt 태그가 아닙니다. 하지만, 일부 동영상프로그램에서 암묵적으로 지원하는 플레이어가 발견됩니다만,
대부분 플레이어에서는 지원하지 않는 플레이어가 간혹 있습니다.
그래서 이 부분 처리를 어떻게 할지 고민을 하다가 이렇게 2가지 버전을 만들었습니다.
하나는 <ruby>한자<rt>소리음</ruby> 를 <b>한자</b>(<i>소리</i>) 으로 변경합니다. 한자(소리음)
다른 하나는 <ruby> 태그를 그대로 적용합니다. 그래서 일부 플레이어경우 자막에 <ruby> 태그가 그대로 보입니다. (Media Player Classic, 외부 자막 필터)
본인이 주로 사용하시는 플레이어에 따라 선택하시면 됩니다.
4-1. convert.py (표준 srt 버전 - 호환성 높음 ) <- 추천
<ruby>태그를 제가 임의로 변경한 버전입니다.
4-2 convert(ruby).py (비표준 srt 버전 - 일부 플레이어 지원하며, 호환성 낮음)
<ruby> 태그를 srt에 그대로 적용되며, <ruby> 태그 지원하지 않는 플레이어에서는
<ruby> 글자 그대로 출려됩니다.
======================================================================================================
recovery.py는 자막 복원 프로그램입니다. (v1.0 이용자를 위한 복원 프로그램입니다. 1.1, 1.2 사용자는 사용하실 필요 없습니다.)
위에
다중언어 smi파일하고,
UTF-8 With BOM 처리 때문에 자막 복원 프로그램을 제작했습니다.
1. 다중언어 smi파일 복원
smi_backup 폴더에서 다중 언어가 들어간 smi 파일을 원래폴더로 복원을 하고,
해당 smi파일에서 변환된 srt파일을 삭제 합니다. (삭제된 srt파일은 srt_backup 폴더에 저장됩니다.)
2. utf-8 with bom 아닌 srt파일 처리
bom 코드가 없는 utf-8 인코딩된 srt파일에
bom 코드 있는 utf-8 srt파일로 전환합니다.. (원본 srt파일을 srt_backup폴더에 저장합니다.)
============================================================================================================
2. 처음 사용자용
처음 사용자 경우 백업할 smi가 없으므로 recovery.py 파일을 실행할 필요가 없습니다.
/volmune1 하위에 존재하는 smi를 srt로 변환해주는 스크립트입니다. (특정폴더는 pwd 변수에 위치 지정)
smi to srt 소스를 가지고 손 조금 댔습니다. 음성 인코딩이랑 같이 사용하는데 왠만한 동영상은 다 재생되네요


2-1. python setuptool 설치
ssh로 시놀로지 접속 후
ds > cd /volume1/@tmp/
ds> wget https://bootstrap.pypa.io/ez_setup.py -O - |  python
2-2. chardet 모듈 설치
ds> wget https://pypi.python.org/packages/source/c/chardet/chardet-2.3.0.tar.gz#md5=25274d664ccb5130adae08047416e1a8
ds> tar xvf chardet-2.3.0.tar.gz
ds> cd chardet-2.3.0
ds>  python setup.py install

2-3.첨부파일 업로드 및 스케쥴
조금 하신다 싶으시면 크론탭 걸어도 되구요. 귀찮으시면 스케쥴러 등록하세요
파일 올린뒤 제어판 > 작업스케쥴러 > 1분단위 실행 설정
저는 아래와 같이 넣었어요.
/volume1/개인폴더/convert_mkv_ac3/ 여기에 스크립트가 위치해야 합니다. >> 이후는 로그남기는 부분입니다. 필요 없으시면 >>포함하여 지워도 무방합니다.

아래
python /volume1/개인폴더/convert_mkv_ac3/convert.py >> /volume1/개인폴더/convert_mkv_ac3/log/convert.log
---------------------------------------------------------------------------------------------------------------------------------------
예전에 smi 자막을 srt 변환하는 툴을 찾았는데요.
버그가 많고, 안되는 것이 많아 수정했습니다.
1. utf8 with bom 형식으로 저장되어 DNLA 자막 출력시 깨지는 현상 없구요.
2. smi파일안에 다중 언어 들어가도 자동으로 분류되어서 srt로 저장됩니다.(예 : krcc, encc 으로 2가지가 같이 있는 경우 "파일이름.krcc.srt"와 "파일이름.encc.srt"
3. <ruby>태그 경우 비표준 태그라 적절하게 처리
쉘스크립트 방식의 smi to srt보다 속도 빠르며, srt 자막 표준에 최대한 지키도록 변경했습니다.
지금까지 하면서 문제가 되는점이 없었습니다.
smi파일경우 smi_backup폴더를 만들어 따로 보관하고, 기존 smi파일을 삭제됩니다.
  • 구독(0명)

풋히힝
6 Lv. 2310/3000P

댓글 7

참여를 하시면 세상을 바꿉니다.
1등 풋히힝 작성자 2017.01.09. 13:57 |댓주소:#1424098
풋히힝(본인)

참고로 위에 변경점은 제가 수정하면서 생기는 문제점 또는 기능들을 수정한점입니다.

2등 풋히힝 작성자 2017.01.09. 14:03 |댓주소:#1424113
풋히힝(본인)
2. 스크립트 파일 1개로 여러개 폴더 변환 및 한글 폴더 지원
pwd = u'/volume1/Video'.encode('utf-8')
Convert(pwd,failedLogFile)
 
#pwd = u'/volume1/한글폴더명 가능'.encode('utf-8')
#Convert(pwd,failedLogFile)
해당 volume 내부에 있는 모든 파일들을 탐색해서 변환을 작업을 했는데
Convert 함수로 처리 했습니다.
만일 2개이상의 공유 폴더를 사용하고자 한다면,
#을 지우고 pwd 경로를 지정하시면 됩니다.
예전에는 한글 폴더명을 넣으면, 변환이 되지 않았는데
유니코드 형식으로 지원하게 했습니다.
참고로
#pwd = u'/volume1/한글폴더명 가능'.encode('utf-8')
#Convert(pwd,failedLogFile)
이부분에서
# 지우고 사용하시면 됩니다.
폴더가 여러개 또는 volume이 여러개인경우
pwd = u'/volume1/한글폴더명 가능'.encode('utf-8')
Convert(pwd,failedLogFile)
복사 붙어넣기 하시고, pwd를 해당 폴더로 변경하시면 됩니다.
profile image
3등 Mactopia 2017.01.09. 14:19 |댓주소:#1424136
풋히힝

와... 감사합니다. 그냥 되시는 분들도 많다지만, 저는 ios에서 smi가 안되었거든요. 잘사용 하도록 하겠습니다.

https://x86.co.kr/nasdqa/1414029

풋히힝 작성자 2017.01.09. 15:29 |댓주소:#1424274
Mactopia

처음 실행시에는 변환해야되는 smi자막이 많아 1시간이상 소요 될꺼예요.

 

처음후 변환이 끝나면, 스케쥴링 하시면 됩니다.

 

ssh상에서 실행하지 마세요. 꼭 스케쥴러에서 실행버튼을 눌러야 됩니다.

미류 2018.04.09. 16:31 |댓주소:#2150592
풋히힝

현재 convert(ruby).py는 압축파일에 포함되어 있지 않은데 일부러 제외시키신건가요? ruby태그를 <b>로 변환하는 부분을 주석처리 하면 루비태그를 아예 없애버리는데 어떻게 해야할까요..?

댓글 쓰기

선택 삭제 전체 선택
익명상태

신고

"님의 댓글"

이 댓글을 신고 하시겠습니까?

삭제

"님의 댓글"

이 댓글을 삭제하시겠습니까?