LoginSignup
2
1

More than 3 years have passed since last update.

Amazon Elastic Transcoder概要とLambdaからのJob実行

Last updated at Posted at 2020-10-12

Amazon Elastic Transcoder

映像・音声をユーザーが再生可能なフォーマットに変換するクラウドサービス

用語

  • Pipeline
    動画を通してトランスコードを行うパイプライン
    Pipeline ID が割り当てられ、Lambda 等から使用する際に指定
    以下主な設定項目

    • 変換元/先の S3 バケット
    • 変換完了 SNS 通知
  • Job
    Pipeline 内で実行するトランスコード処理
    Lambda 連携する場合は Lambda から生成、実行する
    以下主な設定項目

    • 変換元/先ファイル名
    • Preset
    • サムネイル生成等のオプション
  • Preset
    トランスコード内容をまとめた設定
    Job にてトランスコード内容として指定
    AWS で用意されているものかカスタムで生成したものを使用
    Preset ID が割り当てられ、Lambda 等から使用する際に指定
    Preset一覧:https://docs.aws.amazon.com/ja_jp/elastictranscoder/latest/developerguide/system-presets.html

アーキテクチャ例

0.png
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 例

  1. AWS マネジメントコンソールから Pipeline の作成
    Pipeline の名前、変換元/先の S3 バケット、サムネイルの出力先 S3 バケット等を指定
    1.png

  2. Job は Lambda から生成するため不要、Preset は用意されたものを使用するため不要

  3. S3 を以下構成で用意

  4. 入力用:

    • bucket : elastic-transcoder-dev-input
    • key : input/
  5. 出力用:

    • bucket : elastic-transcoder-dev-output
    • key : output/
  6. Lambdaトリガ設定

    • トリガとするサービス:S3
    • バケット:elastic-transcoder-dev-input
    • イベントタイプ:すべてのオブジェクト生成イベント
    • プレフィックス:input/
    • サフィックス:.webm
  7. Lambdaロール設定
    Elastic TranscoderにJobをSubmitできるポリシー「AmazonElasticTranscoder_JobsSubmitter」を追加します

  8. 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を生成しています
PipelineIdpresetId:AWSマネジメントコンソールで確認して指定
OutputKeyPrefix:出力先フォルダ
出力されるファイルは、OutputKeyPrefixOutput['key']になります

参考記事

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1