Ce tutoriel explique comment transcoder des vidéos hors connexion de faible priorité à l'aide de tâches Cloud Run.
Préparer votre demande
Pour récupérer l’exemple de code à utiliser, procédez comme suit :
Clonez le dépôt de l'exemple sur votre ordinateur local :
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
Accédez au répertoire contenant l'exemple de code Cloud Run :
cd cloud-run-samples/jobs-video-encoding
Créer des buckets Cloud Storage
Pour stocker les vidéos à traiter et enregistrer les résultats de l'encodage, créez les deux buckets Cloud Storage suivants :
Créez un bucket pour stocker les vidéos avant le traitement :
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATION
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet.
- LOCATION : emplacement Cloud Storage.
Accordez au compte de service l'accès en lecture à ce 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"
Remplacez PROJECT_ID par l'ID du projet.
Créez un bucket pour stocker les vidéos transcodées après traitement :
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATION
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet.
- LOCATION : emplacement Cloud Storage.
Accordez au compte de service l'autorisation de lire et d'écrire dans ce 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"
Remplacez PROJECT_ID par l'ID du projet.
Déployer un job Cloud Run
Créez un job Cloud Run en utilisant le fichier Dockerfile du dépôt d'exemple et en montant les buckets que vous avez créés :
Accédez à l'exemple de répertoire :
cd cloud-run-samples/jobs-video-encoding
Créez un Artifact Registry si le registre Cloud Run par défaut n'existe pas encore :
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location LOCATION
Remplacez LOCATION par le nom de l'emplacement du registre.
Créez l'image du conteneur :
gcloud builds submit \ --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --machine-type E2-HIGHCPU-32
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet.
- LOCATION : nom de l'emplacement du registre.
- IMAGE_NAME : nom de l'image de conteneur, par exemple
ffmpeg-image
.
Cloud Run utilise un type de machine plus grand pour réduire le temps de compilation.
Déployez le 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
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet.
- REGION : nom de la région. Remarque : Il doit s'agir de la même région pour laquelle vous disposez d'un quota de GPU.
- IMAGE_NAME : nom de l'image de conteneur, par exemple
ffmpeg-image
.
Si c'est la première fois que vous déployez à partir d'une source dans ce projet, Cloud Run vous invite à créer un dépôt Artifact Registry par défaut.
Exécuter le job
Pour exécuter le job, procédez comme suit :
Importez un exemple de vidéo à encoder :
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_ID
Exécutez la tâche :
gcloud run jobs execute video-encoding-job \ --region REGION \ --wait \ --args="cat.mp4,encoded_cat.mp4,-vcodec,h264_nvenc,-cq,21,-movflags,+faststart"
Le fichier
entrypoint.sh
nécessite un fichier d'entrée, un fichier de sortie et tous les arguments à envoyer à FFmpeg.Consultez les journaux Cloud Run pour vous assurer que la vidéo a été transcodée :
gcloud run jobs logs read video-encoding-job --region REGION
Téléchargez la vidéo transcodée :
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .