在 AWS Lambda 上執行 ffmpeg

在 AWS Lambda 上用 ffmpeg,但不用自己養那個 Lambda

Lambda 確實跑得動 ffmpeg——但打包、冷啟動和維運也一併變成你的事。Fotovid 幫你把這三件事一次拿掉:送出請求、拿到託管好的檔案,不必再建 layer。

// handler.mjs — Node 18+ runtime (global fetch)
export const handler = async (event) => {
  const { videoUrl, logoUrl } = JSON.parse(event.body);

  const res = await fetch("https://api.fotovid.co/v1/video/watermark", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.FOTOVID_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      source_url: videoUrl,
      params: { type: "image", watermark_image_url: logoUrl, position: "bottom-right" },
    }),
  });

  const { url } = await res.json();
  return { statusCode: 200, body: JSON.stringify({ url }) };
};

你只是想幫上傳的影片加個浮水印

沒錯,Lambda 跑得動 ffmpeg。你得做一個解壓後小於 250MB 的 layer,把 /tmp 接成暫存空間(最多 10GB),還得待在 15 分鐘的執行上限內。接著真正的工作才開始:鎖定一份靜態編譯的 ffmpeg、調記憶體讓 1080p 編碼不會逾時、在第一個請求上硬吃冷啟動,然後永遠自己維護下去。只為了在影片上蓋一個 logo,要架設的基礎設施實在太多了。

  • 把靜態編譯的 ffmpeg 二進位打包成 layer 並管好版本,還要讓解壓後不超過 250MB 限制
  • 針對每種操作分別調整記憶體與逾時,避免編碼撞上 15 分鐘的天花板
  • 在使用者正在等的那一個請求上,硬吞冷啟動延遲
  • 維護、修補、監控一個你從來就不想擁有的 ffmpeg Lambda

團隊想在 AWS Lambda 上跑 ffmpeg 的幾種做法

在 Fotovid 出現之前,你只有這些選項——而每一個都是你不會想自己扛的工作。

OptionWhat it costs youVerdict
把 ffmpeg 塞進你的 AWS Lambda 函式只有靠你自己打包、自己吞冷啟動、自己調校的 layer 才塞得下
自架容器或 VM常駐成本,外加修補、擴縮與監控
自建任務佇列 + worker多一整套基礎設施:佇列、worker、重試、死信處理
在瀏覽器裡轉檔(WASM)慢、吃記憶體,在手機上還會直接當掉
呼叫 Fotovid API一次 HTTPS 請求;沒有東西要跑、要打包、要擴充
How it works

三個步驟完成第一次呼叫

  1. 1
    免費拿一把 API 金鑰

    建立一把 Fotovid 金鑰,取得 p6_<key_id>:<secret> 格式的權杖。每次請求都用 Authorization: Bearer 標頭送出。不用 AWS 角色、不用 layer、不用建置流程——用量以 credits 計費($1 = 100 credits,多數操作只花 1 credit)。

  2. 2
    把影片 POST 到 /v1/video/watermark

    用標準封包呼叫 POST https://api.fotovid.co/v1/video/watermark:一個 source_url(透過 HTTPS 指向你的來源檔案),再加上一個 params 物件。要加浮水印就設定 type(image、text 或 combo)、watermark_image_url 或 text、像 bottom-right 這樣的 position,以及選填的 opacity、scale 和 padding。Fotovid 會抓取來源、執行 ffmpeg 並同步回傳——沒有佇列要輪詢,也沒有 Lambda 要保溫。

  3. 3
    直接使用託管的結果 URL

    回應是扁平的 JSON:一個 id、type,以及指向成品的 url(檔案由 Fotovid 託管),另外還有 expires_at,影片則多一個 duration。你可以把這個 URL 直接丟給前端,或下載下來自己存一份。同樣的流程也適用於 /v1/video/trim、/v1/video/extract-audio、/v1/video/extract-cover、/v1/video/probe,以及圖片和音訊的端點。

常見問題

一次 API 呼叫就能上線

拿一把免費金鑰,五分鐘內完成你的第一次呼叫。