"
NASCafe - NAS 클라우드 활용자모임 No.1 나스카페"에서 퍼온자료입니다.
xpenol에서 정상작동 확인했습니다.
유닉스든 리눅스든 기반(시놀로지, 넷기어 등)으로 하고 있는 NAS상에서
smi 자막을 자동으로 srt 자막으로 생성해주는 방법에 대해서 구현해봤습니다.
C언어나 PERL등 다른 랭귀지를 써도 되지만,
컴파일이 안되는 환경도 있고,
패키지 형태로 변환어플을 설치할수도 있는데,
간혹 smi 자막이 비표준화되어 오류가 나서 변환이 안되는 경우도 봤습니다.
하여, 구현이 쉬운 쉘스크립트를 사용해서 직접 만들어 봤습니다.
시놀로지를 예로 들어서 설명드리겠습니다.
1. SSH 설정
시놀로지 관리패널 / 제어판 / 터미널
SSH 서비스 활성화 체크
2. root 접속
putty나 secureCRT 등으로 root 계정으로 접속
비밀번호는 admin 계정의 비밀번호와 동일
3. 볼륨밑에 root홈생성(root 홈과 별개임)
mkdir /volume1/homes/root
4. nkcrontab.sh 생성
vi /volume1/homes/root/nkcrontab.sh
아래 내용을 입력후 저장 또는 첨부파일참조
#!/bin/sh
#
echo "################################################"
echo "# SMI to SRT convertor crontab ver 1.0 "
echo "# Created date: 2013.01.17 "
echo "# Creator info: http://www.nkpark.pe.kr "
echo "################################################"
targetdir=/volume1/video
workdir=/volume1/homes/root
workfile=${workdir}/nksmi2srt.work
find ${targetdir} -name "*.smi" -exec ls {} \; > ${workfile}
nkline=`cat ${workfile} | wc -l`
i=1
iok=0
sok=0
eok=0
while [ ${i} -le ${nkline} ]
do
read filename
echo "[${i}]-----------------------------------------------------------------------------"
echo "input: ${filename}"
ofilename=`dirname "${filename}"`/`basename "${filename}" .smi`.srt
echo "ouput: ${ofilename}"
if [ -f "${ofilename}" ]
then
sok=`expr ${sok} + 1`
echo "--> Skip....."
else
${workdir}/nksmi2srt.sh "${filename}" "${ofilename}"
if [ -f "${ofilename}" ]
then
iok=`expr ${iok} + 1`
echo "--> Change Completed!!!!!"
else
eok=`expr ${eok} + 1`
echo "--> Change Error....."
fi
fi
i=`expr ${i} + 1`
done < ${workfile}
i=`expr ${i} - 1`
echo "----------------------------------------------------------------------------------"
echo "## Total: ${i}, Skip: ${sok}, Changed: ${iok}, Error: ${eok}"
5. nkcrontab.sh 실행권한
chmod 777 /volume1/homes/root/nkcrontab.sh
6. nksmi2srt.sh 생성
vi /volume1/homes/root/nksmi2srt.sh
아래 내용을 입력후 저장 또는 첨부파일참조
#!/bin/sh
#
##echo "################################################"
##echo "# SMI to SRT convertor shell program ver 1.2 "
##echo "# Created date: 2013.05.29 "
##echo "# Creator info: http://www.nkpark.pe.kr "
##echo "################################################"
if [ "$#" -ne 2 ]
then
echo "Usage) $0 smi_file srt_file"
echo ""
exit
fi
echo "[`date '+%Y-%m-%d %H:%M:%S'`] Started"
smi_file=$1
srt_file=$2
start_active_toggle=0
tag_active_toggle=0
file_active_toggle=0
copy_active_toggle=0
main_content=
tag_content=
my_time_result=
srt_i=1
i=1
time_calc()
{
my_time_parsed=$1
time_remain=${my_time_parsed}
time_1=00`expr ${time_remain} / 3600000`
str_st=`expr ${#time_1} - 1`
time_1=`expr substr "${time_1}" ${str_st} 2`
time_remain=`expr ${time_remain} % 3600000`
time_2=00`expr ${time_remain} / 60000`
str_st=`expr ${#time_2} - 1`
time_2=`expr substr "${time_2}" ${str_st} 2`
time_remain=`expr ${time_remain} % 60000`
time_3=00`expr ${time_remain} / 1000`
str_st=`expr ${#time_3} - 1`
time_3=`expr substr "${time_3}" ${str_st} 2`
time_4=`expr ${time_remain} % 1000`
time_result="${time_1}:${time_2}:${time_3},${time_4}"
##echo ${time_result}
}
tag_content_calc()
{
my_tag_content=$1
## 태그부터 작업시작인데, 태그가 없는 경우의 처리를 위해서 태그 부터 작업시작
my_check=`echo "${my_tag_content}" | grep -i ""`
time_calc "${time_parsed}"
if [ ${start_active_toggle} -eq 0 ]
then
my_time_from="${time_result}"
my_time_to="${time_result}"
my_time_result="${my_time_from} --> ${my_time_to}"
start_active_toggle=1
else
my_time_from="${my_time_to}"
my_time_to="${time_result}"
my_time_result="${my_time_from} --> ${my_time_to}"
my_check=`echo "${my_all_content}" | grep -i " " | wc -l`
if [ "${my_all_content}" != "" ] && [ ${my_check} -ne 1 ]
then
if [ ${file_active_toggle} -eq 0 ]
then
echo "" > "${srt_file}"
file_active_toggle=1
fi
##if [ ${copy_active_toggle} -eq 0 ]
##then
## copyrights head
## copy_active_toggle=1
##fi
echo "${srt_i}" >> ${srt_file}
echo "${my_time_result}" >> ${srt_file}
echo "${my_all_content}" >> ${srt_file}
echo "" >> ${srt_file}
srt_i=`expr ${srt_i} + 1`
fi
my_all_content=
fi
##echo ${my_time_result}
fi
##
태그는 \n(행바꿈)으로 치환
my_check=`echo "${my_tag_content}" | grep -i "
" | wc -l`
if [ ${my_check} -eq 1 ]
then
##main_content="${main_content}\n"
##main_content=`echo "${main_content}" | tr '
' '\n' | tr '
' '\n' | tr '
' '\n' | tr '
' '\n'`
main_content=`echo "${main_content}" | sed 's/
/\n/g' | sed 's/
/\n/g' | sed 's/
/\n/g' | sed 's/
/\n/g'`
fi
##echo "${my_tag_content}"
}
main_content_calc()
{
my_main_content=$1
if [ ${start_active_toggle} -eq 1 ]
then
##my_main_content=`echo "${my_main_content}" | tr -d '\f\r\n'`
my_main_content=`echo "${my_main_content}" | sed 's/\f//g' | sed 's/\r//g' | sed 's/\n//g' | sed 's/^M//g'`
my_all_content="${my_all_content}${my_main_content}"
fi
}
copyrights()
{
cr_flag=$1
if [ "${cr_flag}" == "head" ]
then
cr_time_from="00:00:00,500"
cr_time_to=${my_time_from}
else
time_calc `expr ${my_time_parsed} + 10000`
##cr_time_from=${my_time_to}
cr_time_from=${time_result}
time_calc `expr ${my_time_parsed} + 5000`
cr_time_to=${time_result}
fi
cr_time_result="${cr_time_from} --> ${cr_time_to}"
echo "${srt_i}" >> ${srt_file}
echo "${cr_time_result}" >> ${srt_file}
echo "이 SRT 자막은 박남규가 만든 프로그램으로 변환함" >> ${srt_file}
echo "http://www.nkpark.pe.kr" >> ${srt_file}
echo "" >> ${srt_file}
srt_i=`expr ${srt_i} + 1`
}
nkline=`cat "${smi_file}" | wc -l`
while [ ${i} -le ${nkline} ]
do
read line_input
li_len=`expr length "${line_input}"`
c=1
while [ ${c} -le ${li_len} ]
do
char_parsed=`expr substr "${line_input}" ${c} 1`
case ${char_parsed} in
\<)
if [ `expr length "${main_content}"` -gt 0 ]
then
##echo $main_content
main_content_calc "${main_content}"
main_content=
fi
tag_active_toggle=1
;;
\>)
tag_content="${tag_content}${char_parsed}"
if [ `expr length "${tag_content}"` -gt 0 ]
then
##echo $tag_content
tag_content_calc "${tag_content}"
tag_content=
fi
tag_active_toggle=0
;;
*)
if [ ${tag_active_toggle} -eq 0 ]
then
main_content="${main_content}${char_parsed}"
fi
;;
esac
if [ ${tag_active_toggle} -eq 1 ]
then
tag_content="${tag_content}${char_parsed}"
fi
c=`expr ${c} + 1`
done
i=`expr ${i} + 1`
done < "${smi_file}"
if [ ${start_active_toggle} -eq 1 ]
then
copyrights tail
fi
if [ -f ${srt_file} ]
then
chmod 666 ${srt_file}
fi
echo "[`date '+%Y-%m-%d %H:%M:%S'`] Finished"
7. nksmi2srt.sh 실행권한
chmod 777 /volume1/homes/root/nksmi2srt.sh
8. crontab 설정
vi /etc/crontab
마지막 행에 아래 내용을 추가(1시간마다 실행)
## created by N.K Park
0 */1 * * * /volume1/homes/root/nkcrontab.sh > /volume1/homes/root/nkcrontab.log
9. crontab 재시작
synoservice -restart crond
여기까지 하시면, /volume1/video 밑에 있는 모든 폴더나 파일등
1시간마다 체크하여(8번에서 수정가능)
smi파일과 srt파일이 쌍으로 있으면 skip하고,
smi파일만 있는 것은 srt파일을 자동으로 생성합니다...
*** 본문수정(5.11일) 6번 nksmi2srt.sh version 1.0 -> 1.1 수정
빨간색으로 되어있는 sed 명령어 맨 마지막에서 ^M은 vi 편집기상에서 Ctrl+V 누르고 엔터키를 친 것입니다.
붙여넣기 하시면 안되니, 첨부파일을 참고하세요.
sed명령어로 완벽하게 작동합니다.
*** 본문수정(5.29일) 6번 nksmi2srt.sh version 1.1 -> 1.2 수정
srt 파일에 대해서 chmod 666 지정
***
첨부로 쉘스크립트 파일도 같이 올립니다...
[출처] 거의 모든 나스에서 smi 자막 자동으로 srt로 변환하는 스크립트 (NASCafe - NAS 클라우드 활용자모임 No.1 나스카페) |작성자 태랑
'쓸만한 글' 카테고리의 다른 글
[서울시] 우리동네 다자녀 혜택 (0) | 2018.12.10 |
---|---|
윈도우 인증 툴 (0) | 2018.12.10 |
믿음 소망 사랑 그중에 제일은....건강이다. (0) | 2018.11.28 |
모든 음식과 뉴스는 뜨거워야 제 맛이다. (0) | 2018.11.27 |
사랑이 식는 이유는 뜨거운 사랑의 횟수가 줄기 때문이다. (0) | 2018.11.26 |
[펌]“영수증 절대 만지지 마세요”… 환경호르몬 범벅 (0) | 2018.01.18 |
수면제 없이 1분 안에 잠드는 ‘4-7-8 호흡법’ (영상) (0) | 2015.07.06 |
돈이 모이는 집과 새나가는 집 (0) | 2015.07.06 |
스토리텔링... (0) | 2015.06.30 |
댓글