RaGo


<?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']를 따로 가공하지 않고 그대로 사용 하면 된다.


또한 문장마다 시작부분만 있고 끝나는 부분이 없기때문에 중간중간 &nbsp; 를 넣어 마치 끝이 있는것 처럼 빈화면을 출력한다. 





'Programming > WEB' 카테고리의 다른 글

[PHP] SMI 파일형식의 자막을 JSON으로 내보내기  (1) 2018.07.20
VIDEO PLAYER JS PHP CSS  (0) 2018.05.08

Comment +1