🌟
Firebaseから動画のトランスコードをする - Google Transcoder API
アップロードされた動画をトランスコード(エンコード)する方法として、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