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
アーキテクチャ例
- 動画が S3 にアップロードされたことをトリガに Lambda を実行
- Lambda で Amazon Elastic Transcoder の Job を実行
- 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 マネジメントコンソールから 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をSubmitできるポリシー「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マネジメントコンソールで確認して指定
OutputKeyPrefix
:出力先フォルダ
出力されるファイルは、OutputKeyPrefix
+Output['key']
になります