[PHP] SMI 파일형식의 자막을 JSON으로 내보내기
Programming/WEB2018. 7. 20. 00:55
<?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 |
---|