注意:不要分成兩部分,這裡沒有足夠的文字來證明拆分的合理性,並且本文重點介紹解決方案而不是討論選擇。
需要高效且經濟高效地大規模生成視訊縮圖嗎?讓我們使用 AWS Lambda 建立一個真正的無伺服器解決方案,與使用專用媒體處理服務相比,該解決方案的運作成本僅為幾美分。
此解包含一個 Node.js Lambda 函數,該函數:
大規模產生縮圖並不容易,也不便宜。對於影片來說,成本因素尤其重要 - 對於圖像,您所要做的就是調整大小、裁剪並儲存相同類型的輸出。您可以將此責任轉移給第三方雲端服務,以專注於提供其他功能,或者只需做一點工作即可在不離開 AWS VPC 的情況下執行任務。但對於影片來說,情況有所不同。視訊檔案要大得多,我們必須支援大量不同的編碼標準,最終結果不再是視訊 - 我們本質上是提取靜態影像。
在研究選項時,我總是求助於應用程式所在平台的原生解決方案。在 AWS 中,這是 MediaConvert 或 MediaLive。當您需要專業級視訊處理時,兩者都很棒,但當您只想從影片中抓取縮圖時…好吧,它們確實可以做到,但它們設計是否可以處理此類用例?不是真的。
令人驚訝的是,AWS 並沒有專門用於產生縮圖的服務。可用的解決方案專注於其他用例,例如提供對串流媒體的支援或運行高級視訊轉換任務。
當您查看使用這些服務建立此類功能的要求時,問題非常明顯
產生一些影片縮圖的成本應該比早上喝咖啡的成本還要高嗎? ☕ 這只是因為這些服務雖然功能強大,但對於縮圖產生等簡單任務來說卻顯得有些過分了。
AWS Media 服務的真正成本不僅僅在於美元 - 還在您通常不需要的複雜性。
每次遇到新的要求時,我的思維都會調整到「尋找適合工作的完美工具」模式。我一直在宣揚不要遵循你所知道的東西的重要性,並且總是探索盡可能多的替代方案,這樣我可能會開始聽起來像一張破唱片……但我想我喜歡唱片正在播放的曲調! ??
您也可以稱之為醫療狀況。我完全意識到我的工程強迫症問題...?
但是我離題了...
當然,還有其他解決方案,但它們常常帶來令人頭痛的問題:
讓我們建立一些不僅更便宜,而且專注於我們實際需要的東西 - 一個可以產生視訊縮圖的無伺服器解決方案。 ?
系統使用下列 AWS 服務與工具:
當影片上傳到來源 S3 儲存桶時,它會觸發一個對處理請求進行排隊的事件。 Lambda 函數使用在 Docker 容器中執行的 FFmpeg 擷取並處理它。然後生成的縮圖儲存在目標 S3 儲存桶中。可恢復的暫時性問題(例如限製或基礎設施相關問題)會自動重試,而所有其他失敗事件會自動發送到死信佇列以進行審核。
此服務會自動產生兩種尺寸的影片縮圖。較大的版本在畫面中央包含一個半透明的視訊圖標,幫助用戶快速識別視訊內容。
範例項目
服務
這是我們用 Lambda 打包 FFmpeg 的 Dockerfile:
讓我們來詳細分析一下每月處理 1000 個影片的成本:
成本降低了 99.7%! ?
雖然這個解決方案非常棒,但它並非沒有問題:
這只是開始!您可以將此解決方案擴展到:
我們建立了一個經濟高效、可擴展的視訊縮圖生成解決方案,而且不會花太多錢。不再需要為不需要的功能付費!
記住:有時最好的解決方案並不是最昂貴或最複雜的 - 而是能夠完全滿足您需要的解決方案,僅此而已。
覺得這有幫助嗎?考慮關注我以獲取更多 AWS 和無伺服器內容!如果您的縮圖看起來像現代藝術而不是您的影片...那麼,請先檢查您的影片格式,然後在下面發表評論! ?
拋開所有笑話,我很想聽聽您在 AWS 中進行視訊處理的體驗。您是否找到了其他優化成本的創意方法?評論裡分享一下吧!
雖然此解決方案已經在生產中經過了實際測試,但請在部署之前在您自己的環境中進行徹底測試。如果有東西著火了,我有一個很棒的棉花糖食譜! ?
為什麼 docker 與 Lambda - 不是第一選擇,有時是唯一選擇,層替代
與 AWS Media 服務相比,運作起來超便宜
速度很快,可以對不同檔案大小進行比較
可測試的 Ffmpeg
以上是AWS Sideo 縮圖產生器 - 無伺服器 Node.js 解決方案指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!