En este tutorial se describe cómo transcodificar vídeos sin conexión de baja prioridad mediante trabajos de Cloud Run.
Objetivos
En este tutorial, harás lo siguiente:
- Crea segmentos de Cloud Storage para almacenar los vídeos que se van a procesar y los resultados de la codificación.
- Desplegar un trabajo de Cloud Run con GPUs para acelerar la transcodificación de vídeo.
- Ejecuta la tarea y comprueba que el vídeo se ha transcodificado correctamente.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Antes de empezar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Artifact Registry, and Cloud Build APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable run.googleapis.com
cloudbuild.googleapis.com artifactregistry.googleapis.com - Define tu región como variable de entorno:
export REGION=REGION
- Crea una cuenta de servicio:
gcloud iam service-accounts create video-encoding
- Solicita
Total Nvidia L4 GPU allocation without zonal redundancy, per project per regionen la página Cuotas y límites del sistema de la API Admin de Cloud Run para completar este tutorial. También puedes desplegar un servicio de Cloud Run para recibir automáticamente una asignación de cuota de 3 GPUs nvidia-l4 (redundancia zonal desactivada) en una región. -
Administrador del repositorio de Artifact Registry (
roles/artifactregistry.repoAdmin) -
Editor de Cloud Build (
roles/cloudbuild.builds.editor) -
Administrador de Cloud Run (
roles/run.admin) -
Crear cuentas de servicio (
roles/iam.serviceAccountCreator) -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser) -
En la consola de Google Cloud , ve a la página Gestión de identidades y accesos.
Ir a Gestión de identidades y accesos - Selecciona el proyecto.
- Haz clic en Conceder acceso.
-
En el campo Nuevos principales, introduce tu identificador de usuario. Normalmente, es la dirección de correo electrónico que se usa para desplegar el servicio Cloud Run.
- En la lista Selecciona un rol, elige un rol.
- Para conceder más roles, haz clic en Añadir otro rol y añade cada rol adicional.
- Haz clic en Guardar.
- PROJECT_NUMBER con el número de tu proyecto. Google Cloud
- PROJECT_ID por el ID de tu proyecto. Google Cloud
- PRINCIPAL con la cuenta a la que quieres añadir la vinculación. Normalmente, es la dirección de correo electrónico que se usa para desplegar el servicio Cloud Run.
- ROLE con el rol que vas a añadir a la cuenta del implementador.
Clona el repositorio de ejemplo en tu máquina local:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samplesCambia al directorio que contiene el código de ejemplo de Cloud Run:
cd cloud-run-samples/jobs-video-encodingCrea un segmento para almacenar los vídeos antes de procesarlos:
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATIONHaz los cambios siguientes:
- PROJECT_ID: tu ID de proyecto.
- LOCATION: la ubicación de Cloud Storage.
Concede a la cuenta de servicio acceso de lectura a este segmento:
gcloud storage buckets add-iam-policy-binding gs://preprocessing-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer"Sustituye PROJECT_ID por el ID del proyecto.
Crea un segmento para almacenar los vídeos transcodificados después del procesamiento:
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATIONHaz los cambios siguientes:
- PROJECT_ID: tu ID de proyecto.
- LOCATION: la ubicación de Cloud Storage.
Concede a la cuenta de servicio acceso de lectura y escritura a este segmento:
gcloud storage buckets add-iam-policy-binding gs://transcoded-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin"Sustituye PROJECT_ID por el ID del proyecto.
Accede al directorio de muestra:
cd cloud-run-samples/jobs-video-encodingCrea un registro de 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 LOCATIONSustituye LOCATION por el nombre de la ubicación del registro.
Crea la imagen del contenedor:
gcloud builds submit \ --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --machine-type E2-HIGHCPU-32Haz los cambios siguientes:
- PROJECT_ID: tu ID de proyecto.
- LOCATION:nombre de la ubicación del registro.
- IMAGE_NAME: 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.
Despliega el trabajo:
gcloud 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=/outputsHaz los cambios siguientes:
- PROJECT_ID: tu ID de proyecto.
- REGION: el nombre de la región. Nota: Debe ser la misma región para la que tienes cuota de GPU.
- IMAGE_NAME: nombre de la imagen del contenedor. Por ejemplo,
ffmpeg-image.
Si es la primera vez que implementas desde una fuente en este proyecto, Cloud Run te pedirá que crees un repositorio de Artifact Registry predeterminado.
Sube un vídeo de ejemplo para codificarlo:
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_IDEjecuta 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.shrequiere un archivo de entrada, un archivo de salida y los argumentos que se enviarán a FFmpeg.Revisa los registros de Cloud Run para asegurarte de que el vídeo se ha transcodificado:
gcloud run jobs logs read video-encoding-job --region REGIONDescarga el vídeo transcodificado:
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .En la Google Cloud consola, ve a Cloud Run:
Busca el trabajo que quieras eliminar en la lista de trabajos y haz clic en la casilla para seleccionarlo.
Haz clic en Eliminar. De esta forma, se finalizan todas las ejecuciones de trabajos en curso y todas las instancias de contenedor en ejecución.
- Consulta otras demos, tutoriales y ejemplos de Cloud Run.
Roles obligatorios
Para obtener los permisos que necesitas para completar el tutorial, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu proyecto:
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Conceder los roles
Consola
gcloud
Para conceder los roles de gestión de identidades y accesos necesarios a tu cuenta en tu proyecto, sigue estos pasos:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
Sustituye:
Preparar la solicitud
Para obtener el código de muestra que vas a usar, sigue estos pasos:
Crear segmentos de Cloud Storage
Para almacenar los vídeos que se van a procesar y guardar los resultados de la codificación, crea los dos segmentos de Cloud Storage siguientes:
Desplegar un trabajo de Cloud Run
Crea un trabajo de Cloud Run con el Dockerfile del repositorio de ejemplo y monta los segmentos que has creado:
Ejecutar la tarea
Para ejecutar el trabajo, siga estos pasos:
Limpieza
Para evitar que se apliquen cargos adicionales a tu cuenta de Google Cloud , elimina todos los recursos que hayas desplegado con esta guía de inicio rápido.
Eliminar un repositorio
Cloud Run solo cobra por el tiempo que se ejecuta tu trabajo. Sin embargo, es posible que se te cobre por almacenar la imagen de contenedor en Artifact Registry. Para eliminar repositorios de Artifact Registry, sigue los pasos que se indican en el artículo Eliminar repositorios de la documentación de Artifact Registry.
Eliminar un trabajo
Los trabajos de Cloud Run solo generan costes cuando se ejecuta una tarea. Para eliminar tu trabajo de Cloud Run, sigue uno de estos pasos:
Consola
Para eliminar un trabajo, sigue estos pasos:
gcloud
Para eliminar un trabajo, ejecuta el siguiente comando:
gcloud run jobs delete JOB_NAME
Sustituye JOB_NAME por el nombre del trabajo.
Eliminar un proyecto de prueba
Si eliminas tu proyecto de Google Cloud , se detendrá la facturación de todos los recursos de ese proyecto. Para liberar todos los recursos de tu proyecto, sigue estos pasos: Google Cloud
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID