目次
Amazon Elastic Transcoder v2.0 完全ガイド(レガシー・廃止予定)
公式ドキュメント・重要通知
- Amazon Elastic Transcoder Product Page
- Elastic Transcoder Developer Guide
- 【重要】Support Ending Notice: Support for Amazon Elastic Transcoder ending soon
- 【推奨】Migration Guide: Migrating workflows from Elastic Transcoder to MediaConvert
- Pricing
1. 【重要】サービス廃止通知
End of Support: 2025 年 11 月 13 日
警告: Amazon Elastic Transcoder は 2025 年 11 月 13 日に サポート終了。この日付以降は AWS による機能改善・セキュリティパッチ・技術サポートが完全に終了します。現在 Elastic Transcoder をご利用のお客様は、直ちに AWS Elemental MediaConvert への移行を開始すること。
タイムライン
2024年10月: AWS、Elastic Transcoder 廃止を発表
↓
2025年11月13日: 完全サポート終了
├─ API 呼び出し: 継続可能(応答なし)
├─ コンソール: アクセス不可
├─ 新しいパイプライン: 作成不可
└─ セキュリティアップデート: 提供なし
↓
2026年以降: インシデント時のサポート完全終了
2. Elastic Transcoder(レガシー)の本質と位置付け
Amazon Elastic Transcoder は 「S3 に保存された動画ファイルを別フォーマット・別解像度に変換するマネージド動画トランスコードサービス」。Pipeline(処理キュー)・Job(変換ジョブ)・Preset(出力設定)の 3 つの概念で動作。2010 年代中盤に AWS の標準トランスコード機能として提供開始されたが、2020 年代の高度なビデオ処理ニーズ(4K / HDR / DRM / DASH / CMAF)に対応できず、後継サービス AWS Elemental MediaConvert が 2015 年に登場。以降、Elastic Transcoder は機能追加なし・廃止へ。
Elastic Transcoder が選ばれ続けた理由(歴史的背景)
レガシーシステムの継続運用
- 2014-2016 年に Elastic Transcoder で構築された既存のトランスコード基盤は、数百万ドルのビジネス依存度が高く、急激な廃止は困難
- 既存 Pipeline / Job / Preset の設定が固定化され、変更コストが高い
シンプルな MP4 / HLS 変換の慣性
- シンプルな「MP4 入力 → HLS 出力」ユースケースでは、複雑な MediaConvert 設定より Elastic Transcoder が「分かりやすい」と感じるユーザーが一定数存在
移行コストの遅延
- 企業の優先順位は「新規開発」> 「レガシー刷新」のため、廃止発表後も移行が遅延
3. Elastic Transcoder vs AWS Elemental MediaConvert(詳細比較)
機能比較表
| 機能 / 観点 | Elastic Transcoder(廃止予定) | MediaConvert(推奨) |
|---|---|---|
| サービス提供状態 | 2025/11/13 廃止 | ✓ 継続・機能拡張中 |
| 対応コーデック | H.264, H.265, VP8, VP9, Theora | H.264, H.265, AV1, ProRes, DNxHD 等 20+ |
| 入力フォーマット | MP4, MOV, AVI, FLV, MXF, WebM 等 | 上記 + DCP, IMF, SMPTE 2110 等 |
| 出力フォーマット | HLS, MP4, MPEG-TS, WebM 等 | HLS, DASH, CMAF, MPEG-TS, MSS 等 |
| DRM サポート | ✗ HLS 暗号化のみ | ✓ Widevine, FairPlay, PlayReady(SPEKE) |
| 字幕対応 | SRT(限定的) | SRT, TTML, CEA-608, CEA-708, DVB-Sub, IMSC 等 |
| 4K サポート | ✗ | ✓ 4K / 8K対応 |
| HDR サポート | ✗ | ✓ HDR10, HLG, Dolby Vision |
| QVBR | ✗(固定 / VBR のみ) | ✓ 品質ベース可変ビットレート |
| Color Space Convert | 限定的 | ✓ Rec.709 / Rec.2020 / DCI P3 |
| Watermark | ✓ 対応 | ✓ 対応(高度) |
| ライブ配信 | ✗ | ✗ MediaLive を別途使用 |
| API 複雑度 | 低(シンプル) | 中(詳細設定可能) |
| 料金(SD 480p) | $0.017/分 | $0.0075/分 |
| 料金(HD 1080p) | $0.034/分 | $0.015/分 |
| 料金(4K) | 非対応 | $0.054/分 |
| コスト比較 | ベースライン(100%) | 削減率: -56%(HD 同等品質) |
詳細差分
Elastic Transcoder の制限:
✗ 4K / 8K 未対応 → MediaConvert で対応
✗ HDR(HDR10 / HLG)未対応 → MediaConvert で対応
✗ DRM(Widevine / FairPlay / PlayReady)未対応 → MediaConvert で対応
✗ QVBR(品質ベース可変ビットレート)未対応 → MediaConvert で対応
✗ DASH / CMAF 出力 → MediaConvert で対応
✗ 字幕種別限定(SRT のみ)→ MediaConvert で対応
✗ Color Space 管理不足 → MediaConvert で詳細制御
✗ 機能追加なし(2015 年以降停止)→ MediaConvert は継続改善
MediaConvert の追加コスト:
= HD 対応品質: $0.015/分(ET: $0.034 → MC: $0.015)
= コスト削減率: 56%
= 1 月 1000 時間処理: $900 削減(ET $2,040 → MC $900)
4. Elastic Transcoder の仕組み(参考・廃止予定)
Pipeline(処理キュー)の構成
┌──────────────────────────────────────────────────────────┐
│ Pipeline: "MyTranscodingPipeline" │
│ (複数のジョブを順序立てて処理) │
│ │
│ Input Bucket: s3://my-video-input-bucket/ │
│ Output Bucket: s3://my-video-output-bucket/ │
│ │
│ Status Queue(進捗通知): │
│ ├─ Progress SNS: arn:aws:sns:us-east-1:xxx:transcoding │
│ ├─ Complete SNS: arn:aws:sns:us-east-1:xxx:transcoding │
│ ├─ Error SNS: arn:aws:sns:us-east-1:xxx:transcoding │
│ └─ Warning SNS: arn:aws:sns:us-east-1:xxx:transcoding │
│ │
│ Role: arn:aws:iam::123456789012:role/Transcoder_Role │
│ Thumbnail Configuration: │
│ ├─ Pattern: frame_{count} │
│ ├─ Interval: 5 seconds │
│ └─ Max Width: 120px │
│ │
└──────────────────────────────────────────────────────────┘
│
│ Job Submission
▼
┌──────────────────────────────────────────────────────────┐
│ Job: "Job-20260427-001" │
│ Input: s3://input-bucket/video.mp4 │
│ Output Options: │
│ ├─ Output 1: HLS 400k(Preset: 1351620000001-200045) │
│ ├─ Output 2: HLS 1M(Preset: 1351620000001-200035) │
│ └─ Output 3: MP4 1080p(Preset: 1351620000001-100010)│
│ │
│ Playlist: output/master.m3u8 │
│ ├─ Format: HLSv3 │
│ └─ OutputKeys: │
│ ├─ output/hls-400k.m3u8 │
│ ├─ output/hls-1m.m3u8 │
│ └─ output/mp4-1080p.mp4 │
│ │
└──────────────────────────────────────────────────────────┘
│
│ Transcoding(Elastic Transcoder が処理)
▼
┌──────────────────────────────────────────────────────────┐
│ Output Files in S3 │
│ ├─ output/hls-400k-00001.ts │
│ ├─ output/hls-400k-00002.ts │
│ ├─ output/hls-400k.m3u8 │
│ ├─ output/hls-1m-00001.ts │
│ ├─ output/hls-1m.m3u8 │
│ ├─ output/mp4-1080p.mp4 │
│ └─ thumbnails/frame_00000.png │
│ frame_00005.png ... frame_00300.png │
│ │
└──────────────────────────────────────────────────────────┘
Job の実装例(参考)
# Elastic Transcoder - Pipeline 作成(廃止予定)
aws elastictranscoder create-pipeline \
--name "MyTranscodingPipeline" \
--input-bucket my-video-input-bucket \
--output-bucket my-video-output-bucket \
--role arn:aws:iam::123456789012:role/Elastic_Transcoder_Default_Role \
--notifications '{
"Progressing": "arn:aws:sns:us-east-1:123456789012:transcoding",
"Completed": "arn:aws:sns:us-east-1:123456789012:transcoding",
"Warning": "arn:aws:sns:us-east-1:123456789012:transcoding",
"Error": "arn:aws:sns:us-east-1:123456789012:transcoding"
}' \
--content-config '{
"Bucket": "my-video-output-bucket",
"StorageClass": "Standard",
"Permissions": [
{
"GranteeType": "AllUsers",
"Access": ["Read"]
}
]
}' \
--thumbnail-config '{
"Bucket": "my-thumbnail-bucket",
"StorageClass": "ReducedRedundancy",
"Permissions": [
{
"GranteeType": "AllUsers",
"Access": ["Read"]
}
]
}'
# Job 作成(廃止予定)
aws elastictranscoder create-job \
--pipeline-id 1234567890123-abcdef \
--input '{"Key": "input/sample-video.mp4"}' \
--outputs '[
{
"Key": "output/hls-400k",
"PresetId": "1351620000001-200045",
"SegmentDuration": "10",
"Watermarks": [
{
"PresetWatermarkId": "watermark-123"
}
]
},
{
"Key": "output/hls-1m",
"PresetId": "1351620000001-200035",
"SegmentDuration": "10"
}
]' \
--playlist-format HLSv3 \
--playlist '{
"Format": "HLSv3",
"Name": "output/playlist",
"OutputKeys": ["output/hls-400k", "output/hls-1m"]
}'
5. MediaConvert への移行(必須)
移行の必要性・利点
| 項目 | Elastic Transcoder | MediaConvert |
|---|---|---|
| サポート終了 | 2025/11/13 | なし(継続) |
| コスト削減 | ベース | -56%(HD) |
| 4K サポート | ✗ | ✓ |
| HDR サポート | ✗ | ✓ DolbyVision |
| DRM | ✗ | ✓ SPEKE |
| 品質 | VBR | QVBR(品質保証) |
| 字幕 | SRT | 10+ フォーマット |
移行パスと実装例
Step 1: MediaConvert エンドポイント準備
import boto3
# MediaConvert は Queue / Endpoint を使用する設計
mediaconvert = boto3.client('mediaconvert', region_name='us-east-1')
# エンドポイント取得(必須)
endpoints = mediaconvert.describe_endpoints()
endpoint_url = endpoints['Endpoints'][0]['Url']
# エンドポイント指定クライアント生成
mc = boto3.client(
'mediaconvert',
region_name='us-east-1',
endpoint_url=endpoint_url
)
print(f"MediaConvert Endpoint: {endpoint_url}")
Step 2: 既存 Elastic Transcoder Job → MediaConvert Job への変換
def migrate_preset_to_mediaconvert(et_preset):
"""
Elastic Transcoder Preset → MediaConvert Settings に変換
ET Preset Example:
{
"Name": "HLS 400k",
"Container": "hls",
"Video": {
"Codec": "H.264",
"CodecOptions": {},
"BitRate": "400",
"FrameRate": "30",
"Resolution": "480x270"
},
"Audio": {
"Codec": "AAC",
"BitRate": "96",
"SampleRate": "44100"
}
}
"""
# Codec マッピング
codec_map = {
'H.264': 'H_264',
'H.265': 'H_265',
'VP8': 'VP8',
'VP9': 'VP9',
'MPEG2': 'MPEG2',
'AV1': 'AV1' # ET では非対応だが MC で追加可能
}
# MediaConvert Job Settings に変換
mc_settings = {
"Inputs": [{
"FileInput": "s3://my-bucket/input.mp4",
"VideoSelector": {},
"AudioSelectors": {
"Audio Selector 1": {
"DefaultSelection": "DEFAULT"
}
}
}],
"OutputGroups": [
{
"Name": "Apple HLS",
"OutputGroupSettings": {
"Type": "HLS_GROUP_SETTINGS",
"HlsGroupSettings": {
"Destination": "s3://my-bucket/output/",
"SegmentLength": 10,
"MinSegmentLength": 0
}
},
"Outputs": [
{
"NameModifier": "_400k",
"VideoDescription": {
"CodecSettings": {
"Codec": codec_map.get(
et_preset['Video']['Codec'],
'H_264'
),
"H264Settings": {
"RateControlMode": "QVBR", # ET では VBR
"QvbrSettings": {
"QvbrQualityLevel": 7
},
"MaxBitrate": int(et_preset['Video']['BitRate']) * 1000,
"FramerateNumerator": 30,
"FramerateDenominator": 1
}
},
"Width": int(et_preset['Video']['Resolution'].split('x')[0]),
"Height": int(et_preset['Video']['Resolution'].split('x')[1])
},
"AudioDescriptions": [
{
"CodecSettings": {
"Codec": "AAC",
"AacSettings": {
"Bitrate": int(et_preset['Audio']['BitRate']) * 1000,
"SampleRate": int(et_preset['Audio']['SampleRate'])
}
}
}
],
"ContainerSettings": {
"Container": "M3U8"
}
}
]
}
]
}
return mc_settings
# ET Preset
et_preset = {
"Name": "HLS 400k",
"Container": "hls",
"Video": {
"Codec": "H.264",
"BitRate": "400",
"FrameRate": "30",
"Resolution": "480x270"
},
"Audio": {
"Codec": "AAC",
"BitRate": "96",
"SampleRate": "44100"
}
}
# 変換実行
mc_settings = migrate_preset_to_mediaconvert(et_preset)
print(json.dumps(mc_settings, indent=2))
Step 3: MediaConvert ジョブ投入
import boto3
import json
class MediaConvertMigration:
def __init__(self, region='us-east-1'):
self.mc_client = boto3.client('mediaconvert', region_name=region)
self.endpoints = self.mc_client.describe_endpoints()
self.endpoint_url = self.endpoints['Endpoints'][0]['Url']
self.mc = boto3.client(
'mediaconvert',
region_name=region,
endpoint_url=self.endpoint_url
)
def create_hls_job_from_et_preset(self, input_s3, output_bucket,
preset_name='standard'):
"""
ET Preset 相当の MediaConvert HLS ジョブ作成
"""
presets = {
'hls-400k': {
'bitrate': 400000,
'width': 480,
'height': 270,
'audio_bitrate': 96000
},
'hls-1m': {
'bitrate': 1000000,
'width': 854,
'height': 480,
'audio_bitrate': 128000
},
'standard': {
'bitrate': 5000000,
'width': 1920,
'height': 1080,
'audio_bitrate': 192000
}
}
preset = presets.get(preset_name, presets['standard'])
job_settings = {
"Inputs": [{
"FileInput": input_s3,
"AudioSelectors": {
"Audio Selector 1": {
"DefaultSelection": "DEFAULT"
}
},
"VideoSelector": {}
}],
"OutputGroups": [{
"Name": "Apple HLS",
"OutputGroupSettings": {
"Type": "HLS_GROUP_SETTINGS",
"HlsGroupSettings": {
"Destination": output_bucket,
"SegmentLength": 10,
"MinSegmentLength": 0,
"HlsVersion": "HLS_VERSION_3"
}
},
"Outputs": [
{
"NameModifier": f"_{preset_name}",
"VideoDescription": {
"CodecSettings": {
"Codec": "H_264",
"H264Settings": {
"RateControlMode": "QVBR", # 品質ベース(ET では VBR)
"QvbrSettings": {
"QvbrQualityLevel": 7 # 品質スコア 1-10
},
"MaxBitrate": preset['bitrate'],
"FramerateNumerator": 30,
"FramerateDenominator": 1
}
},
"Width": preset['width'],
"Height": preset['height']
},
"AudioDescriptions": [{
"CodecSettings": {
"Codec": "AAC",
"AacSettings": {
"Bitrate": preset['audio_bitrate'],
"SampleRate": 44100
}
}
}],
"ContainerSettings": {
"Container": "M3U8"
}
}
]
}],
"TimecodeConfig": {
"Source": "ZEROBASED"
}
}
# ジョブ作成
response = self.mc.create_job(
Role='arn:aws:iam::123456789012:role/MediaConvert_Default_Role',
Settings=job_settings
)
job_id = response['Job']['Id']
print(f"✓ MediaConvert Job created: {job_id}")
print(f" Status: {response['Job']['Status']}")
return job_id
def monitor_job_progress(self, job_id):
"""Job の進捗監視"""
response = self.mc.get_job(Id=job_id)
job = response['Job']
return {
'JobId': job['Id'],
'Status': job['Status'],
'Progress': {
'JobPercentComplete': job.get('JobPercentComplete', 0),
'OutputGroupDetails': job.get('OutputGroupDetails', [])
},
'Timing': {
'SubmitTime': job['SubmitTime'],
'StartTime': job.get('StartTime'),
'EndTime': job.get('EndTime')
}
}
def batch_migrate_et_jobs(self, job_list, output_bucket):
"""複数の ET ジョブを MediaConvert に一括移行"""
migration_results = []
for et_job in job_list:
try:
mc_job_id = self.create_hls_job_from_et_preset(
input_s3=et_job['input_s3'],
output_bucket=output_bucket,
preset_name=et_job.get('preset', 'standard')
)
migration_results.append({
'et_job_id': et_job['job_id'],
'mc_job_id': mc_job_id,
'status': 'MIGRATED'
})
except Exception as e:
migration_results.append({
'et_job_id': et_job['job_id'],
'mc_job_id': None,
'status': 'FAILED',
'error': str(e)
})
return migration_results
# 使用例
migration = MediaConvertMigration(region='us-east-1')
# ET から想定される既存ジョブ群
et_jobs = [
{
'job_id': 'et-job-001',
'input_s3': 's3://my-bucket/video1.mp4',
'preset': 'hls-400k'
},
{
'job_id': 'et-job-002',
'input_s3': 's3://my-bucket/video2.mp4',
'preset': 'hls-1m'
},
{
'job_id': 'et-job-003',
'input_s3': 's3://my-bucket/video3.mp4',
'preset': 'standard'
}
]
# 一括移行実行
results = migration.batch_migrate_et_jobs(
job_list=et_jobs,
output_bucket='s3://my-output-bucket/transcoded/'
)
print("\n=== Migration Results ===")
for result in results:
print(json.dumps(result, indent=2))
6. 移行リスクと対応
移行前の検証項目
| リスク | 対応 |
|---|---|
| 出力品質低下 | MediaConvert QVBR でテスト・同等品質確認 |
| 字幕処理変更 | SRT 以外の字幕形式対応確認(TTML / CEA-608 等) |
| HLS フォーマット互換性 | HLS_VERSION_3 → HLS_VERSION_4・5 への段階的更新 |
| 処理時間増加 | 複雑な変換では遅くなる可能性 → テスト測定 |
| コスト増(一時的) | ET + MC 並行運用 → 段階的切り替え |
| API 差分 | ET Pipeline / Job / Preset → MC Job / Queue |
段階的移行計画
Phase 1: 準備・テスト(1-2 ヶ月)
├─ MediaConvert 環境構築
├─ 既存 ET Preset を MC Settings に変換
├─ テスト動画でトランスコード実行
├─ 出力品質・処理時間比較
└─ IT / 品質確認承認
Phase 2: パイロット・低リスク案件(2-3 ヶ月)
├─ 非クリティカルなビデオのみ MC に切り替え
├─ 運用ナレッジ蓄積
├─ トラブルシューティング手順整備
└─ 本番環境での安定性確認
Phase 3: 本格移行(3-6 ヶ月)
├─ 主要案件を MC に切り替え
├─ ET のバックアップ並行運用継続
├─ 監視・アラート設定
└─ ロールバック計画を常時維持
Phase 4: ET 廃止(2025/11/13 まで)
├─ 全案件を MC に完全移行
├─ ET パイプライン / ジョブ削除
└─ ET IAM ロール削除・クリーンアップ
7. コスト比較・削減効果
料金一覧
Elastic Transcoder(廃止予定):
SD (≤ 480p): $0.017/分
HD (≤ 1080p): $0.034/分
3D: $0.068/分
MediaConvert(推奨):
SD (≤ 480p): $0.0075/分 → 削減率: 56%
HD (≤ 1080p): $0.015/分 → 削減率: 56%
4K (≤ 4K): $0.054/分 → ET では未対応
UHD (8K): $0.080/分 → ET では未対応
TCO 計算例
Scenario: 動画配信プラットフォーム
├─ 1 日の処理: 100 時間
├─ 1 日の処理構成:
│ ├─ 60 時間 HD 処理
│ ├─ 30 時間 SD 処理
│ └─ 10 時間 4K 処理
ET での年間コスト:
= (60 × 60 × 24 × 365) × $0.034/分 + (30 × 60 × 24 × 365) × $0.017/分
= 31,536,000 分 × $0.034 + 15,768,000 分 × $0.017
= $1,072,224 + $268,056
= $1,340,280/年
MC での年間コスト:
= (60 × 60 × 24 × 365) × $0.015/分 + (30 × 60 × 24 × 365) × $0.0075/分 + (10 × 60 × 24 × 365) × $0.054/分
= 31,536,000 分 × $0.015 + 15,768,000 分 × $0.0075 + 5,256,000 分 × $0.054
= $473,040 + $118,260 + $283,824
= $875,124/年
年間削減額:
= $1,340,280 - $875,124
= $465,156 削減(34.7% コスト削減)
+ 新規 4K 対応で追加売上機会
= 4K オプション月額 $10/ユーザー
= 既存ユーザー 5% が 4K アップグレード
= 追加売上: $10 × 月間ユーザー数 × 5%
8. まとめ・推奨アクション
【重要】 Elastic Transcoder は廃止予定
┌────────────────────────────────────────────────────────────┐
│ Service Status: END OF SUPPORT = 2025 年 11 月 13 日 │
│ │
│ 現状: Legacy Service(機能追加なし) │
│ ↓ │
│ 推奨: AWS Elemental MediaConvert に移行 │
│ │
│ 利点: │
│ ✓ コスト 56% 削減(同等品質比較) │
│ ✓ 4K / 8K / HDR / DRM 対応 │
│ ✓ 継続的な機能改善 │
│ ✓ AWS のサポート継続 │
│ │
│ 移行タイムライン: │
│ Phase 1: 2026/04-06 準備・テスト │
│ Phase 2: 2026/07-09 パイロット移行 │
│ Phase 3: 2026/09-11 本格移行 │
│ Phase 4: 2025/11/13 ET 完全廃止 │
└────────────────────────────────────────────────────────────┘
推奨アクション(即座に実施)
-
環境調査(2026/05 まで)
- [ ] 現在の ET Pipeline / Job 数の把握
- [ ] 処理内容・出力形式の分類
- [ ] コスト分析・削減効果の試算
-
MediaConvert 検証(2026/06-08)
- [ ] Preset 変換ツール検証
- [ ] テスト動画でのトランスコード実行
- [ ] 品質比較・パフォーマンス測定
-
移行計画策定(2026/08)
- [ ] Wave 計画・段階化スケジュール
- [ ] ロールバック手順整備
- [ ] 監視・アラート設定
-
実装・テスト(2026/09-11)
- [ ] 本格移行実施
- [ ] ET パイプライン段階的廃止
- [ ] 最終検証・ローンチ