Questo tutorial descrive come transcodificare video offline a bassa priorità utilizzando i job Cloud Run.
Preparare la richiesta
Per recuperare l'esempio di codice da utilizzare:
Clona il repository di esempio sulla tua macchina locale:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
Passa alla directory che contiene il codice campione di Cloud Run:
cd cloud-run-samples/jobs-video-encoding
Creazione di bucket di Cloud Storage
Per archiviare i video da elaborare e salvare i risultati della codifica, crea i seguenti due bucket Cloud Storage:
Crea un bucket per archiviare i video prima dell'elaborazione:
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATION
Sostituisci quanto segue:
- PROJECT_ID: il tuo ID progetto.
- LOCATION: la posizione di Cloud Storage.
Concedi al account di servizio l'accesso in lettura a questo 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"
Sostituisci PROJECT_ID con l'ID progetto.
Crea un bucket per archiviare i video transcodificati dopo l'elaborazione:
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATION
Sostituisci quanto segue:
- PROJECT_ID: il tuo ID progetto.
- LOCATION: la posizione di Cloud Storage.
Concedi all'account di servizio l'accesso in lettura e scrittura a questo 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"
Sostituisci PROJECT_ID con l'ID progetto.
Esegui il deployment di un job Cloud Run
Crea un job Cloud Run utilizzando il Dockerfile nel repository di esempio e montando i bucket che hai creato:
Passa alla directory di esempio:
cd cloud-run-samples/jobs-video-encoding
Crea un Artifact Registry se il registro Cloud Run predefinito non esiste già:
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location LOCATION
Sostituisci LOCATION con il nome della posizione del registro.
Crea l'immagine container:
gcloud builds submit \ --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --machine-type E2-HIGHCPU-32
Sostituisci quanto segue:
- PROJECT_ID: il tuo ID progetto.
- LOCATION:il nome della posizione del registro.
- IMAGE_NAME: il nome dell'immagine container, ad esempio
ffmpeg-image
.
Cloud Run utilizza un tipo di macchina più grande per ridurre il tempo di compilazione.
Esegui il deployment del job:
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
Sostituisci quanto segue:
- PROJECT_ID: il tuo ID progetto.
- REGION: il nome della regione Nota: deve essere la stessa regione per cui hai una quota di GPU.
- IMAGE_NAME: il nome dell'immagine container, ad esempio
ffmpeg-image
.
Se è la prima volta che esegui il deployment dal codice sorgente in questo progetto, Cloud Run ti chiede di creare un repository Artifact Registry predefinito.
Esegui il job
Per eseguire il job:
Carica un video di esempio da codificare:
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_ID
Esegui il job:
gcloud run jobs execute video-encoding-job \ --region REGION \ --wait \ --args="cat.mp4,encoded_cat.mp4,-vcodec,h264_nvenc,-cq,21,-movflags,+faststart"
Il file
entrypoint.sh
richiede un file di input, un file di output e tutti gli argomenti da inviare a FFmpeg.Esamina i log di Cloud Run per assicurarti che il video sia stato transcodificato:
gcloud run jobs logs read video-encoding-job --region REGION
Scarica il video transcodificato:
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .