본문 바로가기

AWS/PROJECT

[Project] AWS Transcribe를 이용해 자막 파일 만들기

728x90
프로젝트 소개

AWS Transcribe를 이용해 자막 파일을 만들기

- 유튜브 오디오 추출 사이트에서 오디오 파일을 만들고, S3에 업로드

- S3에 있는 파일을 람다 함수를 이용해 Transcribe를 자동으로 돌려서 결과(음성->문자 파일)를 S3 버킷에 업로드

 

추가적으로?

그걸 다시 가져와서, Translate 돌리기

또는 S3에 오디오 파일을 자동으로 저장하기 등등..

아직은.. 내 손으로 한 건 없다

 

그래서 뭘 했냐면

S3 버킷을 생성해 거기에 오디오 파일을 올려둔 상태이다

(버킷 이름은 온 AWS 세상에서 고유해야함)

 

람다 함수를 생성해서

https://docs.aws.amazon.com/transcribe/latest/dg/subtitles.html

 

Creating video subtitles - Amazon Transcribe

Amazon Transcribe uses a default start index of 0 for subtitle output, which differs from the more widely used value of 1. If you require a start index of 1, you can specify this in the AWS Management Console or in your API request using the OutputStartInd

docs.aws.amazon.com

위 링크에 있는 코드를 가져와서 돌린다

 

파라미터 값 참고 자료 : https://docs.aws.amazon.com/transcribe/latest/APIReference/API_StartTranscriptionJob.html#transcribe-StartTranscriptionJob-request-TranscriptionJobName

 

 

참고로 python버전으로 람다 함수를 생성했다

from __future__ import print_function
import time
import boto3
transcribe = boto3.client('transcribe', 'us-west-2')
job_name = "my-first-transcription-job" #유일무이
job_uri = "s3://DOC-EXAMPLE-BUCKET/my-input-files/my-media-file.flac" #오디오파일이 담긴 버킷
transcribe.start_transcription_job(
    TranscriptionJobName = job_name,
    Media = {
        'MediaFileUri': job_uri
    },
    OutputBucketName = 'DOC-EXAMPLE-BUCKET', #결과를 저장할 s3 버킷 이름
    OutputKey = 'my-output-files/', #s3버킷 내에 저장될 객체 이름
    LanguageCode = 'en-US', #AWS Transcribe에서 지원할 언어
    Subtitles = {
        'Formats': [
            'vtt','srt' #자막 파일 출력 형식 지정
        ],
        'OutputStartIndex': 1 #첫번째 자막 세그먼트에 할당되는 시작 값을 의미, 0과 1 중 1을 추천
   }
)

while True:
    status = transcribe.get_transcription_job(TranscriptionJobName = job_name)
    if status['TranscriptionJob']['TranscriptionJobStatus'] in ['COMPLETED', 'FAILED']:
        break
    print("Not ready yet...")
    time.sleep(5)
print(status)

주석 단 부분만 수정하면 되는 것이다...

 

근데 아마 저렇게 하고 람다 함수 생성해서 돌리면 제대로 되지 않을 것

왜냐면 boto3 버전이 달라서..

그렇기에..,,다시 한 번..

 

cmd창이든 터미널이든 boto3 라이브러리가 든 파이썬 zip 파일을 만들기 위해 아래 명령어를 입력한다

이때 pip3가 설치되어 있어야 한다..

모르겠으면 전 게시물 보세용

pip3 install boto3 폴더이름

그러면 뭐 다운이 되겠지?

 

나는 python이라는 폴더에 담아두었다

C드라이브 밑에 python이라는 폴더를 만들어서 그 밑에 boto3 라이브러리가 다운받아졌다

 

모르겠으면 이 링크 참고하기 : https://aws.amazon.com/premiumsupport/knowledge-center/lambda-python-runtime-errors/?nc1=h_ls 

 

Python(Boto 3) Lambda 함수 런타임 오류 문제 해결

Python(Boto 3) AWS Lambda 함수가 '알 수 없는 서비스', '파라미터 검증 실패' 또는 '객체에 속성이 없음' 오류를 반환합니다. 함수가 이러한 오류를 반환하는 이유는 무엇이며, 문제를 해결하려면 어떻

aws.amazon.com

그리고 이 python 파일을 .zip으로 압축하면 된다

 

그리고 이제 생성한 람다 함수, 거기에 레이어(layer, 계층)을 넣어야 한다

 

AWS Lambda 람다 콘솔 - 추가리소스 중 계층 선택

https://us-east-1.console.aws.amazon.com/lambda/home?region=us-east-1#/layers 

 

https://us-east-1.console.aws.amazon.com/lambda/home?region=us-east-1#/layers

 

us-east-1.console.aws.amazon.com

 

계층 생성 누르기

이름 넣어주고 [.zip파일 업로드] 선택하고 [업로드] 버튼을 눌러서 위에서 만든 python.zip 파일을 넣어준다.\

boto3 라이브러리가 담긴 zip 파일을 넣으면 됨~!~!

그리고 [생성]버튼을 눌러서 마무리

 

이걸 이제 아까 생성한 람다 함수에 추가하면 된다

어떻게 할거나면

아까 생성한 람다 함수 페이지에서 맨 밑으로 내리면 [계층]이라는 게 있다

 

[Add a layer]를 눌러주고

 

사용자 지정 계층이나 ARN 지정으로 선택하면 되는데

 

원래는 [사용자 지정 계층]에 있겠지만, 만약 없다면 [ARN 지정]을 눌러서 ARN을 추가하면 된다

이 ARN은 우리가 방금 만든 boto3_python이라는 계층 페이지에서 볼 수 있다

 

가린 링크 저게 바로 ARN인 것이다..

 

이렇게 추가해주고, 확인 버튼 누르고 [추가]버튼 누르면 계층이 추가된다!

짝짝 이로서 새로운 버전의 boto3를 사용할 수 있음!

 

좀 웃긴게 뭐냐면...

코드 넣고 [Deploy] - [Test] 하면 이렇게 로그가 뜨는데 상태도 Failed라고 뜬다

 

근데 정작 버킷을 확인해보면?

버킷 내에 객체에 이렇게 뜨는 것이다... 욱김...,,, 뭐지 왜지..?

 

암튼 파일을 확인 해보면,,.. srt형식이랑 vtt, json 파일 모두 잘 만들어졌고,

시간이랑 문장 모두 잘 추출되었음을 확인할 수 있다

 

신기하고 어리둥절..

 

아 만약에

{ "errorMessage":  Task timed out after 3.06 seconds" }

 라는 에러 메시지가 뜬다면

람다 함수 페이지 - 구성 - 일반 구성 - 편집을 눌러서 제한 시간을 늘려주면 된다. 기본은 3초인데 10초로 늘려줌

사실 이거 안고쳐도 Transcribe는 잘 된다..싱기

https://stackoverflow.com/questions/62948910/aws-lambda-errormessage-task-timed-out-after-3-00-seconds

 

참고한 블로그 : https://dev.classmethod.jp/articles/amazon-transcribe-subtitles-parameter-error-on-lambda-boto3/

 

 

오늘은 여기까지!

728x90