[PHP] SMI 파일형식의 자막을 JSON으로 내보내기
Programming/WEB2018. 7. 20. 00:55
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <?php $smipath = '' ; //파일 경로 $encodings_format_list = array ( 'EUC-KR' , 'UTF-16' , 'UTF-8' , 'ASCII' ); //검사할 인코딩 형식들 if ( is_file ( $smipath )) //올바른 파일 경로이면 { $fp = fopen ( $smipath , "r" ); $data = fread ( $fp , filesize ( $smipath )); $encoding_fail_count = 0; //인코딩에 실패한 횟수 foreach ( $encodings_format_list as $encodings_format ) { $encoding_output = iconv( $encodings_format , 'UTF-8' , $data ); if ( $encoding_output == '' ) $encoding_fail_count ++; //반환된 문자열이 없으면 인코딩 else break ; } if ( $encoding_fail_count == count ( $encodings_format_list )) //인코딩을 모두 실패하면 echo "인코딩 형식이 잘못되었습니다." ; } else //잘못된 파일 경로이면 { echo "파일이 존재하지 않습니다." ; } $track_array = explode ( "<SYNC START=" , strtoupper ( $encoding_output )); for ( $i = 1; $i < count ( $track_array ); $i ++) { $token = stripos ( $track_array [ $i ], ">" ,0); //시간과 텍스트 >로 분리 $track_time = substr ( $track_array [ $i ] , 0, $token ); //시간 부분 추출 $track_text = substr ( $track_array [ $i ] , $token +1); //자막텍스트 부분 추출 //필요한 데이터만 배열로 저장 $out_data [ $i -1][ 'time' ] = $track_time ; $out_data [ $i -1][ 'text' ] = $track_text ; } //저장된 배열을 JSON형태로 바꾼후 내보내기 $json = json_encode( $out_data ,JSON_UNESCAPED_UNICODE); print ( $json ); ?> |
이 PHP소스를 돌리면 대부분의 한국어로된 자막은 읽을수 있다.
일부 ANSI 파일은 PHP에서 제공하는 모든 인코딩 형식으로 인코딩해도 제대로 출력되지 않았다.
이경우에는 직접 파일 인코딩 형식을 바꿔줘야 함 (메모장으로도 가능)
파일 경로는 GET으로 받아도 되고 직접 입력해도 되고 필요에 따라 수정
[출력 참조]
자막이 재생되는 시간을 ['time'] 자막 내용을 ['text']로 정했다.
smi 자막 형식은 HTML태그와 매우 유사하기 때문에 웹에서 사용 할 경우 ['text']를 따로 가공하지 않고 그대로 사용 하면 된다.
또한 문장마다 시작부분만 있고 끝나는 부분이 없기때문에 중간중간 를 넣어 마치 끝이 있는것 처럼 빈화면을 출력한다.
끝
'Programming > WEB' 카테고리의 다른 글
VIDEO PLAYER JS PHP CSS (0) | 2018.05.08 |
---|