In video production, you can embed clips with key information at the beginning and end of a main video. These are known as opening and ending clips and are often added in a Picture-in-Picture (PiP) format. This topic provides sample code that shows how to add opening and ending clips using the ApsaraVideo Media Processing (MPS) SDK for Node.js.
Sample code
import Console from '@alicloud/tea-console';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Env from '@alicloud/darabonba-env';
import Util from '@alicloud/tea-util';
import mts20140618, * as $mts20140618 from '@alicloud/mts20140618';
import * as $tea from '@alicloud/tea-typescript';
/**
* Install Node.js 8.x or later.
* Install Alibaba Cloud SDK for Node.js. npm install @alicloud/pop-core --save
* Install the Alibaba Cloud SDK Credentials package. npm install @alicloud/credentials
* Install MPS SDK for Node.js. npm install --save @alicloud/mts20140618
*
*/
/** The ID of the MPS queue. You can log on to the MPS console to view the ID. */
var pipelineId = "d7cedd984be7dd63395c*****";
/** The ID of the transcoding template. Select a transcoding template as needed. */
var templateId = "S00000001-100020";
var ossLocation = "oss-cn-shanghai";
var bucket = "<bucket name>";
var ossInputObject = "input.mp4";
var ossOutputObject = "merged.mp4";
var headObject = "head.mp4";
var tailObject = "tail.mp4";
export default class Client {
/** Initialize the SDK client. */
static async createClient(accessKeyId: string, accessKeySecret: string, regionId: string): Promise<mts20140618> {
let config = new $OpenApi.Config({ });
config.accessKeyId = accessKeyId;
config.accessKeySecret = accessKeySecret;
/** The ID of the region in which your MPS service is deployed. */
config.regionId = "cn-shanghai";
return new mts20140618(config);
}
static async main(args: string[]): Promise<void> {
let client = await Client.createClient(Env.getEnv("ALIBABA_CLOUD_ACCESS_KEY_ID"), Env.getEnv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), args[0]);
let request = new $mts20140618.SubmitJobsRequest({
input: inputParam(),
outputs: outputParam(),
outputBucket: bucket,
pipelineId: pipelineId,
outputLocation: ossLocation
});
let response = await client.submitJobs(request);
Console.log(Util.toJSONString($tea.toMap(response)));
}
}
Client.main(process.argv.slice(2));
function inputParam() {
var input:any = {};
input.Location = ossLocation;
input.Bucket = bucket;
input.Object = encodeURIComponent(ossInputObject);
return JSON.stringify(input);
}
function outputParam() {
var outputOSSObject = encodeURIComponent(ossOutputObject);
var output:any = {};
output.OutputObject = outputOSSObject;
output.TemplateId = templateId;
/** The video-related parameters. */
var video:any = {};
video.Width = "1280";
video.Height = "720";
output.Video = JSON.stringify(video);
/** Set the opening part. */
var openingVideo:any = {};
var openingVideoURL = "http://example-bucket.oss-cn-shanghai.aliyuncs.com/" + encodeURIComponent(headObject)
openingVideo.OpenUrl = openingVideoURL;
openingVideo.Width = "640";
openingVideo.Start = "2";
var openingVideoList = new Array();
openingVideoList.push(openingVideo);
output.OpeningList = JSON.stringify(openingVideoList);
/** Set the ending part. */
var tailSlateVideo:any = {};
var tailSlateVideoURL = "http://example-bucket.oss-cn-shanghai.aliyuncs.com/" + encodeURIComponent(tailObject)
tailSlateVideo.TailUrl = tailSlateVideoURL;
tailSlateVideo.Width = "640";
tailSlateVideo.BlendDuration = "3";
tailSlateVideo.BgColor = "Black";
var tailSlateVideoList = new Array();
tailSlateVideoList.push(tailSlateVideo);
output.TailSlateList = JSON.stringify(tailSlateVideoList);
var outputs = new Array();
outputs.push(output);
return JSON.stringify(outputs);
}该文章对您有帮助吗?