>> Edit article
이름
제목
패스워드
음 일전에 grep과 sed, awk를 조합한 자막 파일 시간을 수정하는 것에 대해 올린 적이 있었는데.. 아무래도 awk만으로 해결할 수 있지 않을까.. 하는 생각이 들었습니다. 그래서 만들었습니다. -.-;; 우선.. awk 스크립트입니다. 물론 마음대로 수정하셔도 됩니다.(관심이 있으시다면 ㅠ.ㅠ) -------------- # file_name: adj_smi.awk # last modified: 2002.6.15. # awk script for adjustment of sync time in *.smi file $0 ~ /<[Ss][Yy][Nn][Cc] / { orig_time = GetTime($0); if (from_line == "" || from_line <= NR) { if (to_line == "" || NR <= to_line) { if (from == "" || from <= orig_time) { if (to == "" || orig_time <= to) { chg_time = orig_time + adj_time; gsub(orig_time, chg_time); } } } } print; } $0 !~ /<[Ss][Yy][Nn][Cc] / { print; } # get sync time from the such expression as "<SYNC start=1234><P Class=KRCC>" # you can expect that return value will be "1234" in this situation. function GetTime(str, i, j, len, tmp, time) { # split whole string to array "tmp" by one character split(str, tmp, ""); len = length(str); for (i = 1; i < len; i++) { if (tmp[i] == "=") { # after "=", digits which we wanna get will probably(?) follow, # and... continue up to ">". for (j = i+1; j < len; j++) { if (tmp[j] != ">") time = time tmp[j]; else { # return time and quit the function. return (time+0); } } } } } ------------------ <SYNC Start=2682376><P Class=KRCC> 해리 포터 <SYNC Start=2684229><P Class=KRCC> <SYNC Start=2701741><P Class=KRCC> 음...어렵군. 아주 어려워. <SYNC Start=2705956><P Class=KRCC> 아주 많은 용기를 볼 수 있구나. <SYNC Start=2708168><P Class=KRCC> 나쁜 마음도 없고 <br>재능이 있다. <SYNC Start=2711539><P Class=KRCC> 오~ 그래.<br>자신의 존재를 입증하려는 멋진 열망. <SYNC Start=2716577><P Class=KRCC> 와 같이.. 한 줄에 하나의 SYNC가 있을 것이라고 가정해서 만들었습니다. (제약을 가하는 것은 좋지 않으니 수정을 해야겠습니다..) 사용법은 이렇습니다. from과 to는 변경하고자 하는 시간대를 정합니다. adj_time은 변경할 시간의 양을 정합니다. 3가지 변수 모두 단위는 ms(1/1000 초)입니다. 모든 범위에서 시간을 1초 뒤로 미룰경우 $ awk -f adj_smi.awk -v adj_time=1000 자막파일.smi > 새로운자막파일.smi 30분 부터 마지막까지 1초 앞으로 당길 경우 $ FROM=$((30*60*1000)) $ awk -f adj_smi.awk -v from=$FROM adj_time=-1000 자막파일.smi > 새로운자막파일.smi # to는 지정하지 않아도 됩니다. 30분 부터 1시까지 1초 뒤로 미룰 경우 $ FROM=$((30*60*1000)) $ TO=$((1*60*60*1000)) $ awk -f adj_smi.awk -v from=$FROM to=$TO adj_time=1000 자막파일.smi > 새로운자막파일.smi 처음부터 30분까지 할 경우는?? FROM만을 썼던 예에서와 마찬가지로.. 시간을 범위로 수정할 수 있는 것처럼 자막 파일에서 몇 번째 줄(from_line)부터 몇번째 줄(to_line)까지 편집할 수도 있습니다. 이것이 어디에 쓰이냐면... 중간에 자막 순서가 뒤바뀌어서 실제로 자막이 출력되지 않을 경우 부분적인 편집이 가능하도록 하기 위해서 입니다. (범위 지정 잘못했다가.. 피 본 경험에서 우러나온.. ㅠ.ㅠ) ### 한 가지 주의하실 것은 수정할 자막 파일과, 새롭게 생성시킬 자막 파일이 같을 수 없습니다. 중요합니다!! 최악으로 자막파일이 모조리 삭제될 염려가 있으니 정말 주의 하세요.. 그리고 원본은 백업차원에서 우선 그냥 두는 것이 좋을 듯 싶습니다. 수정된 자막파일이 완성되기 전까지는 말이죠. 쓰기가 불편하죠? 이것을 가지고 shell script를 자신의 기호에 맞게 만드시면 좀 더 쓰시기 편리할 것이라는 생각이 듭니다. 특히 시와 분을 milli-second로 변환해서 넘겨줘야하는 부분은 짜증이 나니깐... 스크립트로 처리하는 것이 훨씬 좋을 것입니다. 잠깐... awk로도 처리할 수 있겠군요 -.-;; 틈틈이 업데이트 하겠습니다. -.-;; 음... 요즘들어 perl을 공부하고 싶다는 생각이 굴뚝같은데... 지금 공부하는 것도 벅찬 지경이라.. perl고수님께서 perl버전을 만들어 주심이 어떠 하신지요? ^^;;
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved