Amazon Web Services 한국 블로그

Amazon Transcribe를 이용한 자동 자막 생성하기

Amazon Transcribe는 딥러닝을 통한 자동 음성 인식(Automatic Speech Recognition, ASR)위한 기계 학습 애플리케이션 서비스로서, 지난 4월에 일반 사용자들에게 정식 출시하였습니다. 현재는 영어와 스페인어의 음성 파일에 대한 인식을 지원하며, 최대 2시간의 오디오 및 비디오를 지원합니다. 가능한 한 빠르게 추가 언어에 대한 지원을 제공할 예정입니다.

이 글에서는 Amazon Transcribe를 이용하여 서버리스 기반으로 자동으로 자막을 생성하는 애플리케이션을 구성하는 방법을 소개 드립니다. 자동 자막 생성 애플리케이션의 서비스 구성 요소 및 샘플 아키텍처는 다음과 같습니다.

  • Amazon S3 – 정적 홈페이지를 호스팅 하여, 간단한 파일 업로드를 수행합니다.
  • AWS Lambda 함수 – 인식 요청 및 작업 상태 및 자막 변환을 수행합니다.
    • Transcribe Request
    • Check Job Status
    • Convert to Caption
  • Amazon Transcribe – 음성 파일에서 원하는 언어로 인식을 진행합니다.
  • Amazon Simple Notification Service (SNS) – 작업 상태 및 완료 여부를 알려줍니다.
    • Job in Progress
    • Job Completed

위의 구성 요소를 통해 다음과 같은 과정을 통해 실행됩니다.

  1. 음성 또는 영상 파일 업로드: mp3, wav, flac 및 mp4 포맷 지원
  2. Amazon S3버킷의 객체 생성 이벤트에 의한 ‘Transcribe Request’ Lambda 함수 호출
  3. ‘Transcribe Request’ Lambda함수에 의한 Transcribe 서비스 (STT, Speech to Text) 요청
  4. Transcribe 서비스의 요청 수신 응답
  5. ‘Transcribe Request’ Lambda 함수에 의한 ‘Job in Progress’ SNS 메세지 생성
  6. ‘Job in Progress’ SNS 메세지에 의한 ‘Check Job Status’ Lambda 함수 호출
  7. ‘Check Job Status’ Lambda 함수에 의한 Transcribe Job Status 확인*
  8. Transcribe 서비스의 Job Status 응답
  9. Job Status Check
    • Job Status가 IN_PROGRESS인 경우 Job in Progress’ SNS 메세지 생성: 6)번 단계로 이동
    • Job Status가 COMPLETED인 경우 ‘Job Completed’ SNS 메세지 생성: 10)번 단계로 이동
  10. ‘Job Completed’ SNS 메세지에 의한 ‘Convert To Caption’ Lambda 함수 호출
  11. ‘Convert To Caption’ Lambda 함수를 이용한 Transcription Output의 웹 캡션 형식(.vtt)으로 변환 및 S3 버킷에 .vtt 파일 저장

* 현재 Transcribe 서비스는 Job Status에 대한 Notification을 지원하지 않아, 외부에서 주기적으로 Job Status를 확인하는 용도로 ‘Check Job Status’ Lambda함수를 사용하였습니다. Amazon Transcoder와 같이 Job Status Notification을 지원하게 되면, ‘Check Job Status’ Lambda 함수를 사용하지 않고, Transcribe가 생성하는 SNS Message 또는 이벤트 등을 이용하여 “Convert to Caption” Lambda 함수가 실행할 수 있을 것입니다.

Transcribe API와 Lambda 함수

Amazon Transcribe는 현재 StartTranscriptionJob, GetTranscriptionJob, 그리고 ListTranscriptionJobs 의 세개의 API를 지원합니다. 각 API 호출 시 요청 및 응답 문법과 파라메터는 Amazon Transcribe API 문서에 정의 되어 있으니, 문서를 확인 하시면 각 함수의 용도 및 사용법을 쉽게 아실 수 있습니다.

이 글에서 소개드리는 Lambda 함수의 코드는 실제 문법과는 약간 차이가 있습니다. 또한, 애플리케이션 아키텍처에서 ‘Job Completed’ SNS 메세지와 ‘Convert to Caption’ Lambda 함수는 ‘Check Job Status’와 통합하여 Lambda함수 하나로 구현할 수도 있으나, 각 단계별 과정을 말씀드리기 위하여 분리해 놓았습니다.

이들 Lambda 함수에서 Transcribe API 함수들을 다음과 같이 사용하였습니다.

Transcribe Request

language_code = "en-US" // en-US | es-US
// e.g. "https://s3.amazonaws.com/$BucketName/$KeyName"
media_uri = "path/to/s3/object"; // string
media_format = "mp4"; // mp3 | wav | flag | mp4
job_name = "user_assigned_job_name"; // string
trans_params = {
   LanguageCode: language_code,
   Media: { MediaFileUri: media_uri },
   MediaFormat: media_format,
   TranscriptionJobName: job_name
};
response = Transcribe.startTranscriptionJob( trans_params );
SNS.publish( "job_in_progress_message" );

Check Job Status

var job_name = "user_assigned_job_name"; // string
var trans_params = {
  TranscriptionJobName: job_name
};
var resposnse = Transcribe.getTranscriptionJob( trans_params );
if ( response == IN_PROGRESS ) {
  SNS.publish( "job_in_progress_message" );
}
else {
  SNS.publish( "job_completed_message" );
}

Convert to Caption

var output = getTranscriptionResult( );
var caption = convertToCaption( output );
S3.putObject( caption );

자동 자막 생성 결과 보기

아래 그림은 자막 생성 후 캡쳐 화면을 보여줍니다. 아래 캡쳐 이미지에서 보실 수 있듯이, 캡션이 있는 영상은 ‘CC’라는 아이콘과 함께 캡션이 화면에 표시됩니다. HTML의 video 와 track 태그를 이용하시면 손쉽게 생성된 캡션을 추가할 수 있습니다.

이제 Amazon Transcribe의 Output 및 변환된 자막 파일에 알아봅니다. Amazon Transcribe의 Output은 아래와 같은 JSON 포맷으로 받을 수 있으며, 자막 파일은 아래와 같이 변환된 형식으로 웹 상에 게재됩니다.

Output JSON

{
"jobName": "job_ID",
"accoundId": "account_ID",
"results": {
  "transcripts": [
  {
    "transcript": "This is a sample transcribe result."
  }
],
"items": [
  {
    "start_time": "0.010",
    "end_time": "0.330",
    "alternatives": [
  {
    "confidence": 0.99,
    "content": "This"
}
],
"type": "pronunciation"
},
{
    "start_time": "0.334",
    "end_time": "0.450",
    "alternatives": [
  {
    "confidence": 0.99,
    "content": "is"
}
],
"type": "pronunciation"
},
{
    "start_time": "0.334",
    "end_time": "0.450",
    "alternatives": [
  {
    "confidence": 0.99,
    "content": "is"
}
],
"type": "pronunciation"
},
{
"alternatives": [
  {
"content": ","
}
],
"type": "punctuation"
},

……
]
},
"status": "completed"
}

.VTT 자막 파일

WEBVTT
1
00:00:00.010 --> 00:00:01:220
This is a sample caption file.

2
00:00:01.510 --> 00:00:02:410
This is a sample caption file.

……

이상으로 Amazon Transcribe를 사용한 자동 자막 생성 애플리케이션에 대하여 간략하게 알아보았습니다. Amazon Transcribe는 현재 미국 동부(버지니아 북부), 미국 서부(오레곤), 미국 동부(오하이오) 및 EU(아일랜드)에서 사용할 수 있습니다. Transcribe의 프리 티어를 이용하면 처음 12개월 동안 매월 60분 분량의 기록을 무료로 이용할 수 있으며, 이후 기록된 오디오를 기준으로 초당 0.0004 USD의 비용(최소 요금 기준 15초)으로 사용량에 따른 과금 모델로 이용할 수 있습니다.

앞으로 다양한 언어 지원이 확대되는 만큼 미리 테스트 해보시면서 다양한 새로운 서비스를 접목해 보시기 바랍니다.

이 글은 AWS의 솔루션즈 아키텍트로 일하는 조용진님께서 작성해주신 한국어 기술팁입니다.