Amazon Elastic Transcoder
S3 に保存された動画・音声ファイルを複数のデバイス向けフォーマットに変換するメディアトランスコーディングサービス
概要
Amazon Elastic Transcoder は、S3 に保存された動画や音声ファイルを、スマートフォン、タブレット、PC、スマート TV など様々なデバイスで再生可能なフォーマットに変換するクラウドベースのトランスコーディングサービスです。入力ファイルを指定し、プリセット (出力フォーマットの設定テンプレート) を選択するだけで、H.264、VP8、VP9 などのコーデックへの変換、解像度の変更、ビットレートの調整を自動的に行います。パイプラインの概念で処理を管理し、優先度に応じたジョブのキューイングが可能です。HLS (HTTP Live Streaming) 形式への変換にも対応し、アダプティブビットレートストリーミングの配信準備を自動化できます。従量課金制で、変換した動画の分数に基づいて課金されます。
パイプラインとプリセットの設計
Elastic Transcoder の処理は、パイプライン、ジョブ、プリセットの 3 つの概念で構成されます。パイプラインは入力 S3 バケットと出力 S3 バケットを紐づける処理チャネルで、用途別 (例: 高優先度の本番用、低優先度のバッチ用) に複数作成できます。プリセットは出力フォーマットの詳細設定をテンプレート化したもので、コーデック、解像度、ビットレート、フレームレート、オーディオ設定などを定義します。AWS が提供するシステムプリセット (Generic 1080p、iPhone 4S、Web など) を使えば、主要デバイス向けの設定を即座に利用開始できます。カスタムプリセットでは、ビットレートの上限・下限、キーフレーム間隔、プロファイルレベル (H.264 の Baseline/Main/High) を細かく制御でき、画質とファイルサイズのバランスを最適化できます。サムネイル生成も同時に設定でき、動画の特定時点のフレームを JPEG/PNG として抽出し、プレビュー画像として利用できます。
HLS 変換とアダプティブビットレート配信の構築
Elastic Transcoder の重要な機能の 1 つが、HLS (HTTP Live Streaming) 形式への変換です。HLS は動画を短いセグメント (通常 10 秒) に分割し、マニフェストファイル (.m3u8) で管理する形式で、iOS、Android、Web ブラウザなど幅広いデバイスで再生可能です。アダプティブビットレートストリーミングを実現するには、同一の入力動画から複数のビットレート (例: 400kbps、800kbps、1500kbps、3000kbps) で HLS 出力を生成し、マスタープレイリストで束ねます。視聴者のネットワーク帯域に応じてプレーヤーが最適なビットレートを自動選択するため、バッファリングを最小化しつつ最高画質を提供できます。CloudFront と組み合わせて配信する設計が一般的で、S3 に出力された HLS セグメントを CloudFront でキャッシュ配信します。暗号化オプションとして AES-128 暗号化に対応しており、暗号化キーを別途管理するサーバーと組み合わせることで、コンテンツの不正ダウンロードを防止できます。
ジョブ管理とイベント駆動アーキテクチャの設計
Elastic Transcoder のジョブは非同期で実行され、完了通知を SNS トピックで受け取る設計が標準的です。パイプラインに SNS トピックを関連付けると、ジョブの開始、完了、エラー、警告の各イベントで通知が発行されます。イベント駆動アーキテクチャでは、S3 への動画アップロードをトリガーに Lambda を起動し、Elastic Transcoder のジョブを自動作成する設計が効果的です。Lambda 内で入力動画のメタデータ (解像度、長さ) を取得し、適切なプリセットを動的に選択するロジックを組み込めば、様々な入力フォーマットに自動対応できます。ジョブ完了後の SNS 通知を別の Lambda で受け取り、DynamoDB にトランスコード結果のメタデータを保存し、フロントエンドに再生可能な URL を返す一連のパイプラインを構築できます。エラーハンドリングとして、トランスコード失敗時にリトライキュー (SQS) に投入し、一定回数リトライしても失敗する場合はデッドレターキューに移動して手動確認する設計が堅牢です。コスト最適化の観点では、変換時間 (分単位) に基づく課金のため、不要な高解像度出力を省き、実際に視聴されるデバイスに必要な解像度のみを生成する設計が重要です。