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]
}