🌟

Firebaseから動画のトランスコードをする - Google Transcoder API

2021/12/07に公開

アップロードされた動画をトランスコード(エンコード)する方法として、Google Transcoder APIが簡単に利用できて便利だったので、その使い方を紹介します。

Google Transcoder API

Google Cloudが提供する動画ファイルの変換サービス(ドキュメント)
今回はFirebaseから利用するので、Cloud Storageに動画がアップロードされたイベントをCloud Functionsで受け取りTranscoder APIに流します。

サンプルコード

Cloud FunctionsでバケットにファイルがアップロードされたイベントをonFinalizeで受け取り、Transcoder APIを実行します。例えばHD画質720pの動画を書き出す場合のCloud Functionsのサンプルコードです。

index.js
const functions = require('firebase-functions')
const videoTranscoder = require('@google-cloud/video-transcoder').v1

exports.transcodeVideo = functions
  .region(MY_REGION)
  .storage.bucket(RAW_VIDEO_BUCKET)
  .object()
  .onFinalize(async (object) => {
    const videoTranscoderServiceClient = new videoTranscoder.TranscoderServiceClient()
    const request = {
      parent: videoTranscoderServiceClient.locationPath(PROJECT_ID, TRANSCODER_REGION),
      job: {
        inputUri: `gs://${object.bucket}/${object.name}`,
        outputUri: OUTPUT_URI,
        config: {
          elementaryStreams: [
            {
              key: 'video-stream',
              videoStream: {
                h264: {
                  heightPixels: 720,
                  widthPixels: 1280,
                  bitrateBps: 2500000,
                  frameRate: 60,
                },
              },
            },
            {
              key: 'audio-stream',
              audioStream: {
                codec: 'aac',
                bitrateBps: 64000,
              },
            },
          ],
          muxStreams: [
            {
              key: 'hd',
              container: 'mp4',
              elementaryStreams: ['video-stream', 'audio-stream'],
            },
          ],
        },
      },
    }
    const [response] = await videoTranscoderServiceClient.createJob(request).catch((error) => {
      return
    })
  })

Transcoder APIの料金

利用料金は、動画の再生時間と出力する動画の画質によって決まります。詳しくはここを見て下さい。

例えば再生時間10分の動画をHD画質で書き出すと $ 0.3になります。高いような安いような。AWSにも同じような機能がありますが、前に調べた時は同じ水準の料金設定でした。

また、Transcoder APIでは同時に複数の解像度で動画を書き出せます。例えば360p, 480p, 720p, 1080pの4つの動画を出力した場合には、それぞれの解像度出力の値段を加算した額が使用料金となります。

ちなみにTranscoder APIは2021年12月現在、日本のサーバー上でのサービス提供はされていません。近場だと台湾(asia-east1)が利用できます(利用できるリージョン一覧)

Discussion