[update] AWS Elemental MediaConvertでJobの検索ができるようになりました!
はじめに
清水です。ブロードキャストグレードの機能を備えたファイルベースの動画変換サービスであるAWS Elemental MediaConvertで入力ファイル名によるJobの検索ができるようになりました!AWS What's Newへの投稿は現時点で確認できていませんが、MediaConvert User GuideのDocment historyに2024/06/20付けで更新があります。
リンク先のUser Guide内、Working with jobs - MediaConvertの項目では Searching for jobs のTopicsが追加されていますね。
引用元: Working with jobs - MediaConvert https://docs.aws.amazon.com/mediaconvert/latest/ug/working-with-jobs.html
またAWS API Changesのサイトによると、2024/06/14付けでSearchJobs
というAPIが追加されていることが確認できます。
「This release adds the ability to search for historical job records within the management console using a search box and/or via the SDK/CLI with partial string matching search on input file name.」ということで、このAPIがまさにJob検索機能に該当しますね。
本エントリではこのMediaConvertの新機能、Search jobsについて実際に試してみたのでまとめてみます。
MediaConvertのJobをマネジメントコンソールから検索してみた
入力ファイルのURLでJobが検索できる
まずはAWSマネジメントコンソールから、MediaConvertのJob検索機能を使ってみます。MediaConvertのページに遷移し、左上のハンバーガーボタン(三)をクリックして機能メニューを表示させてみます。一番下に Search (日本語であれば 検索 ) の項目が見つかりますね!
Search のページに移動してみると以下のように、これまで実行したJobがずらりとならんでいます。
検索条件となる入力ファイル名をクエリとして検索を実行してみましょう。以下を Input filename filter の欄に入力、右上の[Search]ボタンを押下します。
s3://my-bucket/mediaconvert-input/inokashira-line.mov
検索結果として、1つのJobが表示されました。
Job IDのリンク文字列をクリックすると、Job Summary画面に遷移します。
検索クエリとして指定したファイル名が入力となっているJobが検索結果として表示されたことが確認できました!
検索クエリはファイル名やその一部でもOK
上記の例では入力ファイルをフルパスでURLすべて指定していますが、一部のみでも検索可能です。以下はPC011010.MOV
というクエリで検索してみました。検索結果としてPC011010.MOV
というファイル名を入力として実行したJobが現れましたね。
また入力ファイルの文字列(Job作成時、マネジメントコンソールのInput file URL
の項目で指定するもの。FileInput
)が検索対象となり、部分一致でも結果に現れるようです。MediaConvertは入力ソースとしてS3のほかHTTP/HTTPSも利用可能です。([アップデート] AWS Elemental MediaConvertがHTTPSからのファイル入力に対応していました! | DevelopersIO)入力ファイル文字列の他の場所にhttps
を使っていないことが前提にはなりますが、クエリをhttps
とすれば入力にHTTPSソースを使用したJobを検索することも可能です。
StatusやQueueでのフィルタも可能
マネジメントコンソールのSearchページで表示がありますが、StatusやQueueで検索結果をフィルタすることも可能です。
StatusとしてはSubmitted
、Progressing
、Complete
、Canceled
、Error
が選択できます。QueueはDefault
と、ほかに作成済みのQueueがあればそれが選択可能となります。(スクリーンショットは以前、MediaConvertの高速トランスコーディングのアップデートの際、検証用に作成したQueueになります。([アップデート] AWS Elemental MediaConvertで高速トランスコーディングが利用可能になりました [最大25倍スピードアップ!] | DevelopersIO))
検索対象期間は3ヶ月間である点に注意
大変便利なJobの検索機能ですが、検索対象が直近3ヶ月以内であることに注意しましょう。User GuideによるとJobの作成から3ヶ月経過すると、自動的にJobの記録は消去されてしまうとのことです。
2024年5月ごろのJobは見つからない?
また、こちらはUser Guideなどでの記載は見つからなかったのですが、現時点で検索対象となるのは2024年6月ごろ以降に作成されたJobで、2024年5月ごろ以前のJobは検索対象とならないようでした。
期間について正確な表現ができておらず恐縮なのですが、私の検証用AWSアカウントでは、2024/05/28に作成したJobはJobs一覧ページには現れるも、Searchのページには表示されていません。2024/05/28に作成したJobの次のJobが2024/06/18に作成したものなのですが、こちらは表示される、というぐあいでした。
アップデートがAWS What's Newに投稿された2024/06/20です。これ以降に作成されたJobは3ヶ月間検索対象に現れるはずですが、それ以前に作成したJobの扱いについては注意しましょう。
MdiaConvertのJobをAWS CLIで検索してみた
Jobの検索機能、もちろんAWS CLI(ないしAPI経由)でも利用可能です。実際に確認してみましょう。
本エントリ内のAWS CLIの実行にはAWS CloudShellを使用しました。以下の環境となります。
[cloudshell-user@ip-10-130-33-125 ~]$ aws --version
aws-cli/2.17.15 Python/3.11.9 Linux/6.1.96-102.177.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023
aws mediaconvert search-jobs
サブコマンドを使用します。マネジメントコンソールで確認したように、入力ファイル名を検索クエリとする(--input-file
)ほか、Queue(--queueu
)やStatus(--status
)でフィルタリングすることが可能です。また--order
オプションで並べ替えの順序も指定することができます。
$ aws mediaconvert search-jobs \
--input-file <value>
--order [ASCENDING|DESCENDING]
--queue <value>
--status <value>
以下、実際の実行結果です。返り値として検索結果となるJobの情報がまるっと返ってきます。
[cloudshell-user@ip-10-130-33-125 ~]$ aws mediaconvert search-jobs \
> --input-file IMG_4657.MOV
{
"Jobs": [
{
"AccelerationSettings": {
"Mode": "DISABLED"
},
"AccelerationStatus": "NOT_APPLICABLE",
"Arn": "arn:aws:mediaconvert:ap-northeast-1:123456789012:jobs/17xxxxxxxxxxx-xxxxvd",
"BillingTagsSource": "JOB",
"ClientRequestToken": "17xxxxxxxxxxx-xxxxxc",
"CreatedAt": "2024-07-26T12:58:14+00:00",
"Id": "17xxxxxxxxxxx-xxxxvd",
"Messages": {
"Info": [],
"Warning": []
},
"OutputGroupDetails": [
{
"OutputDetails": [
{
"DurationInMs": 30830,
"VideoDetails": {
"HeightInPx": 720,
"WidthInPx": 1280
}
}
]
}
],
"Priority": 0,
"Queue": "arn:aws:mediaconvert:ap-northeast-1:123456789012:queues/Default",
"Role": "arn:aws:iam::123456789012:role/ElementalMediaConvert-role",
"Settings": {
"FollowSource": 1,
"Inputs": [
{
"AudioSelectors": {
"Audio Selector 1": {
"DefaultSelection": "DEFAULT"
}
},
"FileInput": "s3://my-bucket/mediaconvert-input/IMG_4657.MOV",
"TimecodeSource": "ZEROBASED",
"VideoSelector": {}
}
],
"OutputGroups": [
{
"Name": "File Group",
"OutputGroupSettings": {
"FileGroupSettings": {
"Destination": "s3://content-source-xxxxxxxx/output/"
},
"Type": "FILE_GROUP_SETTINGS"
},
"Outputs": [
{
"AudioDescriptions": [
{
"AudioSourceName": "Audio Selector 1",
"AudioType": 0,
"AudioTypeControl": "FOLLOW_INPUT",
"CodecSettings": {
"AacSettings": {
"AudioDescriptionBroadcasterMix": "NORMAL",
"Bitrate": 160000,
"CodecProfile": "LC",
"CodingMode": "CODING_MODE_2_0",
"RateControlMode": "CBR",
"RawFormat": "NONE",
"SampleRate": 48000,
"Specification": "MPEG4"
},
"Codec": "AAC"
},
"LanguageCodeControl": "FOLLOW_INPUT"
}
],
"ContainerSettings": {
"Container": "MP4",
"Mp4Settings": {
"CslgAtom": "INCLUDE",
"FreeSpaceBox": "EXCLUDE",
"MoovPlacement": "PROGRESSIVE_DOWNLOAD"
}
},
"Extension": "mp4",
"Preset": "System-Generic_Hd_Mp4_Avc_Aac_16x9_Sdr_1280x720p_30Hz_5Mbps_Qvbr_Vq9",
"VideoDescription": {
"AfdSignaling": "NONE",
"AntiAlias": "ENABLED",
"CodecSettings": {
"Codec": "H_264",
"H264Settings": {
"AdaptiveQuantization": "HIGH",
"CodecLevel": "AUTO",
"CodecProfile": "HIGH",
"DynamicSubGop": "ADAPTIVE",
"EntropyEncoding": "CABAC",
"FieldEncoding": "PAFF",
"FlickerAdaptiveQuantization": "ENABLED",
"FramerateControl": "SPECIFIED",
"FramerateConversionAlgorithm": "DUPLICATE_DROP",
"FramerateDenominator": 1001,
"FramerateNumerator": 30000,
"GopBReference": "ENABLED",
"GopClosedCadence": 1,
"GopSize": 2.0,
"GopSizeUnits": "SECONDS",
"HrdBufferInitialFillPercentage": 90,
"HrdBufferSize": 10000000,
"InterlaceMode": "PROGRESSIVE",
"MaxBitrate": 5000000,
"MinIInterval": 0,
"NumberBFramesBetweenReferenceFrames": 3,
"NumberReferenceFrames": 3,
"ParControl": "SPECIFIED",
"ParDenominator": 1,
"ParNumerator": 1,
"QualityTuningLevel": "MULTI_PASS_HQ",
"QvbrSettings": {
"MaxAverageBitrate": 4000000,
"QvbrQualityLevel": 9
},
"RateControlMode": "QVBR",
"RepeatPps": "DISABLED",
"SceneChangeDetect": "ENABLED",
"Slices": 2,
"SlowPal": "DISABLED",
"Softness": 0,
"SpatialAdaptiveQuantization": "ENABLED",
"Syntax": "DEFAULT",
"Telecine": "NONE",
"TemporalAdaptiveQuantization": "ENABLED",
"UnregisteredSeiTimecode": "DISABLED"
}
},
"ColorMetadata": "INSERT",
"DropFrameTimecode": "ENABLED",
"Height": 720,
"RespondToAfd": "NONE",
"ScalingBehavior": "DEFAULT",
"Sharpness": 100,
"TimecodeInsertion": "DISABLED",
"VideoPreprocessors": {
"Deinterlacer": {
"Algorithm": "INTERPOLATE",
"Control": "NORMAL",
"Mode": "DEINTERLACE"
}
},
"Width": 1280
}
}
]
}
],
"TimecodeConfig": {
"Source": "ZEROBASED"
}
},
"Status": "COMPLETE",
"StatusUpdateInterval": "SECONDS_60",
"Timing": {
"FinishTime": "2024-07-26T12:59:12+00:00",
"StartTime": "2024-07-26T12:58:15+00:00",
"SubmitTime": "2024-07-26T12:58:14+00:00"
},
"UserMetadata": {}
}
]
}
必要に応じて--query
オプションで出力項目の絞り込みを行いましょう。
[cloudshell-user@ip-10-130-33-125 ~]$ aws mediaconvert search-jobs \
> --input-file IMG_4657.MOV \
> --query "Jobs[*].[Id, Settings.Inputs[*].FileInput]"
[
[
"17xxxxxxxxxxx-xxxxvd",
[
"s3://my-bucket/mediaconvert-input/IMG_4657.MOV"
]
]
]
まとめ
MediaConvertでJobの検索ができるようになったアップデートについてお届けしました。ある入力ファイルについて、すでに変換したかどうか確認したいとき、これまではJobの一覧から入力ファイル名を確認するといった仕組みが別途必要でした。新たに利用可能になったSearchJobs
APIを使うことで、入力ファイル名からの検索が容易に行えます。ファイル名は一部のみの指定でもかまいません。またJobの状態や実行したQueueでのフィルタリングも可能です。細かなアップデートではありますが、ぐっと使いやすくなる機能かと思います。検索対象が直近3ヶ月間のJobである点に注意しつつ、上手に活用していきましょう。