@osaas/client-transcode 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +4 -1
- package/lib/index.js.map +1 -1
- package/lib/packager.d.ts +27 -0
- package/lib/packager.d.ts.map +1 -0
- package/lib/packager.js +51 -0
- package/lib/packager.js.map +1 -0
- package/lib/pool.d.ts +31 -4
- package/lib/pool.d.ts.map +1 -1
- package/lib/pool.js +38 -1
- package/lib/pool.js.map +1 -1
- package/lib/vmaf.d.ts +20 -0
- package/lib/vmaf.d.ts.map +1 -1
- package/lib/vmaf.js +20 -0
- package/lib/vmaf.js.map +1 -1
- package/package.json +4 -5
package/lib/index.d.ts
CHANGED
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.vmafCompare = exports.QueuePool = void 0;
|
|
3
|
+
exports.createStreamingPackage = exports.vmafCompare = exports.QueuePool = void 0;
|
|
4
|
+
/** @module @osaas/client-transcode */
|
|
4
5
|
var pool_1 = require("./pool");
|
|
5
6
|
Object.defineProperty(exports, "QueuePool", { enumerable: true, get: function () { return pool_1.QueuePool; } });
|
|
6
7
|
var vmaf_1 = require("./vmaf");
|
|
7
8
|
Object.defineProperty(exports, "vmafCompare", { enumerable: true, get: function () { return vmaf_1.vmafCompare; } });
|
|
9
|
+
var packager_1 = require("./packager");
|
|
10
|
+
Object.defineProperty(exports, "createStreamingPackage", { enumerable: true, get: function () { return packager_1.createStreamingPackage; } });
|
|
8
11
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+BAAmC;AAA1B,iGAAA,SAAS,OAAA;AAClB,+BAAqC;AAA5B,mGAAA,WAAW,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,+BAAmC;AAA1B,iGAAA,SAAS,OAAA;AAClB,+BAAqC;AAA5B,mGAAA,WAAW,OAAA;AACpB,uCAAoD;AAA3C,kHAAA,sBAAsB,OAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Context } from '@osaas/client-core';
|
|
3
|
+
/**
|
|
4
|
+
* Create a HLS and MPEG-DASH streaming package
|
|
5
|
+
*
|
|
6
|
+
* @async
|
|
7
|
+
* @memberof module:@osaas/client-transcode
|
|
8
|
+
* @param {Context} ctx - Open Source Cloud configuration context
|
|
9
|
+
* @param {URL} sourceBucket - URL to source bucket (supported protocols: s3)
|
|
10
|
+
* @param {string[]} videos - List of video files in source bucket
|
|
11
|
+
* @param {string} audio - Audio file in source bucket
|
|
12
|
+
* @param {URL} resultBucket - URL to bucket where streaming package will be stored (supported protocols: s3)
|
|
13
|
+
* @example
|
|
14
|
+
* import { Context } from '@osaas/client-core';
|
|
15
|
+
* import { createStreamingPackage } from '@osaas/client-transcode';
|
|
16
|
+
*
|
|
17
|
+
* const ctx = new Context();
|
|
18
|
+
* await createStreamingPackage(
|
|
19
|
+
* ctx,
|
|
20
|
+
* new URL('s3://video/abr'),
|
|
21
|
+
* ['video1080p.mp4', 'video720p.mp4', 'video360p.mp4'],
|
|
22
|
+
* 'audio.mp4',
|
|
23
|
+
* new URL('s3://video/streaming')
|
|
24
|
+
* );
|
|
25
|
+
*/
|
|
26
|
+
export declare function createStreamingPackage(ctx: Context, sourceBucket: URL, videos: string[], audio: string, resultBucket: URL): Promise<void>;
|
|
27
|
+
//# sourceMappingURL=packager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packager.d.ts","sourceRoot":"","sources":["../src/packager.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,OAAO,EAIR,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,OAAO,EACZ,YAAY,EAAE,GAAG,EACjB,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,GAAG,iBAoClB"}
|
package/lib/packager.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createStreamingPackage = void 0;
|
|
4
|
+
const client_core_1 = require("@osaas/client-core");
|
|
5
|
+
/**
|
|
6
|
+
* Create a HLS and MPEG-DASH streaming package
|
|
7
|
+
*
|
|
8
|
+
* @async
|
|
9
|
+
* @memberof module:@osaas/client-transcode
|
|
10
|
+
* @param {Context} ctx - Open Source Cloud configuration context
|
|
11
|
+
* @param {URL} sourceBucket - URL to source bucket (supported protocols: s3)
|
|
12
|
+
* @param {string[]} videos - List of video files in source bucket
|
|
13
|
+
* @param {string} audio - Audio file in source bucket
|
|
14
|
+
* @param {URL} resultBucket - URL to bucket where streaming package will be stored (supported protocols: s3)
|
|
15
|
+
* @example
|
|
16
|
+
* import { Context } from '@osaas/client-core';
|
|
17
|
+
* import { createStreamingPackage } from '@osaas/client-transcode';
|
|
18
|
+
*
|
|
19
|
+
* const ctx = new Context();
|
|
20
|
+
* await createStreamingPackage(
|
|
21
|
+
* ctx,
|
|
22
|
+
* new URL('s3://video/abr'),
|
|
23
|
+
* ['video1080p.mp4', 'video720p.mp4', 'video360p.mp4'],
|
|
24
|
+
* 'audio.mp4',
|
|
25
|
+
* new URL('s3://video/streaming')
|
|
26
|
+
* );
|
|
27
|
+
*/
|
|
28
|
+
async function createStreamingPackage(ctx, sourceBucket, videos, audio, resultBucket) {
|
|
29
|
+
const serviceAccessToken = await ctx.getServiceAccessToken('eyevinn-shaka-packager-s3');
|
|
30
|
+
if (!process.env.AWS_ACCESS_KEY_ID || !process.env.AWS_SECRET_ACCESS_KEY) {
|
|
31
|
+
throw new Error('AWS credentials not set');
|
|
32
|
+
}
|
|
33
|
+
const jobId = Math.random().toString(36).substring(7);
|
|
34
|
+
let idx = 1;
|
|
35
|
+
let inputArgs = `-i a:${idx}=${audio}`;
|
|
36
|
+
videos.forEach((video) => {
|
|
37
|
+
inputArgs += ` -i v:${idx++}=${video}`;
|
|
38
|
+
});
|
|
39
|
+
const cmdLineArgs = `${sourceBucket.toString()} ${resultBucket.toString()} ${inputArgs}`;
|
|
40
|
+
const job = await (0, client_core_1.createJob)(ctx, 'eyevinn-shaka-packager-s3', serviceAccessToken, {
|
|
41
|
+
name: jobId,
|
|
42
|
+
awsAccessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
43
|
+
awsSecretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
|
44
|
+
cmdLineArgs
|
|
45
|
+
});
|
|
46
|
+
(0, client_core_1.Log)().debug(`Creating streaming package for ${videos.length} video(s) and 1 audio file`);
|
|
47
|
+
await (0, client_core_1.waitForJobToComplete)(ctx, 'eyevinn-shaka-packager-s3', job.name, serviceAccessToken);
|
|
48
|
+
(0, client_core_1.Log)().debug(`Streaming package ${job.name} created`);
|
|
49
|
+
}
|
|
50
|
+
exports.createStreamingPackage = createStreamingPackage;
|
|
51
|
+
//# sourceMappingURL=packager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packager.js","sourceRoot":"","sources":["../src/packager.ts"],"names":[],"mappings":";;;AAAA,oDAK4B;AAE5B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACI,KAAK,UAAU,sBAAsB,CAC1C,GAAY,EACZ,YAAiB,EACjB,MAAgB,EAChB,KAAa,EACb,YAAiB;IAEjB,MAAM,kBAAkB,GAAG,MAAM,GAAG,CAAC,qBAAqB,CACxD,2BAA2B,CAC5B,CAAC;IACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE;QACxE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC5C;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACtD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,SAAS,GAAG,QAAQ,GAAG,IAAI,KAAK,EAAE,CAAC;IACvC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,SAAS,IAAI,SAAS,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,YAAY,CAAC,QAAQ,EAAE,IAAI,SAAS,EAAE,CAAC;IACzF,MAAM,GAAG,GAAG,MAAM,IAAA,uBAAS,EACzB,GAAG,EACH,2BAA2B,EAC3B,kBAAkB,EAClB;QACE,IAAI,EAAE,KAAK;QACX,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7C,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;QACrD,WAAW;KACZ,CACF,CAAC;IACF,IAAA,iBAAG,GAAE,CAAC,KAAK,CACT,kCAAkC,MAAM,CAAC,MAAM,4BAA4B,CAC5E,CAAC;IACF,MAAM,IAAA,kCAAoB,EACxB,GAAG,EACH,2BAA2B,EAC3B,GAAG,CAAC,IAAI,EACR,kBAAkB,CACnB,CAAC;IACF,IAAA,iBAAG,GAAE,CAAC,KAAK,CAAC,qBAAqB,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC;AACvD,CAAC;AAzCD,wDAyCC"}
|
package/lib/pool.d.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { Context } from '@osaas/client-core';
|
|
3
|
+
export type TranscodeOptions = {
|
|
4
|
+
profile?: string;
|
|
5
|
+
duration?: number;
|
|
6
|
+
packageDestination?: URL;
|
|
7
|
+
};
|
|
3
8
|
/**
|
|
4
9
|
* Represents a pool of Encore queues (instances) in Open Source Cloud
|
|
10
|
+
* @memberof module:@osaas/client-transcode
|
|
5
11
|
*/
|
|
6
12
|
export declare class QueuePool {
|
|
7
13
|
private context;
|
|
@@ -14,12 +20,20 @@ export declare class QueuePool {
|
|
|
14
20
|
* @property {Context} context - Open Source Cloud configuration context
|
|
15
21
|
* @property {number} size - Number of queues in the pool
|
|
16
22
|
*/
|
|
23
|
+
/**
|
|
24
|
+
* @typedef TranscodeOptions
|
|
25
|
+
* @type object
|
|
26
|
+
* @property {string?} profile - Transcoding profile to use (default: program)
|
|
27
|
+
* @property {number?} duration - Duration in seconds (default: entire file)
|
|
28
|
+
* @property {URL?} packageDestination - If provided create a streaming package and store here
|
|
29
|
+
*/
|
|
17
30
|
/**
|
|
18
31
|
* Creates a new Queue Pool
|
|
19
32
|
* @constructor
|
|
20
33
|
* @param {QueuePoolOptions} options - Queue Pool options
|
|
21
34
|
* @example
|
|
22
35
|
* import { Context } from '@osaas/client-core';
|
|
36
|
+
* import { QueuePool } from '@osaas/client-transcode';
|
|
23
37
|
* const ctx = new Context();
|
|
24
38
|
* // Create a new pool with 2 queues
|
|
25
39
|
* const pool = new QueuePool({ context: ctx, size: 2 });
|
|
@@ -43,9 +57,22 @@ export declare class QueuePool {
|
|
|
43
57
|
* await pool.destroy();
|
|
44
58
|
*/
|
|
45
59
|
destroy(): Promise<void>;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
60
|
+
/**
|
|
61
|
+
* Transcodes a media file into an ABR bundle that is transferred to a destination
|
|
62
|
+
* @async
|
|
63
|
+
* @param {URL} source - Source URL of the media file (supported protocols: http, https)
|
|
64
|
+
* @param {URL} destination - Destination URL of the transcoded media files (supported protocols: s3)
|
|
65
|
+
* @param {TranscodeOptions} options - Transcode options
|
|
66
|
+
* @example
|
|
67
|
+
* const source = new URL('https://example.com/video.mp4');
|
|
68
|
+
* const destination = new URL('s3://mybucket/video/');
|
|
69
|
+
*
|
|
70
|
+
* // Transcode the first 10 seconds of the video
|
|
71
|
+
* await pool.transcode(source, destination, { duration: 10 });
|
|
72
|
+
*
|
|
73
|
+
* // Transcode the entire video and create a streaming package
|
|
74
|
+
* await pool.transcode(source, destination, { packageDestination: new URL('s3://mybucket/streaming/') });
|
|
75
|
+
*/
|
|
76
|
+
transcode(source: URL, destination: URL, { profile, duration, packageDestination }: TranscodeOptions): Promise<void>;
|
|
50
77
|
}
|
|
51
78
|
//# sourceMappingURL=pool.d.ts.map
|
package/lib/pool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,OAAO,EAMR,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,OAAO,EAMR,MAAM,oBAAoB,CAAC;AAM5B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,GAAG,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,SAAS,CAAS;IAE1B;;;;;OAKG;IAEH;;;;;;OAMG;IAEH;;;;;;;;;;;OAWG;gBACS,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;IAMlE;;;;;OAKG;IACU,IAAI;IAmCjB;;;;;OAKG;IACU,OAAO;IASpB;;;;;;;;;;;;;;;OAeG;IACU,SAAS,CACpB,MAAM,EAAE,GAAG,EACX,WAAW,EAAE,GAAG,EAChB,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAAE,gBAAgB;CA2E9D"}
|
package/lib/pool.js
CHANGED
|
@@ -7,8 +7,10 @@ exports.QueuePool = void 0;
|
|
|
7
7
|
const client_core_1 = require("@osaas/client-core");
|
|
8
8
|
const util_1 = require("./util");
|
|
9
9
|
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const packager_1 = require("./packager");
|
|
10
11
|
/**
|
|
11
12
|
* Represents a pool of Encore queues (instances) in Open Source Cloud
|
|
13
|
+
* @memberof module:@osaas/client-transcode
|
|
12
14
|
*/
|
|
13
15
|
class QueuePool {
|
|
14
16
|
context;
|
|
@@ -21,12 +23,20 @@ class QueuePool {
|
|
|
21
23
|
* @property {Context} context - Open Source Cloud configuration context
|
|
22
24
|
* @property {number} size - Number of queues in the pool
|
|
23
25
|
*/
|
|
26
|
+
/**
|
|
27
|
+
* @typedef TranscodeOptions
|
|
28
|
+
* @type object
|
|
29
|
+
* @property {string?} profile - Transcoding profile to use (default: program)
|
|
30
|
+
* @property {number?} duration - Duration in seconds (default: entire file)
|
|
31
|
+
* @property {URL?} packageDestination - If provided create a streaming package and store here
|
|
32
|
+
*/
|
|
24
33
|
/**
|
|
25
34
|
* Creates a new Queue Pool
|
|
26
35
|
* @constructor
|
|
27
36
|
* @param {QueuePoolOptions} options - Queue Pool options
|
|
28
37
|
* @example
|
|
29
38
|
* import { Context } from '@osaas/client-core';
|
|
39
|
+
* import { QueuePool } from '@osaas/client-transcode';
|
|
30
40
|
* const ctx = new Context();
|
|
31
41
|
* // Create a new pool with 2 queues
|
|
32
42
|
* const pool = new QueuePool({ context: ctx, size: 2 });
|
|
@@ -81,7 +91,23 @@ class QueuePool {
|
|
|
81
91
|
await (0, client_core_1.removeInstance)(this.context, 'encore', instance, this.token);
|
|
82
92
|
}
|
|
83
93
|
}
|
|
84
|
-
|
|
94
|
+
/**
|
|
95
|
+
* Transcodes a media file into an ABR bundle that is transferred to a destination
|
|
96
|
+
* @async
|
|
97
|
+
* @param {URL} source - Source URL of the media file (supported protocols: http, https)
|
|
98
|
+
* @param {URL} destination - Destination URL of the transcoded media files (supported protocols: s3)
|
|
99
|
+
* @param {TranscodeOptions} options - Transcode options
|
|
100
|
+
* @example
|
|
101
|
+
* const source = new URL('https://example.com/video.mp4');
|
|
102
|
+
* const destination = new URL('s3://mybucket/video/');
|
|
103
|
+
*
|
|
104
|
+
* // Transcode the first 10 seconds of the video
|
|
105
|
+
* await pool.transcode(source, destination, { duration: 10 });
|
|
106
|
+
*
|
|
107
|
+
* // Transcode the entire video and create a streaming package
|
|
108
|
+
* await pool.transcode(source, destination, { packageDestination: new URL('s3://mybucket/streaming/') });
|
|
109
|
+
*/
|
|
110
|
+
async transcode(source, destination, { profile, duration, packageDestination }) {
|
|
85
111
|
if (!this.token) {
|
|
86
112
|
throw new Error('Pool not initialized');
|
|
87
113
|
}
|
|
@@ -117,6 +143,17 @@ class QueuePool {
|
|
|
117
143
|
const outputFiles = job.output.filter((file) => file.type === 'VideoFile' || file.type === 'AudioFile');
|
|
118
144
|
const transferPromises = outputFiles.map((file) => (0, util_1.transferFile)(this.context, node_path_1.default.basename(file.file), new URL(file.file, instance.url), destination, this.token || ''));
|
|
119
145
|
await Promise.all(transferPromises);
|
|
146
|
+
if (packageDestination) {
|
|
147
|
+
(0, client_core_1.Log)().debug(`Creating streaming package on ${packageDestination}`);
|
|
148
|
+
const videos = outputFiles
|
|
149
|
+
.filter((file) => file.type === 'VideoFile')
|
|
150
|
+
.map((file) => node_path_1.default.basename(file.file));
|
|
151
|
+
const audio = outputFiles.find((file) => file.type === 'AudioFile')?.file;
|
|
152
|
+
(0, client_core_1.Log)().debug(videos, audio);
|
|
153
|
+
if (videos && audio) {
|
|
154
|
+
await (0, packager_1.createStreamingPackage)(this.context, destination, videos, node_path_1.default.basename(audio), packageDestination);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
120
157
|
}
|
|
121
158
|
}
|
|
122
159
|
exports.QueuePool = QueuePool;
|
package/lib/pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":";;;;;;AAAA,oDAO4B;AAC5B,iCAAyE;AAEzE,0DAA6B;
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":";;;;;;AAAA,oDAO4B;AAC5B,iCAAyE;AAEzE,0DAA6B;AAC7B,yCAAoD;AAQpD;;;GAGG;AACH,MAAa,SAAS;IACZ,OAAO,CAAU;IACjB,KAAK,CAAU;IACf,SAAS,CAAW;IACpB,SAAS,CAAS;IAE1B;;;;;OAKG;IAEH;;;;;;OAMG;IAEH;;;;;;;;;;;OAWG;IACH,YAAY,EAAE,OAAO,EAAE,IAAI,EAAuC;QAChE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,IAAI;QACf,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAEhE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;SAC7C;QACD,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;YACvC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SAC5B;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,QAAQ,GAAG,MAAM,IAAA,yBAAW,EAChC,IAAI,CAAC,OAAO,EACZ,QAAQ,EACR,IAAI,EACJ,IAAI,CAAC,KAAK,CACX,CAAC;YACF,IAAI,CAAC,QAAQ,EAAE;gBACb,IAAA,iBAAG,GAAE,CAAC,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;gBAC9C,MAAM,QAAQ,GAAG,MAAM,IAAA,4BAAc,EACnC,IAAI,CAAC,OAAO,EACZ,QAAQ,EACR,IAAI,CAAC,KAAK,EACV;oBACE,IAAI;iBACL,CACF,CAAC;gBACF,MAAM,IAAA,YAAK,EAAC,IAAI,CAAC,CAAC;gBAClB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;aACpC;iBAAM;gBACL,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;aACpC;SACF;IACH,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,OAAO;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;SACzC;QACD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;YACrC,MAAM,IAAA,4BAAc,EAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SACpE;IACH,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACI,KAAK,CAAC,SAAS,CACpB,MAAW,EACX,WAAgB,EAChB,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAoB;QAE3D,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;SACzC;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;SACzC;QACD,MAAM,IAAI,GACR,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,MAAM,IAAA,yBAAW,EAChC,IAAI,CAAC,OAAO,EACZ,QAAQ,EACR,IAAI,EACJ,IAAI,CAAC,KAAK,CACX,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,MAAM,IAAA,yBAAW,EAAM,YAAY,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,OAAO,IAAI,SAAS;gBAC7B,YAAY,EAAE,gBAAgB,KAAK,EAAE;gBACrC,QAAQ,EAAE,KAAK;gBACf,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,YAAY;wBAClB,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE;qBACvB;iBACF;aACF,CAAC;YACF,OAAO,EAAE;gBACP,OAAO,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;gBAC/B,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,MAAM,IAAA,iCAA0B,EAC1C,IAAI,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,SAAS,CAAC,EAAE,CAAC,EACrD,IAAI,CAAC,KAAK,CACX,CAAC;QACF,IAAA,iBAAG,GAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,WAAW,GAAiB,GAAG,CAAC,MAAM,CAAC,MAAM,CACjD,CAAC,IAAgB,EAAE,EAAE,CACnB,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,CACzD,CAAC;QACF,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAChD,IAAA,mBAAY,EACV,IAAI,CAAC,OAAO,EACZ,mBAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EACxB,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,EAChC,WAAW,EACX,IAAI,CAAC,KAAK,IAAI,EAAE,CACjB,CACF,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACpC,IAAI,kBAAkB,EAAE;YACtB,IAAA,iBAAG,GAAE,CAAC,KAAK,CAAC,iCAAiC,kBAAkB,EAAE,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,WAAW;iBACvB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC;iBAC3C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,EAAE,IAAI,CAAC;YAC1E,IAAA,iBAAG,GAAE,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC3B,IAAI,MAAM,IAAI,KAAK,EAAE;gBACnB,MAAM,IAAA,iCAAsB,EAC1B,IAAI,CAAC,OAAO,EACZ,WAAW,EACX,MAAM,EACN,mBAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EACpB,kBAAkB,CACnB,CAAC;aACH;SACF;IACH,CAAC;CACF;AA7LD,8BA6LC"}
|
package/lib/vmaf.d.ts
CHANGED
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { Context } from '@osaas/client-core';
|
|
3
|
+
/**
|
|
4
|
+
* Compare two video files using VMAF
|
|
5
|
+
*
|
|
6
|
+
* @async
|
|
7
|
+
* @memberof module:@osaas/client-transcode
|
|
8
|
+
* @param {Context} ctx - Open Source Cloud configuration context
|
|
9
|
+
* @param {URL} reference - URL to reference video file (supported protocols: s3)
|
|
10
|
+
* @param {URL} distorted - URL to distorted video file (supported protocols: s3)
|
|
11
|
+
* @param {URL} resultBucket - URL to S3 bucket where result file will be stored
|
|
12
|
+
* @returns S3 URL to result file
|
|
13
|
+
* @example
|
|
14
|
+
* import { Context } from '@osaas/client-core';
|
|
15
|
+
* import { vmafCompare } from '@osaas/client-transcode';
|
|
16
|
+
*
|
|
17
|
+
* const ctx = new Context();
|
|
18
|
+
* const reference = new URL('s3://video/reference.mp4');
|
|
19
|
+
* const distorted = new URL('s3://video/distorted.mp4');
|
|
20
|
+
* const resultBucket = new URL('s3://video/results');
|
|
21
|
+
* const resultFile = await vmafCompare(ctx, reference, distorted, resultBucket);
|
|
22
|
+
*/
|
|
3
23
|
export declare function vmafCompare(ctx: Context, reference: URL, distorted: URL, resultBucket: URL): Promise<URL>;
|
|
4
24
|
//# sourceMappingURL=vmaf.d.ts.map
|
package/lib/vmaf.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vmaf.d.ts","sourceRoot":"","sources":["../src/vmaf.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,OAAO,EAIR,MAAM,oBAAoB,CAAC;AAG5B,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,GAAG,EACd,YAAY,EAAE,GAAG,GAChB,OAAO,CAAC,GAAG,CAAC,CA6Bd"}
|
|
1
|
+
{"version":3,"file":"vmaf.d.ts","sourceRoot":"","sources":["../src/vmaf.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,OAAO,EAIR,MAAM,oBAAoB,CAAC;AAG5B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,GAAG,EACd,YAAY,EAAE,GAAG,GAChB,OAAO,CAAC,GAAG,CAAC,CA6Bd"}
|
package/lib/vmaf.js
CHANGED
|
@@ -6,6 +6,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.vmafCompare = void 0;
|
|
7
7
|
const client_core_1 = require("@osaas/client-core");
|
|
8
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
/**
|
|
10
|
+
* Compare two video files using VMAF
|
|
11
|
+
*
|
|
12
|
+
* @async
|
|
13
|
+
* @memberof module:@osaas/client-transcode
|
|
14
|
+
* @param {Context} ctx - Open Source Cloud configuration context
|
|
15
|
+
* @param {URL} reference - URL to reference video file (supported protocols: s3)
|
|
16
|
+
* @param {URL} distorted - URL to distorted video file (supported protocols: s3)
|
|
17
|
+
* @param {URL} resultBucket - URL to S3 bucket where result file will be stored
|
|
18
|
+
* @returns S3 URL to result file
|
|
19
|
+
* @example
|
|
20
|
+
* import { Context } from '@osaas/client-core';
|
|
21
|
+
* import { vmafCompare } from '@osaas/client-transcode';
|
|
22
|
+
*
|
|
23
|
+
* const ctx = new Context();
|
|
24
|
+
* const reference = new URL('s3://video/reference.mp4');
|
|
25
|
+
* const distorted = new URL('s3://video/distorted.mp4');
|
|
26
|
+
* const resultBucket = new URL('s3://video/results');
|
|
27
|
+
* const resultFile = await vmafCompare(ctx, reference, distorted, resultBucket);
|
|
28
|
+
*/
|
|
9
29
|
async function vmafCompare(ctx, reference, distorted, resultBucket) {
|
|
10
30
|
const serviceAccessToken = await ctx.getServiceAccessToken('eyevinn-easyvmaf-s3');
|
|
11
31
|
const jobId = Math.random().toString(36).substring(7);
|
package/lib/vmaf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vmaf.js","sourceRoot":"","sources":["../src/vmaf.ts"],"names":[],"mappings":";;;;;;AAAA,oDAK4B;AAC5B,0DAA6B;
|
|
1
|
+
{"version":3,"file":"vmaf.js","sourceRoot":"","sources":["../src/vmaf.ts"],"names":[],"mappings":";;;;;;AAAA,oDAK4B;AAC5B,0DAA6B;AAE7B;;;;;;;;;;;;;;;;;;;GAmBG;AACI,KAAK,UAAU,WAAW,CAC/B,GAAY,EACZ,SAAc,EACd,SAAc,EACd,YAAiB;IAEjB,MAAM,kBAAkB,GAAG,MAAM,GAAG,CAAC,qBAAqB,CACxD,qBAAqB,CACtB,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,GAAG,YAAY;SAC/B,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,mBAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC;IAE3E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE;QACxE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC5C;IACD,MAAM,GAAG,GAAG,MAAM,IAAA,uBAAS,EAAC,GAAG,EAAE,qBAAqB,EAAE,kBAAkB,EAAE;QAC1E,IAAI,EAAE,KAAK;QACX,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7C,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;QACrD,WAAW,EAAE,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,SAAS,CAAC,QAAQ,EAAE,OAAO,UAAU,EAAE;KACtF,CAAC,CAAC;IACH,IAAA,iBAAG,GAAE,CAAC,KAAK,CACT,kBAAkB,SAAS,CAAC,QAAQ,EAAE,SAAS,SAAS,CAAC,QAAQ,EAAE,EAAE,CACtE,CAAC;IACF,MAAM,IAAA,kCAAoB,EACxB,GAAG,EACH,qBAAqB,EACrB,GAAG,CAAC,IAAI,EACR,kBAAkB,CACnB,CAAC;IACF,IAAA,iBAAG,GAAE,CAAC,KAAK,CAAC,mBAAmB,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC;IACrD,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;AAC7B,CAAC;AAlCD,kCAkCC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@osaas/client-transcode",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Open Source Cloud Client SDK transcode library",
|
|
5
5
|
"author": "Eyevinn Technology <work@eyevinn.se>",
|
|
6
6
|
"homepage": "https://www.osaas.io",
|
|
@@ -22,15 +22,14 @@
|
|
|
22
22
|
"lint": "eslint .",
|
|
23
23
|
"pretty": "prettier --check --ignore-unknown .",
|
|
24
24
|
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
25
|
-
"test": "jest --passWithNoTests"
|
|
26
|
-
"build:doc": "npm run build && jsdoc -r -R ./README.md -d docs lib/"
|
|
25
|
+
"test": "jest --passWithNoTests"
|
|
27
26
|
},
|
|
28
27
|
"dependencies": {
|
|
29
|
-
"@osaas/client-core": "^0.
|
|
28
|
+
"@osaas/client-core": "^0.6.0",
|
|
30
29
|
"chalk": "4.1.2"
|
|
31
30
|
},
|
|
32
31
|
"publishConfig": {
|
|
33
32
|
"access": "public"
|
|
34
33
|
},
|
|
35
|
-
"gitHead": "
|
|
34
|
+
"gitHead": "0d54f545a51a26df68290fc3a3bcfce2ce2851aa"
|
|
36
35
|
}
|