Este tutorial descreve como transcodificar vídeos offline de baixa prioridade através de tarefas do Cloud Run.
Prepare a sua candidatura
Para obter o exemplo de código para utilização:
Clone o repositório de exemplo para a sua máquina local:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
Altere para o diretório que contém o código de exemplo do Cloud Run:
cd cloud-run-samples/jobs-video-encoding
Crie contentores do Cloud Storage
Para armazenar os vídeos para processamento e guardar os resultados da codificação, crie os dois contentores do Cloud Storage seguintes:
Crie um contentor para armazenar vídeos antes do processamento:
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATION
Substitua o seguinte:
- PROJECT_ID: o ID do seu projeto.
- LOCATION: a localização do Cloud Storage.
Conceda à conta de serviço acesso de leitura a este contentor:
gcloud storage buckets add-iam-policy-binding gs://preprocessing-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer"
Substitua PROJECT_ID pelo ID do seu projeto.
Crie um contentor para armazenar vídeos transcodificados após o processamento:
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATION
Substitua o seguinte:
- PROJECT_ID: o ID do seu projeto.
- LOCATION: a localização do Cloud Storage.
Conceda à conta de serviço acesso de leitura e escrita a este contentor:
gcloud storage buckets add-iam-policy-binding gs://transcoded-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin"
Substitua PROJECT_ID pelo ID do seu projeto.
Implemente uma tarefa do Cloud Run
Crie uma tarefa do Cloud Run usando o Dockerfile no repositório de exemplo e montando os contentores que criou:
Navegue para o diretório de exemplo:
cd cloud-run-samples/jobs-video-encoding
Crie um Artifact Registry se o registo do Cloud Run predefinido ainda não existir:
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location LOCATION
Substitua LOCATION pelo nome da localização do registo.
Crie a imagem de contentor:
gcloud builds submit \ --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --machine-type E2-HIGHCPU-32
Substitua o seguinte:
- PROJECT_ID: o ID do seu projeto.
- LOCATION:nome da localização do registo.
- IMAGE_NAME: nome da imagem do contentor, por exemplo:
ffmpeg-image
.
O Cloud Run usa um tipo de máquina maior para reduzir o tempo de compilação.
Implemente o trabalho:
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
Substitua o seguinte:
- PROJECT_ID: o ID do seu projeto.
- REGION: o nome da região. Nota: tem de ser a mesma região para a qual tem quota de GPU.
- IMAGE_NAME: nome da imagem do contentor, por exemplo,
ffmpeg-image
.
Se esta for a primeira vez que implementa a partir da origem neste projeto, o Cloud Run pede-lhe que crie um repositório do Artifact Registry predefinido.
Execute a tarefa
Para executar a tarefa, siga estes passos:
Carregue um vídeo de exemplo para codificar:
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_ID
Execute a tarefa:
gcloud run jobs execute video-encoding-job \ --region REGION \ --wait \ --args="cat.mp4,encoded_cat.mp4,-vcodec,h264_nvenc,-cq,21,-movflags,+faststart"
O ficheiro
entrypoint.sh
requer um ficheiro de entrada, um ficheiro de saída e quaisquer argumentos a enviar para o FFmpeg.Reveja os registos do Cloud Run para se certificar de que o vídeo foi transcodificado:
gcloud run jobs logs read video-encoding-job --region REGION
Transfira o vídeo transcodificado:
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .