En este tutorial se describe cómo transcodificar vídeos sin conexión de baja prioridad mediante trabajos de Cloud Run.
Preparar la solicitud
Para obtener el código de muestra que vas a usar, sigue estos pasos:
Clona el repositorio de ejemplo en tu máquina local:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
Cambia al directorio que contiene el código de ejemplo de Cloud Run:
cd cloud-run-samples/jobs-video-encoding
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:
Crea un segmento para almacenar los vídeos antes de procesarlos:
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATION
Haz 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 LOCATION
Haz 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.
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:
Accede al directorio de muestra:
cd cloud-run-samples/jobs-video-encoding
Crea 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 LOCATION
Sustituye 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-32
Haz 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 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
Haz 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.
Ejecutar la tarea
Para ejecutar el trabajo, siga estos pasos:
Sube un vídeo de ejemplo para codificarlo:
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_ID
Ejecuta 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 los argumentos que se envíen 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 REGION
Descarga el vídeo transcodificado:
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .