ホームページ >ウェブフロントエンド >jsチュートリアル >AWS Sideo サムネイル ジェネレーター - サーバーレス Node.js ソリューションガイド

AWS Sideo サムネイル ジェネレーター - サーバーレス Node.js ソリューションガイド

Barbara Streisand
Barbara Streisandオリジナル
2024-12-27 10:45:11196ブラウズ

注: 2 つの部分に分割しないでください。ここには分割を正当化するのに十分なテキストがありません。また、この記事では選択肢については説明せず、解決策に重点を置いています。

ビデオのサムネイルを効率的かつコスト効率よく大規模に生成する必要がありますか?専用のメディア処理サービスを使用する場合と比較して、実行コストがわずか数ペニーの AWS Lambda を使用して、真のサーバーレス ソリューションを構築しましょう。

これから構築するもの

ソリューションは、次の Node.js Lambda 関数で構成されます。

  • 一般的なビデオ形式を処理します
  • ワークロードに基づいてスケール
  • 失敗した操作の再試行ロジックを実装します
  • コードとしてのインフラストラクチャを介してデプロイ
  • 動画あたりの実行コストはわずか 1 セント

なぜカスタムなのか

サムネイルを大規模に生成するのは、それほど簡単でも、安価でもありません。コスト要因はビデオの場合に特に重要です。画像の場合は、同じタイプの出力をサイズ変更、切り抜き、保存するだけで済みます。この責任をサードパーティのクラウド サービスにオフロードして、他の機能の提供に集中したり、ほんの少しの作業を行うだけで AWS VPC を離れることなくタスクを実行したりできます。動画の場合は話が別ですが。ビデオ ファイルははるかに大きく、さまざまなエンコード標準をサポートする必要があり、最終結果はビデオではなくなり、基本的に静止画像を抽出することになります。

AWS ネイティブ = 超高価

AWS Sideo Thumbnail Generator - The Serverless Node.js Solution Guide

オプションを調査するとき、私は常にアプリケーションが使用されているプラ​​ットフォームにネイティブなソリューションに目を向けます。 AWS では、それは MediaConvert または MediaLive です。どちらも、プロレベルのビデオ処理が必要な場合には最適ですが、ビデオからサムネイルを取得したいだけの場合には便利です...まあ、確かにそれは可能ですが、そのような使用例を処理できるように設計されていますか? ?そうではありません。

驚くべきことかもしれませんが、AWS にはサムネイルの生成専用のサービスがありません。利用可能なソリューションは、ストリーミング メディアのサポートの提供や高度なビデオ変換タスクの実行など、他のユースケースに焦点を当てています。

これらのサービスでそのような機能を構築するための要件を見ると、問題は非常に明らかです

  • AWS メディア サービスを使用する場合、ビデオ出力が定義されていない処理パイプラインを作成することはできません。ビデオ全体を処理し、そのプロセスの副産物であるサムネイルを使用する場合にのみ結果を破棄する必要があります。
  • そのため、サムネイル ジェネレーターとしては非常に高価です。処理されたビデオ 1 分あたり $0.0075 を支払うのは、それほど大した金額ではないように感じられるかもしれませんが、非常に早く加算されます。1,000 本のビデオの場合、それぞれ 15 分間の処理コストがかかります$100 以上になります

ビデオのサムネイルをいくつか生成するのに、朝のコーヒーよりも費用がかかるはずですか? ☕ これらのサービスは強力ですが、サムネイルの生成などの単純なタスクには過剰であるためです。

AWS メディア サービスの実際のコストはドル単位だけではなく、必要のない複雑さにもかかっています

新しい要件に遭遇するたびに、私の心は「仕事に最適なツールを見つける」モードに切り替わります。私は、自分が知っているものに頼らず、できるだけ多くの代替案を常に模索することの重要性を説いてきたので、壊れたレコードのように聞こえるかもしれません…でも、私はそのレコードがかかっている曲が好きなのだと思います! ??

それは病状とも言えます。私はエンジニアリングの OCD の問題を十分に認識しています... ?

AWS Sideo Thumbnail Generator - The Serverless Node.js Solution Guide

でも余談ですが...

AWS を超えて

確かに、他の解決策もありますが、多くの場合、それぞれに頭痛の種が伴います。

  • 外部サービスは通常、API 呼び出しまたは処理されたデータ量ごとに料金を請求します
  • 処理のためにビデオを外部サービスにアップロードする必要があるため、下り料金がさらに高くなります
  • うまく拡張できない可能性があり、処理のスロットルが発生する可能性があります

カスタム専用のソリューション

ただ安いだけでなく、実際に必要なものに重点を置いたもの、つまり、文字通り 1 セントでビデオのサムネイルを生成するサーバーレス ソリューションを構築しましょう。 ?

システムは次の AWS のサービスとツールを使用します:

  • Amazon S3 - ソースビデオと生成されたサムネイル用のストレージ
  • AWS Lambda - サーバーレス コンピューティング環境
  • FFmpeg - ビデオ処理フレームワーク
  • Docker - FFmpeg および Lambda コードのコンテナ パッケージ化
  • Amazon SQS - 処理調整用のメッセージキュー

AWS Sideo Thumbnail Generator - The Serverless Node.js Solution Guide

ビデオがソース S3 バケットにアップロードされると、処理リクエストをキューに入れるイベントがトリガーされます。 Lambda 関数がそれを取得し、Docker コンテナ内で実行されている FFmpeg を使用して処理します。生成されたサムネイルは、ターゲットの S3 バケットに保存されます。スロットルやインフラストラクチャ関連の問題などの回復可能な一時的な問題は自動的に再試行されますが、その他すべての失敗したイベントは監査のために配信不能キューに自動的に送信されます。

このサービスは、2 つのサイズのビデオ サムネイルを自動的に生成します。大きいバージョンには、フレームの中央に半透明のビデオ アイコンが含まれており、ユーザーがビデオ コンテンツをすばやく識別できるようになります。

サンプルプロジェクト

  • GH から取得

サービス

  • オーケストレーション ビデオ処理用途
  • FFmpeg
  • 2 つのサムネイル タイプ
  • さまざまなサイズのオーバーレイ付き コンテナ内の FFmpeg
  • これは Lambda で Ffmpeg CLI を利用できるようにする方法です
  • Dockerfile 導入
  • コンテナのビルド
  • サーバーレス展開
  • Docker 化された Lambda 定義 テスト中
  • int
  • e2e サーバーレス
  • この時点で他に何かありますか?

魔法のコンテナ?

Lambda で FFmpeg をパッケージ化する Dockerfile は次のとおりです。

お金を見せてください! ?

1 か月あたり 1,000 本のビデオを処理する場合のコストの内訳を見てみましょう:

AWS メディアコンバータ

  • ビデオ 1 分あたり 0.08 ドル
  • 1,000 ビデオ × $0.08 = $80

私たちのソリューション

  • ラムダ: 1024MB × 10s × 1000 = $0.17
  • S3: ストレージの GET/PUT = $0.05
  • 合計: $0.22

これは 99.7% のコスト削減です。 ?

AWS Sideo Thumbnail Generator - The Serverless Node.js Solution Guide

何が間違っているのでしょうか? ?

このソリューションは素晴らしいですが、落とし穴がないわけではありません:

  • メモリ使用量: FFmpeg はメモリを大量に消費する可能性があります。 4K ビデオを処理している場合は、Lambda メモリを増やす必要がある場合があります。
  • タイムアウト制限: 非常に長いビデオの場合、Lambda のタイムアウトに達する可能性があります。このような場合には、ステップ関数の使用を検討してください。
  • コールド スタート: コンテナーは非常に大きいため、最初の呼び出しは遅くなる可能性があります。

次は何ですか? ?

これはほんの始まりにすぎません!このソリューションを次のように拡張できます。

  • 複数のサムネイル サイズを生成
  • ビデオメタデータを抽出する
  • プレビュー GIF を作成する
  • ビデオ透かしを追加

まとめ?

私たちは、大金を掛けずにビデオのサムネイルを生成するための、費用対効果が高く、スケーラブルなソリューションを構築しました。不要な機能に料金を支払う必要はもうありません!

覚えておいてください: 最良のソリューションとは、最も高価で複雑なソリューションではなく、必要なことを正確に実行し、それ以上でも以下でもないということです。

注記

これは役に立ちましたか? AWS とサーバーレスのコンテンツをさらに知りたい場合は、私をフォローすることを検討してください。サムネイルがビデオではなくモダンアートのように表示される場合は、まずビデオ形式を確認してから、下にコメントを入力してください。 ?

冗談はさておき、AWS でのビデオ処理の経験についてぜひお聞かせください。コストを最適化するための他の創造的な方法を見つけましたか?コメントで共有してください!

免責事項

このソリューションは運用環境で徹底的にテストされていますが、展開する前に独自の環境で徹底的にテストしてください。何かに火がついた場合は、マシュマロの素晴らしいレシピを用意しておきます。 ?


--- 私のメモ - 記事の要点

Lambda を使用して Docker を実行する理由 - 最初の選択肢ではなく、場合によっては唯一の選択肢、レイヤーの代替手段
AWS メディア サービスと比べて実行コストが非常に安い
高速です。異なるファイル サイズで比較を実行します
テスト可能な Ffmpeg

以上がAWS Sideo サムネイル ジェネレーター - サーバーレス Node.js ソリューションガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。