本教學課程說明如何使用 Cloud Run 工作,轉碼低優先順序的離線影片。
準備申請
如要擷取要使用的程式碼範例:
將範例存放區複製到本機電腦中:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
變更為包含 Cloud Run 範例程式碼的目錄:
cd cloud-run-samples/jobs-video-encoding
建立 Cloud Storage 值區
如要儲存待處理的影片,以及儲存編碼結果,請建立下列兩個 Cloud Storage bucket:
建立值區,以便在處理影片前儲存影片:
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATION
更改下列內容:
- PROJECT_ID:您的專案 ID。
- LOCATION:Cloud Storage 位置。
授予服務帳戶從這個 bucket 讀取的權限:
gcloud storage buckets add-iam-policy-binding gs://preprocessing-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer"
將 PROJECT_ID 替換為您的專案 ID。
建立值區,用於儲存處理後的轉碼影片:
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATION
更改下列內容:
- PROJECT_ID:您的專案 ID。
- LOCATION:Cloud Storage 位置。
授予服務帳戶讀取及寫入這個 bucket 的權限:
gcloud storage buckets add-iam-policy-binding gs://transcoded-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin"
將 PROJECT_ID 替換為您的專案 ID。
部署 Cloud Run 工作
使用範例存放區中的 Dockerfile 建立 Cloud Run 作業,並掛接您建立的 bucket:
前往範例目錄:
cd cloud-run-samples/jobs-video-encoding
如果預設 Cloud Run 登錄檔不存在,請建立 Artifact Registry:
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location LOCATION
將 LOCATION 替換為登錄檔位置的名稱。
建構容器映像檔:
gcloud builds submit \ --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --machine-type E2-HIGHCPU-32
更改下列內容:
- PROJECT_ID:您的專案 ID。
- LOCATION:登錄檔位置的名稱。
- IMAGE_NAME:容器映像檔的名稱,例如:
ffmpeg-image
。
Cloud Run 會使用較大的機器類型,縮短建構時間。
部署工作:
gcloud beta run jobs create video-encoding-job \ --image LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --region REGION \ --memory 32Gi \ --cpu 8 \ --gpu 1 \ --gpu-type nvidia-l4 \ --no-gpu-zonal-redundancy \ --max-retries 1 \ --service-account video-encoding@PROJECT_ID.iam.gserviceaccount.com \ --add-volume=name=input-volume,type=cloud-storage,bucket=preprocessing-PROJECT_ID,readonly=true \ --add-volume-mount=volume=input-volume,mount-path=/inputs \ --add-volume=name=output-volume,type=cloud-storage,bucket=transcoded-PROJECT_ID \ --add-volume-mount=volume=output-volume,mount-path=/outputs
更改下列內容:
- PROJECT_ID:您的專案 ID。
- REGION:區域名稱。 注意:這必須是您有 GPU 配額的相同區域。
- IMAGE_NAME:容器映像檔的名稱,例如
ffmpeg-image
。
如果這是您第一次在這個專案中從來源部署,Cloud Run 會提示您建立預設的 Artifact Registry 存放區。
執行工作
如要執行這項工作,請按照下列步驟操作:
上傳要編碼的範例影片:
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_ID
執行工作:
gcloud run jobs execute video-encoding-job \ --region REGION \ --wait \ --args="cat.mp4,encoded_cat.mp4,-vcodec,h264_nvenc,-cq,21,-movflags,+faststart"
entrypoint.sh
檔案需要輸入檔案、輸出檔案,以及要傳送至 FFmpeg 的任何引數。查看 Cloud Run 記錄,確認影片已轉碼:
gcloud run jobs logs read video-encoding-job --region REGION
下載轉碼後的影片:
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .