[新機能] AWS Elemental MediaConvertがアニメーションGIF出力をサポートしました! [待望の]
はじめに
清水です。ブロードキャストグレードの機能を備えたファイルベースの動画変換サービスであるAWS Elemental MediaConvertで出力形式にアニメーションGIFをサポートするアップデートがありました!本ブログエントリ執筆時点(2025/02/10)では、まだWhat's New at AWSへのポストはありませんが、AWS CLIのCHANGELOG、 1.37.16 の記載でアップデートを確認できます。
- api-change:
mediaconvert
: This release adds support for Animated GIF output, forced chroma sample positioning metadata, and Extensible Wave Container format
また公式サイトではありませんがAPIの更新確認に便利なサイトAWS API Changesでも、本アップデートについて確認できます。
なおアップデート内容の概要では「This release adds support for Animated GIF output, forced chroma sample positioning metadata, and Extensible Wave Container format」と3つの新機能が含まれています。本エントリではこの中の「support for Animated GIF output」についてのみ扱います。
MediaConvertとアニメーションGIF、そしてElastic Transcoder
まずはMediaConvertのアニメーションGIF出力のサポートについて、その背景などを確認しておきましょう。最新のフォーマットでもなければ、いつから使われているかもわからないほど歴史のあるアニメーションGIF(Wikipediaには「GIFアニメーション」という名称で記載されていますが、本エントリでは「アニメーションGIF」と称します)、なぜこのタイミングでMediaConvertはサポートしたのでしょうか。
2000年前後には特許問題などから使用頻度が減少したGIF形式ですが、アニメーションGIFについては代替形式が定まらなかったことから引き続き使われてきました。2025年の現在でも、例えばSlackの絵文字のリアクションなど身近なところにアニメーションGIFがありますよね。
動画ファイルのサムネイル画像としてアニメーションGIFを用いるというユースケースもあります。本エントリで扱うMediaConvertの前身のサービスともいえるAmazon Elastic Transcoderでは、2013年1月のリリースから2年後、2015年3月にアニメーションGIFの出力に対応しました。
シンプルに動画ファイルからアニメーションGIFを出力するという使い方のほか、入力となる動画ファイルに対して、配信形式のファイルと同時にサムネイル表示として利用できるアニメーションGIFを出力する、ということがElastic Transcoderで可能になりました。
さて、AWSでは2017年11月にAWS Elemental MediaConvertがAWS Media Servicesの1つとしてリリースされます。以降、動画変換サービスはElastic Transcoderから新サービスであるMediaConvertの利用が推奨されるようになっていきます。
MediaConvertのリリース当時は「Elastic Transcoderでサポートされていて、後継サービスであるMediaConvertではサポートしていない」入出力フォーマット、というものも数多くありました。しかし、MediaConvertは最新の動画フォーマットへの対応含めアップデートを繰り返し(対象的にElastic Tarnscoderはアップデートがなくなっていきましたが)、時間が経つにつれMediaConvertでサポートされるフォーマットが拡充していきました。
以下ブログエントリは2023年3月のアップデートですが(紛らわしいですが、アニメーションGIFを 入力形式 としてサポートしたアップデートです)、この時点で「Elastic Transcoderでサポートされていて、MediaConvertでサポートされていない」出力形式としてはアニメーションGIFとFLACオーディオを残すのみだったと記憶しています。
そんな中、2024年11月にAmazon Elastic Transcoderの1年後のサービス終了が予告されます。
移行先のサービスとしてはMediaConvertがあるのですが、アニメーションGIFの出力については引き続きMediaConvertがサポートしていない、という状況でした。(上記ブログエントリ執筆時に確認したのですが、いつの間にやらFLACオーディオの出力はMediaConvertでサポートされていました。)
Elastic TranscoderからMediaConvertに移行したくても、アニメーションGIFの出力ががサポートされていないがために移行ができない、というケースがあったかと思います。このアニメーションGIFの出力のために、別途変換の手段を自前で用意する、というのも骨が折れますよね。できれば避けたいところです。MediaConvertでアニメーションGIFに対応してくれないかなぁ(対応してくれればElastic TranscoderからMediaConvertへの移行ができるのに)、と思っていた矢先、やっと!MediaConvertがアニメーションGIF出力に対応してくれました!
MediaConvertでアニメーションGIFをつくってみた
MediaConvertでアニメーションGIF出力をサポートした背景について確認できたところで、実際にMediaConvertでアニメーションGIFをつくってみましょう。
入力ファイルとして、以下のスマホで撮影した電車(井の頭線)の動画ファイルを用意しました。(2023年11月のブログエントリ「AWS Elemental MediaConvertでVideo overlays(ビデオソースの置き換え)ができるようになっていました! | DevelopersIO」で使ったものです。)
入力となる動画ファイルはあらかじめS3バケットにアップロードしておきます。
MediaConvertのマネジメントコンソール、Jobs一覧画面の(Create job)ボタンから進みます。Inputs、Output gropusの設定を行う前に、Job settingsのSevice accessの項目でService roleを指定しておきます。
Inputsの設定です。S3にアップロードしておいた動画ファイルを指定します。
また今回は入力ファイルの2秒から7秒の5秒間のみを変換対象としました。Input clipsの項目で(Add input clip)ボタンを押下、Start timecodeと End timecodeを指定しておきます。
続いてOutput groupsの設定です。(Add)ボタンを押下し、現れるAdd output groupのダイアログでFile group
を選択します。
File group settingsのDestinationで出力先となるS3バケットとパスを指定します。続いてOutputsの「Details」(もしくは「左側のFile group > H.264, AAC」)のリンクをクリックして設定箇所に進みます。
デフォルトでは以下のようにContainerでMPEG-4 container
が指定されている状況です。
Containerの項目でAnimated GIF container
を選択しましょう。
Video codecとしてGIF
が設定された状態となります。今回はさらに、出力のWidthとHeight、そしてFrame rateを指定しました。(小さめのサイズのアニメーションGIF画像としたかったため、 Width 480、Height 270、そして10 fpsといった設定にしています。)
以上でJobを(Create)します。しばらくするとJobがCompeteとなりました!
S3に出力された、変換後のアニメーションGIF画像が以下になります。
MediaConvertでアニメーションGIFが出力できましたね!なお、このアニメーションGIF画像ですが、私の手元の環境(macOS上のGoogle Chrome)で確認した限り、1回のみのアニメーション再生でループはしない状況でした。(ただし、macOSのFinderからクイックルックで参照すると無限ループするという状況です。)
簡単にですが確認したところ、アニメーションGIFには再生回数を制御するデータがあるようでした。例えばElastic TarnscoderでgifコーデックのPresetを作成しようとすると、以下のようにLoop Countの設定が行えます。
今回、MediaConvertで変換した際にこのLoop Countを設定しそびれしまった、もしくは(マネジメントコンソールやAPI Changesなどを確認する限り)Loop Countの設定項目が現段階ではまだなく、1回のみの再生になってしまっている状況なのかな、と考えています。
まとめ
AWS Elemental MediaConvertで新たにアニメーションGIFを出力形式としてサポートしたアップデートについてお届けしました。これまで入力形式としてもサポートしながらも、出力形式としてはサポートしていなかったアニメーションGIF。Elastic TarnscoderからMediaConvertへの移行を考えていても、このアニメーションGIFをサポートしていないがために断念していたというケースもあるのではないでしょうか。Elastic Tarnscoderのサービス終了も予告され移行が必須となった今、やっとサポートしてくれた!というのが個人的な感想です。ただ、現段階で私が確認した限りですが、アニメーションGIFでのループの制御ができないようでした。なにか設定を追加することで無限ループなアニメーションGIFができるのか、追って確認できたらと思います。