こんにちは!虎の穴ラボの鷺山です。
AWSの動画・音声変換サービス「Amazon Elastic Transcoder」が2025年11月13日にサービス終了します。
この日以降、当サービスは利用できなくなる予定です。
後継サービスとして「AWS Elemental MediaConvert」への移行がAWSから案内されています。
この記事ではElastic Transcoderを利用しているシステムをMediaConvertに移行するための方法を、サンプルコードを交えてご紹介します。
前提環境
| 環境情報 | バージョン・値 |
|---|---|
| Node.js | 22.17.1 |
Node.jsライブラリ@aws-sdk/client-elastic-transcoderおよび @aws-sdk/client-mediaconvert |
いずれも 3.846.0 |
| AWS CLI | 2.27.52 |
| AWSアカウントID | 111111111111 |
| リージョン | ap-northeast-1 |
| S3バケット名 | example-bucket |
この記事では、Node.jsを使ったサンプルコードを記載しています。
他のプログラミング言語でもAWS APIに渡す設定値などは共通しているため、移行時の参考になれば幸いです。
Elastic TranscoderとMediaConvertの差異
どちらも動画変換サービスとして以下の機能を備えており、大まかな仕様は共通しています。
- 変換ジョブはパイプラインやキューに追加されて処理される。
- Amazon S3を利用してファイルの入出力を行う。変換ジョブの実行時にS3のパスを指定する。
- 変換のための各種設定のプリセットやテンプレートを登録・利用できる。
- ジョブの完了時に通知を送信でき、他のサービスと連携できる。
ただし、以下の点が異なります。
| 項目 | Elastic Transcoder | MediaConvert |
|---|---|---|
| 変換ジョブの割り当て先 | パイプライン | キュー |
| 入出力S3パスの指定方法 | パイプラインにバケット s3://example-bucket を指定し、ジョブ実行時に子パス path/to/the/file を指定する。 |
ジョブ実行時にS3のフルパス s3://example-bucket/path/to/the/file を指定する。 |
| プリセット、テンプレート | プリセットが用意されている。 | プリセットが用意されている。 さらに、ジョブテンプレートという仕組みが追加されている。 |
| 通知の設定方法 | 通知先のAmazon SNSトピックをパイプラインに直接指定する。 | Amazon EventBridgeでジョブ完了時に通知を送信するように設定する。 送信先はAmazon SNSを含め幅広く選択できる。 |
ジョブテンプレート
MediaConvertから追加された機能で、出力設定(プリセット)だけでなく、入力設定を含むジョブ全体の設定を保存して再利用できます。
設定内容の変換スクリプト
AWS公式より、Elastic Transcoderの設定内容をMediaConvertの設定内容に変換するスクリプトが提供されています。
このスクリプトを使うと、Elastic Transcoderの「プリセット」や「完了済みジョブの情報」をもとに、MediaConvert向けの「プリセット」や「ジョブテンプレート」の設定ファイル (JSON) を生成できます。
なお、スクリプトの実行には以下の前提条件を満たす必要があります:
- Node.js 14以上インストール済み
- AWS CLI認証設定済み
変換スクリプトの実行方法
今回はElastic Transcoderの「完了済みジョブの情報」をもとに、MediaConvertの「ジョブテンプレート」の設定ファイルを生成する例をご紹介します。
まず、AWSマネジメントコンソールでElastic Transcoderのジョブ一覧画面を開き、変換元のジョブのJob IDを確認します。(今回は例としてJob IDは 1700000000000-zzzzzz とします。)
Elastic TranscoderのJob IDを確認
次に、変換スクリプト(convert-job.js)があるディレクトリに移動し、以下のように実行します。
$ node convert-job.js --job-id 1700000000000-zzzzzz > template.json
このコマンドを実行すると、Elastic Transcoderのジョブ 1700000000000-zzzzzz の設定がMediaConvertのジョブテンプレート形式のJSONファイル(template.json)として出力されます。
出力したジョブテンプレートのインポート方法
上記のステップで出力したJSONファイルを、MediaConvertのジョブテンプレートとしてインポートできます。
まず、AWSマネジメントコンソールでMediaConvertのジョブテンプレート一覧画面を開き、「テンプレートをインポート」をクリックします。
MediaConvertジョブテンプレートをインポート
そして、前のステップで出力したJSONファイル(template.json)を指定します。
すると、JSONファイルの内容が設定画面に反映されます。内容を確認し(必要があれば修正し)、「作成」をクリックするとジョブテンプレートが作成されます。
MediaConvertはElastic Transcoderよりも詳細な設定が可能なため、インポート後に内容をよく確認し、必要に応じて調整することをおすすめします。
AWSクライアントの記述方法の違い
Elastic TranscoderとMediaConvertのAWSクライアントの記述方法の違いを、簡単なサンプルコードでご紹介します。
既存のElastic Transcoder向けのコードをMediaConvert向けに置き換える際の参考にしてください。
今回は例として動画ファイルをストリーミング (HLS) 形式に変換するコードを扱います。 入出力のS3パスはどちらも以下の前提とします。
| 項目 | パス |
|---|---|
| 入力ファイル | s3://example-bucket/path/to/入力ファイル.mp4 |
| 出力先フォルダ | s3://example-bucket/path/to/converted/ |
Elastic Transcoder
まず、Elastic Transcoderにおける変換ジョブの実行例を示します。
- パイプラインID
1700000000000-xxxxxxに向けて変換ジョブを作成します。 - パイプラインの入出力先にはS3バケット
s3://example-bucketが割り当て済みとします。 - プリセットには、システムプリセット HLS 1M (プリセットID
1351620000001-200030) を使用します。
import { ElasticTranscoderClient, CreateJobCommand } from "@aws-sdk/client-elastic-transcoder"; const pipelineId = "1700000000000-xxxxxx"; const presetId = "1351620000001-200030"; // HLS 1M const baseKey = "path/to/"; const inputKey = baseKey + "入力ファイル.mp4"; const outputKey = "converted/hls_"; const client = new ElasticTranscoderClient(); async function createTranscodeJob() { const command = new CreateJobCommand({ PipelineId: pipelineId, Input: { Key: inputKey, }, OutputKeyPrefix: baseKey, Outputs: [{ Key: outputKey, PresetId: presetId, SegmentDuration: "5", }], Playlists: [{ Name: "playlist", Format: "HLSv3", OutputKeys: [outputKey], }], }); const response = await client.send(command); return response.Job; } async function main() { try { const job = await createTranscodeJob(); console.log("ジョブの作成に成功:", JSON.stringify(job, null, 2)); } catch (error) { console.error("ジョブの作成に失敗:", error.message); } } main();
変換ジョブが完了すると、S3に以下のようにファイルが出力されます:
s3://example-bucket/path/to/playlist.m3u8 # マスタープレイリスト s3://example-bucket/path/to/converted/hls_.m3u8 # メディアプレイリスト s3://example-bucket/path/to/converted/hls_00000.ts # 以下はセグメントファイル s3://example-bucket/path/to/converted/hls_00001.ts s3://example-bucket/path/to/converted/hls_00002.ts ...
MediaConvert
次に、MediaConvertにおける変換ジョブの実行例を示します。
import { MediaConvertClient, CreateJobCommand } from "@aws-sdk/client-mediaconvert"; const roleArn = "arn:aws:iam::111111111111:role/MediaConvert_Default_Role"; const jobTemplateArn = "arn:aws:mediaconvert:ap-northeast-1:111111111111:jobTemplates/template-1"; const s3UriPrefix = "s3://example-bucket/path/to/"; const inputKey = s3UriPrefix + "入力ファイル.mp4"; const outputKey = s3UriPrefix + "converted/out"; const client = new MediaConvertClient(); async function createTranscodeJob() { const command = new CreateJobCommand({ Role: roleArn, JobTemplate: jobTemplateArn, Settings: { Inputs: [{ FileInput: inputKey }], OutputGroups: [{ Name: "Apple HLS", OutputGroupSettings: { Type: "HLS_GROUP_SETTINGS", HlsGroupSettings: { Destination: outputKey } }, Outputs: [{ NameModifier: "_hls", }] }] } }); const response = await client.send(command); return response.Job; } async function main() { try { const job = await createTranscodeJob(); console.log("ジョブの作成に成功:", JSON.stringify(job, null, 2)); } catch (error) { console.error("ジョブの作成に失敗:", error.message); } } main();
ここで、IAMロール MediaConvert_Default_Role のポリシーは以下の設定になっています:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*", "s3:Put*" ], "Resource": [ "arn:aws:s3:::example-bucket/*" ] } ] }
変換ジョブが完了すると、S3に以下のようにファイルが出力されます:
s3://example-bucket/path/to/converted/out.m3u8 # マスタープレイリスト s3://example-bucket/path/to/converted/out_hls.m3u8 # メディアプレイリスト s3://example-bucket/path/to/converted/out_hls_00001.ts # 以下はセグメントファイル s3://example-bucket/path/to/converted/out_hls_00002.ts s3://example-bucket/path/to/converted/out_hls_00003.ts ...
MediaConvertジョブの完了通知の設定
最後に、MediaConvertの変換ジョブ完了時にAmazon SNSトピックに通知を送信するための設定方法をご紹介します。
- AWSマネジメントコンソールからAmazon EventBridgeのルール一覧画面を開き、「ルールを作成」をクリックします。
- 「ルールタイプ」に「イベントパターンを持つルール」を選択します。
- 「イベントパターン」を以下のように設定します:
- 「イベントソース」に「AWSのサービス」
- 「AWS のサービス」に「MediaConvert」
- 「イベントタイプ」に「MediaConvert Job State Change」
- 「イベントタイプの仕様 1」に「COMPLETE」(必要に応じて「ERROR」も)

イベントパターンの設定 (EventBridge)
- 「ターゲットタイプ」に「AWS のサービス」を、「ターゲットを選択」から「SNSトピック」を選択し、「トピック」から送信先のトピックを選択します。

ターゲットの設定 (EventBridge) - 設定内容を確認して「ルールを作成」をクリックします。
以上の設定で、MediaConvertの変換ジョブ完了時にSNSトピックに通知が送信されるようになります。
まとめ
本記事では、Amazon Elastic TranscoderからAWS Elemental MediaConvertへの移行方法をご紹介しました。
現在Elastic Transcoderを使用していて、MediaConvertへの移行を検討中の方のお役に立てれば幸いです!
Fantia開発採用情報
虎の穴ラボでは現在、一緒にFantiaを開発していく仲間を積極募集中です!
多くのユーザーに使っていただけるtoCサービスの開発をやってみたい方は、ぜひ弊社の採用情報をご覧ください。
toranoana-lab.co.jp

