Amazon Elastic Transcoder 개요 및 Lambda에서 Job 실행

Amazon Elastic Transcoder



영상·음성을 사용자가 재생 가능한 포맷으로 변환하는 클라우드 서비스

용어



  • 파이프라인
    동영상을 통해 트랜스코딩하는 파이프라인
    Pipeline ID가 할당되어 Lambda 등에서 사용할 때 지정
    다음 주요 설정 항목
  • 소스/대상 S3 버킷
  • 변환 완료 SNS 알림


  • Job
    Pipeline 내에서 실행되는 트랜스 코딩 처리
    Lambda 연동하는 경우 Lambda에서 생성, 실행
    다음 주요 설정 항목
  • 원본/대상 파일 이름
  • Preset
  • 썸네일 생성 등의 옵션

  • Preset
    트랜스코딩 내용을 정리한 설정
    Job에서 트랜스코딩 내용으로 지정
    AWS에서 제공하거나 사용자 정의 생성을 사용
    사전 설정 ID가 할당되고 Lambda 등에서 사용할 때 지정
    Preset 목록: htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 에 s ctct 란 s 여기 r / ㅁ st / ゔ ぇ ぺ ぺ ぐ で / sys로 mep 할 수 ts. HTML

  • 아키텍처 예




    1. 동영상이 S3에 업로드되었음을 트리거하기 위해 Lambda 실행
    2. Lambda에서 Amazon Elastic Transcoder Job 실행
    3. Amazon Elastic Transcoder가 S3의 원본 동영상에서 트랜스코딩하여 S3로 출력

    트랜스코딩 시간



    전 동영상의 50~100% 정도

    요금 시산



    무료 테두리


  • SD: 20분
  • HD: 10 분

  • 1일 1시간 동영상을 트랜스코딩한 경우


  • SD(480p)의 경우
    (1시간 × 30일 × 60분 - 20분) × 0.017USD = 30.26USD = 3177엔
  • HD(720p)의 경우
    (1시간 × 30일 × 60분 - 10분) × 0.034USD = 60.86USD = 6390엔

  • Amazon Elastic Transcoder + Lambda 예제


  • AWS Management Console에서 Pipeline 생성
    Pipeline의 이름, 변환 소스/대상 S3 버킷, 썸네일 출력 대상 S3 버킷 등을 지정
  • Job은 Lambda에서 생성하기 때문에 필요하지 않습니다. Preset은 제공된 것을 사용하기 때문에 필요하지 않습니다.
  • 다음 구성으로 S3 준비

  • 입력용:
  • bucket : elastic-transcoder-dev-input
  • key : input/


  • 출력용:
  • bucket : elastic-transcoder-dev-output
  • key : output/


  • Lambda 트리거 설정
  • 트리거 서비스: S3
  • 버킷: elastic-transcoder-dev-input
  • 이벤트 유형: 모든 객체 생성 이벤트
  • 접두사: input/
  • 접미사: .webm

  • Lambda 역할 설정
    Elastic Transcoder에 Job을 제출할 수 있는 정책 AmazonElasticTranscoder_JobsSubmitter 추가
  • Lambda 구현
    다음 샘플
  • let aws = require('aws-sdk');
    let s3 = new aws.S3({apiVersion: '2006-03-01'});
    let ets = new aws.ElasticTranscoder({apiVersion: '2012-09-25', region: 'ap-northeast-1'});
    
    exports.handler = function(event, context) {
    
      let pipelineId = 'xxxxxxxxxxxxx-xxxxx';
      let presetId = '1351620000001-000030';
    
      let bucket = event.Records[0].s3.bucket.name;
      let key = event.Records[0].s3.object.key;
      let fileName = (key.split('/')[1]).split('.')[0];
    
      ets.createJob({
        PipelineId: pipelineId,
        OutputKeyPrefix: 'output/',
        Input: {
          Key: key,
          FrameRate: 'auto',
          Resolution: 'auto',
          AspectRatio: 'auto',
          Interlaced: 'auto',
          Container: 'auto',
        },
        Output: {
          Key: fileName + '.mp4',
          ThumbnailPattern: fileName + '-thumbs-{count}',
          PresetId: presetId,
          Rotate: 'auto'
        }
      }, 
      function(error, data) {
       if(error) {
           console.log(error);
           context.done('error',error);
       } else {
           console.log('Job submitted');
           context.done(null,'')
       }
      });
    }
    
    ets.createJob : Job 생성 중PipelineId, presetId : AWS Management Console에서 확인 및 지정OutputKeyPrefix : 출력 대상 폴더
    출력되는 파일은 OutputKeyPrefix + Output['key']입니다.

    참고 기사


  • htps : // 코 m / 콘 _ 물집 / ms / b58 A5 017 E7c9 A b2356b
  • htps : // 이 m / 하야시 r / ms / 5407134 95 b3927f25
  • 좋은 웹페이지 즐겨찾기