>> Read No. 2563 article  
간단한 자막(smi)시간 조정. (awk버전)

등록 2002-06-15 03:25:00     조회 4
이름 단n키    

		음 일전에 grep과 sed, awk를 조합한 자막 파일 시간을 수정하는 것에 대해 올린 적이 있었는
데..  아무래도 awk만으로 해결할 수 있지 않을까.. 하는 생각이 들었습니다.
 그래서 만들었습니다. emoticon;;
 우선.. awk 스크립트입니다.
물론 마음대로 수정하셔도 됩니다.(관심이 있으시다면 emoticon)
 --------------
# 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>&nbsp;
<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>&nbsp;
 와 같이..
 한 줄에 하나의 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)까지 편집할 수도 있습니다.
 이것이 어디에 쓰이냐면...
중간에 자막 순서가 뒤바뀌어서 실제로 자막이 출력되지 않을 경우
부분적인 편집이 가능하도록 하기 위해서 입니다.
(범위 지정 잘못했다가.. 피 본 경험에서 우러나온.. emoticon)
  ### 한 가지 주의하실 것은 수정할 자막 파일과, 새롭게 생성시킬 자막 파일이 같을 수 없
습니다. 중요합니다!! 최악으로 자막파일이 모조리 삭제될 염려가 있으니 정말 주의 하세
요.. 그리고 원본은 백업차원에서 우선 그냥 두는 것이 좋을 듯 싶습니다.
수정된 자막파일이 완성되기 전까지는 말이죠.
  쓰기가 불편하죠? 이것을 가지고 shell script를 자신의 기호에 맞게
만드시면 좀 더 쓰시기 편리할 것이라는 생각이 듭니다.
 특히 시와 분을 milli-second로 변환해서 넘겨줘야하는 부분은 짜증이 나니깐...
스크립트로 처리하는 것이 훨씬 좋을 것입니다.
잠깐... awk로도 처리할 수 있겠군요 emoticon;;
틈틈이 업데이트 하겠습니다. emoticon;;
 음... 요즘들어 perl을 공부하고 싶다는 생각이 굴뚝같은데...
지금 공부하는 것도 벅찬 지경이라..
 perl고수님께서 perl버전을 만들어 주심이 어떠 하신지요? emoticon;;
이름
암호
  목록보기 윗글 아랫글
글쓰기
답장쓰기 수정 삭제
정규표현식 [ 상세 검색 ]
페이지로딩: [ 1.12 초 ] 작업시간: [ 0.1 초 ]

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved
[TOP]

적수네 동네
+
| 적수네 동네
| 공부방
| 리눅스 잡지 서고
| LSN 소스
| 링크 모음
+---+
게시판
+
| 떠들어보세!
| 질문과 답변
| 새소식과 정보
| 1원짜리 팁?
| 대화방
+---+
칼럼?
+
| 세하 훔쳐보기
| Welcome2nite
| 혜진의 염장판
+---+
리눅스 상표권
+
| 반대 서명란
| 토론 게시판
+---+
GNU
+
| GNU 선언문
| GNU GPL
| GNU 미러 목록
+---+
프로젝트?
+
| 리눅스카운터
| RC5DES
| 실질헌법 제작
+---+
커널 소식
+
| 안정 버젼: 2.4.14
+---+
테마 선택
+
LSN 방송국?
+
| OFF AIR
+---+
회원
+
| 로그인
+---+
[ 적수네 동네 ] [ 리눅스 상표권 독점 반대 ] [ 한글 리눅스 문서 프로젝트 ] [ KrLine ] [ 사랑넷 ] [ Valid HTML 4.0! ] [ SlashDot ] [ Freshmeat ]
Copyleft (C) 1998-2001 Byeong-Chan Kim . License
TIME: 1791025407
System by WYZsoft, HDD by I.O.Linux, Mizi Research, Embryo, WOWLINUX, Domain by SarangNet, Network by KrLine.