async function main()

in video-intelligence/analyze-streaming-shot-change.js [17:76]


async function main(path = 'YOUR_LOCAL_FILE') {
  // [START video_streaming_shot_change_detection_beta]
  /**
   * TODO(developer): Uncomment these variables before running the sample.
   */
  // const path = 'Local file to analyze, e.g. ./my-file.mp4';
  const {StreamingVideoIntelligenceServiceClient} =
    require('@google-cloud/video-intelligence').v1p3beta1;
  const fs = require('fs');

  // Instantiates a client
  const client = new StreamingVideoIntelligenceServiceClient();
  // Streaming configuration
  const configRequest = {
    videoConfig: {
      feature: 'STREAMING_SHOT_CHANGE_DETECTION',
    },
  };
  const readStream = fs.createReadStream(path, {
    highWaterMark: 5 * 1024 * 1024, //chunk size set to 5MB (recommended less than 10MB)
    encoding: 'base64',
  });
  //Load file content
  const chunks = [];
  readStream
    .on('data', chunk => {
      const request = {
        inputContent: chunk.toString(),
      };
      chunks.push(request);
    })
    .on('close', () => {
      // configRequest should be the first in the stream of requests
      stream.write(configRequest);
      for (let i = 0; i < chunks.length; i++) {
        stream.write(chunks[i]);
      }
      stream.end();
    });

  const stream = client.streamingAnnotateVideo().on('data', response => {
    //Gets annotations for video
    const annotations = response.annotationResults;
    const shotChanges = annotations.shotAnnotations;
    console.log(JSON.stringify(shotChanges));
    if (shotChanges.length === 1) {
      console.log('The entire video is one shot.');
    }
    shotChanges.forEach(shot => {
      console.log(
        ` Shot: ${shot.startTimeOffset.seconds || 0}` +
          `.${(shot.startTimeOffset.nanos / 1e6).toFixed(0)}s to ${
            shot.endTimeOffset.seconds || 0
          }` +
          `.${(shot.endTimeOffset.nanos / 1e6).toFixed(0)}s`
      );
    });
  });
  // [END video_streaming_shot_change_detection_beta]
}