En este instructivo, se describe cómo transcodificar videos sin conexión de baja prioridad con trabajos de Cloud Run.
Prepara tu solicitud
A fin de recuperar la muestra de código para su uso, haz lo siguiente:
Clona el repositorio de muestra en tu máquina local:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
Ve al directorio que contiene el código de muestra de Cloud Run:
cd cloud-run-samples/jobs-video-encoding
Crea buckets de Cloud Storage
Para almacenar los videos que se procesarán y guardar los resultados de la codificación, crea los siguientes dos buckets de Cloud Storage:
Crea un bucket para almacenar videos antes de procesarlos:
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATION
Reemplaza lo siguiente:
- PROJECT_ID: el ID de tu proyecto
- LOCATION: Es la ubicación de Cloud Storage.
Otorga a la cuenta de servicio acceso de lectura a este 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"
Reemplaza PROJECT_ID con el ID del proyecto.
Crea un bucket para almacenar los videos transcodificados después del procesamiento:
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATION
Reemplaza lo siguiente:
- PROJECT_ID: el ID de tu proyecto
- LOCATION: Es la ubicación de Cloud Storage.
Otorga a la cuenta de servicio acceso para leer y escribir en este 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"
Reemplaza PROJECT_ID con el ID del proyecto.
Implementa un trabajo de Cloud Run
Crea un trabajo de Cloud Run con el Dockerfile del repositorio de muestra y monta los buckets que creaste:
Navega al directorio de muestra:
cd cloud-run-samples/jobs-video-encoding
Crea un Artifact Registry si el registro predeterminado de Cloud Run aún no existe:
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location LOCATION
Reemplaza LOCATION por el nombre de la ubicación del registro.
Compila la imagen del contenedor:
gcloud builds submit \ --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --machine-type E2-HIGHCPU-32
Reemplaza lo siguiente:
- PROJECT_ID: el ID de tu proyecto
- LOCATION:Es el nombre de la ubicación del registro.
- IMAGE_NAME: Es el nombre de la imagen del contenedor, por ejemplo,
ffmpeg-image
.
Cloud Run usa un tipo de máquina más grande para reducir el tiempo de compilación.
Implementa el trabajo:
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
Reemplaza lo siguiente:
- PROJECT_ID: el ID de tu proyecto
- REGION: es el nombre de la región. Nota: Debe ser la misma región para la que tienes cuota de GPU.
- IMAGE_NAME: Es el nombre de la imagen del contenedor, por ejemplo,
ffmpeg-image
.
Si es la primera vez que implementas desde la fuente en este proyecto, Cloud Run te solicitará que crees un repositorio predeterminado de Artifact Registry.
Ejecuta el trabajo
Para ejecutar el trabajo, sigue estos pasos:
Sube un video de ejemplo para codificar:
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_ID
Ejecute el trabajo:
gcloud run jobs execute video-encoding-job \ --region REGION \ --wait \ --args="cat.mp4,encoded_cat.mp4,-vcodec,h264_nvenc,-cq,21,-movflags,+faststart"
El archivo
entrypoint.sh
requiere un archivo de entrada, un archivo de salida y cualquier argumento que se envíe a FFmpeg.Revisa los registros de Cloud Run para asegurarte de que el video se transcodificó:
gcloud run jobs logs read video-encoding-job --region REGION
Descarga el video transcodificado:
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .