首頁 >web前端 >js教程 >AWS Sideo 縮圖產生器 - 無伺服器 Node.js 解決方案指南

AWS Sideo 縮圖產生器 - 無伺服器 Node.js 解決方案指南

Barbara Streisand
Barbara Streisand原創
2024-12-27 10:45:11196瀏覽

注意:不要分成兩部分,這裡沒有足夠的文字來證明拆分的合理性,並且本文重點介紹解決方案而不是討論選擇。

需要高效且經濟高效地大規模生成視訊縮圖嗎?讓我們使用 AWS Lambda 建立一個真正的無伺服器解決方案,與使用專用媒體處理服務相比,該解決方案的運作成本僅為幾美分。

我們要建造什麼

此解包含一個 Node.js Lambda 函數,該函數:

  • 處理常見影片格式
  • 依工作負載進行擴充
  • 實作失敗操作的重試邏輯
  • 透過基礎設施即程式碼部署
  • 每個影片的運作成本僅為一美分

為什麼要定制

大規模產生縮圖並不容易,也不便宜。對於影片來說,成本因素尤其重要 - 對於圖像,您所要做的就是調整大小、裁剪並儲存相同類型的輸出。您可以將此責任轉移給第三方雲端服務,以專注於提供其他功能,或者只需做一點工作即可在不離開 AWS VPC 的情況下執行任務。但對於影片來說,情況有所不同。視訊檔案要大得多,我們必須支援大量不同的編碼標準,最終結果不再是視訊 - 我們本質上是提取靜態影像。

AWS Native = 超級昂貴

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

在研究選項時,我總是求助於應用程式所在平台的原生解決方案。在 AWS 中,這是 MediaConvert 或 MediaLive。當您需要專業級視訊處理時,兩者都很棒,但當您只想從影片中抓取縮圖時…好吧,它們確實可以做到,但它們設計是否可以處理此類用例?不是真的。

令人驚訝的是,AWS 並沒有專門用於產生縮圖的服務。可用的解決方案專注於其他用例,例如提供對串流媒體的支援或運行高級視訊轉換任務。

當您查看使用這些服務建立此類功能的要求時,問題非常明顯

  • 使用 AWS Media 服務時,無法建立未定義視訊輸出的處理管道 - 您需要處理整個視訊並丟棄結果,僅使用該流程的副產品縮圖
  • 因此,它作為縮圖生成器非常昂貴- 每分鐘處理視頻支付0.0075 美元 可能感覺不多,但加起來很快- 對於1,000 個視頻,每個15 分鐘長的處理成本將超過$100

產生一些影片縮圖的成本應該比早上喝咖啡的成本還要高嗎? ☕ 這只是因為這些服務雖然功能強大,但對於縮圖產生等簡單任務來說卻顯得有些過分了。

AWS Media 服務的真正成本不僅僅在於美元 - 還在您通常不需要的複雜性

每次遇到新的要求時,我的思維都會調整到「尋找適合工作的完美工具」模式。我一直在宣揚不要遵循你所知道的東西的重要性,並且總是探索盡可能多的替代方案,這樣我可能會開始聽起來像一張破唱片……但我想我喜歡唱片正在播放的曲調! ??

您也可以稱之為醫療狀況。我完全意識到我的工程強迫症問題...?

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

但是我離題了...

超越 AWS

當然,還有其他解決方案,但它們常常帶來令人頭痛的問題:

  • 外部服務通常會按 API 呼叫或處理的資料量收費
  • 您必須將影片上傳到外部服務進行處理,這意味著出口成本更高
  • 它們可能無法很好地擴展,讓您需要處理節流

客製化的專用解決方案

讓我們建立一些不僅更便宜,而且專注於我們實際需要的東西 - 一個可以產生視訊縮圖的無伺服器解決方案。 ?

系統使用下列 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 儲存桶中。可恢復的暫時性問題(例如限製或基礎設施相關問題)會自動重試,而所有其他失敗事件會自動發送到死信佇列以進行審核。

此服務會自動產生兩種尺寸的影片縮圖。較大的版本在畫面中央包含一個半透明的視訊圖標,幫助用戶快速識別視訊內容。

範例項目

  • 從 GH 拉取

服務

  • 編排 視訊處理實用程式
  • FFmpeg
  • 兩種縮圖類型
  • 不同尺寸,附覆蓋層 容器中的 FFmpeg
  • 這就是我們如何讓 Ffmpeg CLI 可用於 Lambda
  • Dockerfile 部署
  • 容器建置
  • 無伺服器部署
  • Docker化的Lambda定義 測試
  • int
  • e2e 無伺服器
  • 此時還有什麼嗎?

神奇的容器?

這是我們用 Lambda 打包 FFmpeg 的 Dockerfile:

讓我看看錢! ?

讓我們來詳細分析一下每月處理 1000 個影片的成本:

AWS MediaConvert

  • 每分鐘影片 0.08 美元
  • 1000 影片 × $0.08 = $80

我們的解決方案

  • Lambda: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 中進行視訊處理的體驗。您是否找到了其他優化成本的創意方法?評論裡分享一下吧!

免責聲明

雖然此解決方案已經在生產中經過了實際測試,但請在部署之前在您自己的環境中進行徹底測試。如果有東西著火了,我有一個很棒的棉花糖食譜! ?


--- 我的筆記 - 文章的談話重點

為什麼 docker 與 Lambda - 不是第一選擇,有時是唯一選擇,層替代
與 AWS Media 服務相比,運作起來超便宜
速度很快,可以對不同檔案大小進行比較
可測試的 Ffmpeg

以上是AWS Sideo 縮圖產生器 - 無伺服器 Node.js 解決方案指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn