Transcoding video yang diakselerasi GPU dengan FFmpeg pada tugas Cloud Run

Tutorial ini menjelaskan cara mentranskode video offline berprioritas rendah menggunakan tugas Cloud Run.

Menyiapkan permohonan pendaftaran

Untuk mengambil contoh kode agar dapat digunakan:

  1. Clone repositori contoh ke komputer lokal Anda:

    git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
    
  2. Ubah ke direktori yang memuat kode contoh Cloud Run:

    cd cloud-run-samples/jobs-video-encoding
    

Membuat bucket Cloud Storage

Untuk menyimpan video yang akan diproses, dan untuk menyimpan hasil encoding, buat dua bucket Cloud Storage berikut:

  1. Buat bucket untuk menyimpan video sebelum diproses:

    gcloud storage buckets create gs://preprocessing-PROJECT_ID \
      --location LOCATION
    

    Ganti kode berikut:

    • PROJECT_ID: project ID Anda.
    • LOCATION: lokasi Cloud Storage.
  2. Beri akun layanan akses untuk membaca dari bucket ini:

    gcloud storage buckets add-iam-policy-binding gs://preprocessing-PROJECT_ID \
      --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/storage.objectViewer"
    

    Ganti PROJECT_ID dengan project ID Anda.

  3. Buat bucket untuk menyimpan video yang ditranskode setelah diproses:

    gcloud storage buckets create gs://transcoded-PROJECT_ID \
      --location LOCATION
    

    Ganti kode berikut:

    • PROJECT_ID: project ID Anda.
    • LOCATION: lokasi Cloud Storage.
  4. Beri akun layanan akses untuk membaca dari dan menulis ke bucket ini:

    gcloud storage buckets add-iam-policy-binding gs://transcoded-PROJECT_ID \
      --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/storage.objectAdmin"
    

    Ganti PROJECT_ID dengan project ID Anda.

Men-deploy tugas Cloud Run

Buat tugas Cloud Run dengan menggunakan Dockerfile di repositori contoh dan memasang bucket yang Anda buat:

  1. Buka direktori contoh:

    cd cloud-run-samples/jobs-video-encoding
    

  1. Buat Artifact Registry jika registry Cloud Run default belum ada:

    gcloud artifacts repositories create cloud-run-source-deploy \
      --repository-format=docker \
      --location LOCATION
    

    Ganti LOCATION dengan nama lokasi registri.

  2. Build image container:

    gcloud builds submit \
      --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \
      --machine-type E2-HIGHCPU-32
    

    Ganti kode berikut:

    • PROJECT_ID: project ID Anda.
    • LOCATION:nama lokasi registri.
    • IMAGE_NAME: nama untuk image container, misalnya: ffmpeg-image.

    Cloud Run menggunakan jenis mesin yang lebih besar untuk mengurangi waktu build.

  3. Deploy tugas:

    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
    

    Ganti kode berikut:

    • PROJECT_ID: project ID Anda.
    • REGION: nama region. Catatan: Region ini harus sama dengan region yang memiliki kuota GPU untuk Anda.
    • IMAGE_NAME: nama untuk image container, misalnya, ffmpeg-image.

    Jika ini adalah pertama kalinya Anda men-deploy dari sumber di project ini, Cloud Run akan meminta Anda membuat repositori Artifact Registry default.

Menjalankan tugas

Untuk menjalankan tugas, ikuti langkah-langkah berikut:

  1. Upload contoh video untuk dienkode:

    gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_ID
    
  2. Jalankan tugas:

    gcloud run jobs execute video-encoding-job  \
        --region REGION \
        --wait \
        --args="cat.mp4,encoded_cat.mp4,-vcodec,h264_nvenc,-cq,21,-movflags,+faststart"
    

    File entrypoint.sh memerlukan file input, file output, dan argumen apa pun yang akan dikirim ke FFmpeg.

  3. Tinjau log Cloud Run untuk memastikan video ditranskode:

    gcloud run jobs logs read video-encoding-job --region REGION
    
  4. Download video yang di-transcoding:

    gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .