이 튜토리얼에서는 Cloud Run 작업을 사용하여 우선순위가 낮은 오프라인 동영상을 트랜스코딩하는 방법을 설명합니다.
신청 준비
사용할 코드 샘플을 검색하려면 다음 안내를 따르세요.
샘플 저장소를 로컬 머신에 클론합니다.
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
Cloud Run 샘플 코드가 포함된 디렉터리로 변경합니다.
cd cloud-run-samples/jobs-video-encoding
Cloud Storage 버킷 만들기
처리할 동영상을 저장하고 인코딩 결과를 저장하려면 다음 두 개의 Cloud Storage 버킷을 만드세요.
처리하기 전에 동영상을 저장할 버킷을 만듭니다.
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATION
다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID입니다.
- LOCATION: Cloud Storage 위치입니다.
이 버킷에서 읽을 수 있는 액세스 권한을 서비스 계정에 부여합니다.
gcloud storage buckets add-iam-policy-binding gs://preprocessing-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer"
PROJECT_ID를 프로젝트 ID로 바꿉니다.
처리 후 트랜스코딩된 동영상을 저장할 버킷을 만듭니다.
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATION
다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID입니다.
- LOCATION: Cloud Storage 위치입니다.
서비스 계정에 이 버킷에서 읽고 쓸 수 있는 액세스 권한을 부여합니다.
gcloud storage buckets add-iam-policy-binding gs://transcoded-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin"
PROJECT_ID를 프로젝트 ID로 바꿉니다.
Cloud Run 작업 배포
샘플 저장소의 Dockerfile을 사용하여 Cloud Run 작업을 만들고 만든 버킷을 마운트합니다.
샘플 디렉토리로 이동합니다.
cd cloud-run-samples/jobs-video-encoding
기본 Cloud Run 레지스트리가 아직 없으면 Artifact Registry를 만듭니다.
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location LOCATION
LOCATION을 레지스트리 위치의 이름으로 바꿉니다.
컨테이너 이미지를 빌드합니다.
gcloud builds submit \ --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --machine-type E2-HIGHCPU-32
다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID입니다.
- LOCATION:레지스트리 위치의 이름입니다.
- IMAGE_NAME: 컨테이너 이미지의 이름입니다(예:
ffmpeg-image
).
Cloud Run은 더 큰 머신 유형을 사용하여 빌드 시간을 줄입니다.
작업을 배포합니다.
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
다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID입니다.
- REGION: 리전의 이름 참고: GPU 할당량이 있는 리전과 동일해야 합니다.
- IMAGE_NAME: 컨테이너 이미지의 이름입니다(예:
ffmpeg-image
).
이 프로젝트에서 소스를 처음 배포하는 경우 Cloud Run에서 기본 Artifact Registry 저장소를 만들라는 메시지가 표시됩니다.
작업 실행
작업을 실행하려면 다음 단계를 따르세요.
인코딩할 예시 동영상을 업로드합니다.
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_ID
작업을 실행합니다.
gcloud run jobs execute video-encoding-job \ --region REGION \ --wait \ --args="cat.mp4,encoded_cat.mp4,-vcodec,h264_nvenc,-cq,21,-movflags,+faststart"
entrypoint.sh
파일에는 입력 파일, 출력 파일, FFmpeg에 전송할 인수가 필요합니다.Cloud Run 로그를 검토하여 동영상이 트랜스코딩되었는지 확인합니다.
gcloud run jobs logs read video-encoding-job --region REGION
트랜스코딩된 동영상을 다운로드합니다.
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .