Neste tutorial, descrevemos como transcodificar vídeos off-line de baixa prioridade usando jobs do Cloud Run.
Prepare sua inscrição
Para recuperar o exemplo de código para uso, siga estas etapas:
Clone o repositório de amostra na sua máquina local:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
Mude para o diretório que contém o código de amostra do Cloud Run:
cd cloud-run-samples/jobs-video-encoding
Criar buckets do Cloud Storage
Para armazenar os vídeos para processamento e salvar os resultados da codificação, crie os dois buckets do Cloud Storage a seguir:
Crie um bucket para armazenar vídeos antes do processamento:
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATION
Substitua:
- PROJECT_ID: o ID do projeto.
- LOCATION: o local do Cloud Storage.
Conceda à conta de serviço acesso de leitura a esse bucket:
gcloud storage buckets add-iam-policy-binding gs://preprocessing-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID." \ --role="roles/storage.objectViewer"
Substitua PROJECT_ID pela ID do seu projeto.
Crie um bucket para armazenar os vídeos transcodificados após o processamento:
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATION
Substitua:
- PROJECT_ID: o ID do projeto.
- LOCATION: o local do Cloud Storage.
Conceda à conta de serviço acesso de leitura e gravação a esse bucket:
gcloud storage buckets add-iam-policy-binding gs://transcoded-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID." \ --role="roles/storage.objectAdmin"
Substitua PROJECT_ID pela ID do seu projeto.
Implantar um job do Cloud Run
Crie um job do Cloud Run usando o Dockerfile no repositório de exemplo e montando os buckets que você criou:
Navegue até o diretório de amostra:
cd cloud-run-samples/jobs-video-encoding
Crie um Artifact Registry se o registro padrão do Cloud Run ainda não existir:
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location LOCATION
Substitua LOCATION pelo nome do local do registro.
Crie a imagem do contêiner:
gcloud builds submit \ --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --machine-type E2-HIGHCPU-32
Substitua:
- PROJECT_ID: o ID do projeto.
- LOCATION:nome do local do registro.
- IMAGE_NAME: nome da imagem do contêiner. Por exemplo,
ffmpeg-image
.
O Cloud Run usa um tipo de máquina maior para reduzir o tempo de build.
Implante o 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. \ --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:
- PROJECT_ID: o ID do projeto.
- REGION: o nome da região. Observação: essa precisa ser a mesma região em que você tem cota de GPU.
- IMAGE_NAME: nome da imagem do contêiner, por exemplo,
ffmpeg-image
.
Se esta for a primeira vez que você implanta de uma origem neste projeto, o Cloud Run vai pedir para você criar um repositório padrão do Artifact Registry.
Execute o job
Para executar o job, siga estas etapas:
Faça upload de um vídeo de exemplo para codificar:
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_ID
Execute o job:
gcloud run jobs execute video-encoding-job \ --region REGION \ --wait \ --args="cat.mp4,encoded_cat.mp4,-vcodec,h264_nvenc,-cq,21,-movflags,+faststart"
O arquivo
entrypoint.sh
exige um arquivo de entrada, um arquivo de saída e argumentos para enviar ao FFmpeg.Analise os registros do Cloud Run para garantir que o vídeo foi transcodificado:
gcloud run jobs logs read video-encoding-job --region REGION
Baixe o vídeo transcodificado:
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .