@lumen5/framefusion 0.0.3
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/LICENSE +674 -0
- package/README.md +79 -0
- package/dist/framefusion.cjs +2 -0
- package/dist/framefusion.cjs.map +1 -0
- package/dist/framefusion.d.ts +27 -0
- package/dist/framefusion.es.js +512 -0
- package/dist/framefusion.es.js.map +1 -0
- package/dist/framefusion.js +32 -0
- package/dist/framefusion.js.map +1 -0
- package/dist/src/BaseExtractor.d.ts +24 -0
- package/dist/src/BaseExtractor.js +45 -0
- package/dist/src/BaseExtractor.js.map +1 -0
- package/dist/src/DownloadVideoURL.d.ts +17 -0
- package/dist/src/DownloadVideoURL.js +77 -0
- package/dist/src/DownloadVideoURL.js.map +1 -0
- package/dist/src/backends/beamcoder.d.ts +184 -0
- package/dist/src/backends/beamcoder.js +626 -0
- package/dist/src/backends/beamcoder.js.map +1 -0
- package/dist/test/downloadurl.test.d.ts +1 -0
- package/dist/test/downloadurl.test.js +20 -0
- package/dist/test/downloadurl.test.js.map +1 -0
- package/dist/test/framefusion.test.d.ts +8 -0
- package/dist/test/framefusion.test.js +362 -0
- package/dist/test/framefusion.test.js.map +1 -0
- package/dist/vite.config.d.ts +2 -0
- package/dist/vite.config.js +35 -0
- package/dist/vite.config.js.map +1 -0
- package/dist/vitest.config.d.ts +2 -0
- package/dist/vitest.config.js +9 -0
- package/dist/vitest.config.js.map +1 -0
- package/dist/vitest.global.d.ts +1 -0
- package/dist/vitest.global.js +5 -0
- package/dist/vitest.global.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloadurl.test.js","sourceRoot":"","sources":["../../test/downloadurl.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EAAE,MAAM,EAChB,EAAE,EACL,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAG,EAAE;QAC7B,MAAM,GAAG,GAAG,iEAAiE,CAAC;QAC9E,MAAM,WAAW,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC;QAE7B,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAG,EAAE;QACtC,MAAM,GAAG,GAAG,iEAAiE,CAAC;QAC9E,MAAM,WAAW,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;QAEtC,WAAW,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IACjD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
import { readFileSync, readdirSync } from 'fs';
|
|
2
|
+
import { performance } from 'perf_hooks';
|
|
3
|
+
import httpServer from 'http-server';
|
|
4
|
+
import { rimraf } from 'rimraf';
|
|
5
|
+
import { describe, it, expect, beforeAll, beforeEach, afterAll } from 'vitest';
|
|
6
|
+
import sinon from 'sinon';
|
|
7
|
+
import { toMatchImageSnapshot } from 'jest-image-snapshot';
|
|
8
|
+
import { fileExistsSync } from 'tsconfig-paths/lib/filesystem';
|
|
9
|
+
import { BeamcoderExtractor } from '../framefusion';
|
|
10
|
+
const TEST_SERVER_PORT = 4242;
|
|
11
|
+
expect.extend({ toMatchImageSnapshot });
|
|
12
|
+
const TEST_VIDEO = './test/samples/bbb10m.mp4';
|
|
13
|
+
const TEST_VIDEO_SMALLER = './test/samples/bbb-smaller.mp4';
|
|
14
|
+
const TEST_VIDEO_LOW_FRAMERATE = './test/samples/bbb-low-fps.mp4';
|
|
15
|
+
// TODOS
|
|
16
|
+
// There are a few sleeps (timeouts) to probably remove
|
|
17
|
+
describe('framefusion', () => {
|
|
18
|
+
let server;
|
|
19
|
+
beforeEach(async () => {
|
|
20
|
+
await rimraf('./output/*', { glob: true });
|
|
21
|
+
console.log('Removed previous results in output/');
|
|
22
|
+
});
|
|
23
|
+
beforeAll(async () => {
|
|
24
|
+
await rimraf('./output/*', { glob: true });
|
|
25
|
+
console.log('Removed previous results in output/');
|
|
26
|
+
server = httpServer.createServer();
|
|
27
|
+
await new Promise(resolve => {
|
|
28
|
+
server.listen({
|
|
29
|
+
port: TEST_SERVER_PORT,
|
|
30
|
+
}, () => {
|
|
31
|
+
console.log(`Server running on port ${TEST_SERVER_PORT}`);
|
|
32
|
+
resolve();
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
afterAll(() => {
|
|
37
|
+
server.close();
|
|
38
|
+
});
|
|
39
|
+
it('Should get duration', async () => {
|
|
40
|
+
// Arrange
|
|
41
|
+
const extractor = await BeamcoderExtractor.create({
|
|
42
|
+
inputFileOrUrl: TEST_VIDEO,
|
|
43
|
+
outputFile: './output/frame-%04d.png',
|
|
44
|
+
});
|
|
45
|
+
// Act
|
|
46
|
+
const duration = extractor.duration;
|
|
47
|
+
// Assert
|
|
48
|
+
expect(duration).to.eq(10);
|
|
49
|
+
// Cleanup
|
|
50
|
+
extractor.dispose();
|
|
51
|
+
});
|
|
52
|
+
it('should get width', async () => {
|
|
53
|
+
// Arrange
|
|
54
|
+
const extractor = await BeamcoderExtractor.create({
|
|
55
|
+
inputFileOrUrl: TEST_VIDEO,
|
|
56
|
+
outputFile: './output/frame-%04d.png',
|
|
57
|
+
});
|
|
58
|
+
// Act
|
|
59
|
+
const width = extractor.width;
|
|
60
|
+
// Assert
|
|
61
|
+
expect(width).to.eq(1920);
|
|
62
|
+
// Cleanup
|
|
63
|
+
extractor.dispose();
|
|
64
|
+
});
|
|
65
|
+
it('Should get height', async () => {
|
|
66
|
+
// Arrange
|
|
67
|
+
const extractor = await BeamcoderExtractor.create({
|
|
68
|
+
inputFileOrUrl: TEST_VIDEO,
|
|
69
|
+
outputFile: './output/frame-%04d.png',
|
|
70
|
+
});
|
|
71
|
+
// Act
|
|
72
|
+
const height = extractor.height;
|
|
73
|
+
// Assert
|
|
74
|
+
expect(height).to.eq(1080);
|
|
75
|
+
// Cleanup
|
|
76
|
+
extractor.dispose();
|
|
77
|
+
});
|
|
78
|
+
describe('Continuous dumping', () => {
|
|
79
|
+
it('Should dump an entire mp4 [smaller video version]', async () => {
|
|
80
|
+
// Arrange
|
|
81
|
+
const extractor = await BeamcoderExtractor.create({
|
|
82
|
+
inputFileOrUrl: TEST_VIDEO_SMALLER,
|
|
83
|
+
outputFile: './output/frame-%04d.png',
|
|
84
|
+
threadCount: 8,
|
|
85
|
+
});
|
|
86
|
+
// Act
|
|
87
|
+
const p1 = performance.now();
|
|
88
|
+
await extractor.readFrames();
|
|
89
|
+
const p2 = performance.now();
|
|
90
|
+
console.log('Time to dump all frames (ms): ', p2 - p1);
|
|
91
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
92
|
+
expect(fileExistsSync('./output/frame-0001.png')).to.be.true;
|
|
93
|
+
expect(fileExistsSync('./output/frame-0600.png')).to.be.true;
|
|
94
|
+
// Cleanup
|
|
95
|
+
extractor.dispose();
|
|
96
|
+
}, 50000);
|
|
97
|
+
it('Should read a mp4 - without dumping frames', async () => {
|
|
98
|
+
// Arrange
|
|
99
|
+
const extractor = await BeamcoderExtractor.create({
|
|
100
|
+
inputFileOrUrl: TEST_VIDEO_SMALLER,
|
|
101
|
+
threadCount: 8,
|
|
102
|
+
});
|
|
103
|
+
// Act
|
|
104
|
+
const onFrameAvailable = sinon.spy(() => {
|
|
105
|
+
return true;
|
|
106
|
+
});
|
|
107
|
+
const p1 = performance.now();
|
|
108
|
+
await extractor.readFrames({ onFrameAvailable });
|
|
109
|
+
const p2 = performance.now();
|
|
110
|
+
console.log('Time to dump all frames (ms): ', p2 - p1);
|
|
111
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
112
|
+
expect(onFrameAvailable.callCount).to.equal(600);
|
|
113
|
+
// We should only have the .gitkeep
|
|
114
|
+
expect(readdirSync('./output/')).to.have.lengthOf(1);
|
|
115
|
+
// Cleanup
|
|
116
|
+
extractor.dispose();
|
|
117
|
+
}, 50000);
|
|
118
|
+
it.concurrent('Should read a mp4 with specified pixel format', async () => {
|
|
119
|
+
// Arrange
|
|
120
|
+
const extractor = await BeamcoderExtractor.create({
|
|
121
|
+
inputFileOrUrl: TEST_VIDEO_SMALLER,
|
|
122
|
+
threadCount: 8,
|
|
123
|
+
outputPixelFormat: 'argb',
|
|
124
|
+
});
|
|
125
|
+
// Act
|
|
126
|
+
const frame = await extractor.getFrameAtTime(1);
|
|
127
|
+
// Assert
|
|
128
|
+
expect(frame.format).to.equal('argb');
|
|
129
|
+
// Cleanup
|
|
130
|
+
extractor.dispose();
|
|
131
|
+
}, 50000);
|
|
132
|
+
it('Should seek and dump frames', async () => {
|
|
133
|
+
// Arrange
|
|
134
|
+
const extractor = await BeamcoderExtractor.create({
|
|
135
|
+
inputFileOrUrl: TEST_VIDEO_SMALLER,
|
|
136
|
+
outputFile: './output/frame-%04d.png',
|
|
137
|
+
threadCount: 8,
|
|
138
|
+
});
|
|
139
|
+
// Act
|
|
140
|
+
const p1 = performance.now();
|
|
141
|
+
await extractor.seekToPTS(150016);
|
|
142
|
+
await extractor.readFrames();
|
|
143
|
+
const p2 = performance.now();
|
|
144
|
+
console.log('Time to dump all frames (ms): ', p2 - p1);
|
|
145
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
146
|
+
// Assert
|
|
147
|
+
expect(fileExistsSync('./output/frame-0001.png')).to.be.true;
|
|
148
|
+
expect(fileExistsSync('./output/frame-0014.png')).to.be.true;
|
|
149
|
+
// There are only 13 frames after 150016, so this one should not exist
|
|
150
|
+
expect(fileExistsSync('./output/frame-0015.png')).to.be.false;
|
|
151
|
+
// Cleanup
|
|
152
|
+
extractor.dispose();
|
|
153
|
+
}, 50000);
|
|
154
|
+
it('Should seek and dump frames precisely', async () => {
|
|
155
|
+
// Arrange
|
|
156
|
+
const extractor = await BeamcoderExtractor.create({
|
|
157
|
+
inputFileOrUrl: './test/samples/countTo60.mp4',
|
|
158
|
+
outputFile: './output/frame-%04d.png',
|
|
159
|
+
threadCount: 8,
|
|
160
|
+
});
|
|
161
|
+
// Act
|
|
162
|
+
const p1 = performance.now();
|
|
163
|
+
await extractor.seekToPTS(29696);
|
|
164
|
+
await extractor.readFrames();
|
|
165
|
+
const p2 = performance.now();
|
|
166
|
+
console.log('Time to dump all frames (ms): ', p2 - p1);
|
|
167
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
168
|
+
// Assert
|
|
169
|
+
// There should be only 2 frames
|
|
170
|
+
expect(fileExistsSync('./output/frame-0001.png')).to.be.true;
|
|
171
|
+
expect(fileExistsSync('./output/frame-0002.png')).to.be.true;
|
|
172
|
+
expect(fileExistsSync('./output/frame-0003.png')).to.be.false;
|
|
173
|
+
expect(readFileSync('./output/frame-0001.png')).toMatchImageSnapshot();
|
|
174
|
+
expect(readFileSync('./output/frame-0002.png')).toMatchImageSnapshot();
|
|
175
|
+
// Cleanup
|
|
176
|
+
extractor.dispose();
|
|
177
|
+
}, 50000);
|
|
178
|
+
it('Should dump frames and pause in-between', async () => {
|
|
179
|
+
// Arrange
|
|
180
|
+
const extractor = await BeamcoderExtractor.create({
|
|
181
|
+
inputFileOrUrl: './test/samples/countTo60.mp4',
|
|
182
|
+
outputFile: './output/frame-%04d.png',
|
|
183
|
+
threadCount: 8,
|
|
184
|
+
});
|
|
185
|
+
// Act
|
|
186
|
+
// Array generated with
|
|
187
|
+
// ffprobe -show_frames samples/bbb-smaller.mp4 | grep pts_time | head -n 5 | sed 's/pts_time=//g'
|
|
188
|
+
await extractor.seekToTime(0);
|
|
189
|
+
const count = 0;
|
|
190
|
+
const onFrameAvailable = async (frame) => {
|
|
191
|
+
return count < 4;
|
|
192
|
+
};
|
|
193
|
+
await extractor.readFrames({
|
|
194
|
+
onFrameAvailable,
|
|
195
|
+
});
|
|
196
|
+
// Assert
|
|
197
|
+
expect(readFileSync('./output/frame-0001.png')).toMatchImageSnapshot();
|
|
198
|
+
expect(readFileSync('./output/frame-0002.png')).toMatchImageSnapshot();
|
|
199
|
+
expect(readFileSync('./output/frame-0003.png')).toMatchImageSnapshot();
|
|
200
|
+
expect(readFileSync('./output/frame-0004.png')).toMatchImageSnapshot();
|
|
201
|
+
// Cleanup
|
|
202
|
+
extractor.dispose();
|
|
203
|
+
}, 50000);
|
|
204
|
+
});
|
|
205
|
+
describe('Dump frame at time', () => {
|
|
206
|
+
it.concurrent('Should seek and dump all frames in the video', async () => {
|
|
207
|
+
// Arrange
|
|
208
|
+
const extractor = await BeamcoderExtractor.create({
|
|
209
|
+
inputFileOrUrl: './test/samples/countTo60.mp4',
|
|
210
|
+
threadCount: 8,
|
|
211
|
+
});
|
|
212
|
+
// Sample at the middle of each frame
|
|
213
|
+
const FRAME_SYNC_DELTA = (1 / 30.0) / 2.0;
|
|
214
|
+
// Act & assert
|
|
215
|
+
for (let i = 0; i < 60; i++) {
|
|
216
|
+
const frame = await extractor.getFrameAtTime(i / 30.0 + FRAME_SYNC_DELTA);
|
|
217
|
+
expect(Math.floor(extractor.ptsToTime(frame.pts) * 30)).to.equal(i);
|
|
218
|
+
}
|
|
219
|
+
// Cleanup
|
|
220
|
+
extractor.dispose();
|
|
221
|
+
}, 2000);
|
|
222
|
+
it.concurrent('Should seek and dump all frames in the video [other video]', async () => {
|
|
223
|
+
// Arrange
|
|
224
|
+
const extractor = await BeamcoderExtractor.create({
|
|
225
|
+
inputFileOrUrl: TEST_VIDEO_LOW_FRAMERATE,
|
|
226
|
+
threadCount: 8,
|
|
227
|
+
});
|
|
228
|
+
// Sample at the middle of each frame
|
|
229
|
+
const FRAME_SYNC_DELTA = (1 / 30.0) / 2.0;
|
|
230
|
+
// Act & assert
|
|
231
|
+
for (let i = 0; i < extractor.duration * 30.0; i++) {
|
|
232
|
+
const frame = await extractor.getFrameAtTime(i / 30.0 + FRAME_SYNC_DELTA);
|
|
233
|
+
expect(Math.floor(extractor.ptsToTime(frame.pts) * 30)).to.be.closeTo(i, 15);
|
|
234
|
+
}
|
|
235
|
+
// Cleanup
|
|
236
|
+
extractor.dispose();
|
|
237
|
+
}, 10000);
|
|
238
|
+
it.concurrent('Should seek and dump frames at different points in the video', async () => {
|
|
239
|
+
// Arrange
|
|
240
|
+
const extractor = await BeamcoderExtractor.create({
|
|
241
|
+
inputFileOrUrl: './test/samples/countTo60.mp4',
|
|
242
|
+
threadCount: 8,
|
|
243
|
+
});
|
|
244
|
+
// Sample at the middle of each frame
|
|
245
|
+
const FRAME_SYNC_DELTA = (1 / 30.0) / 2.0;
|
|
246
|
+
// Act & assert
|
|
247
|
+
// This should be the frame displaying number 10
|
|
248
|
+
const f1 = await extractor.getFrameAtTime(0.300000 + FRAME_SYNC_DELTA);
|
|
249
|
+
expect(f1.pts).to.eq(4608);
|
|
250
|
+
// This should be the frame displaying number 11
|
|
251
|
+
const f2 = await extractor.getFrameAtTime(0.333333 + FRAME_SYNC_DELTA);
|
|
252
|
+
expect(f2.pts).to.eq(5120);
|
|
253
|
+
// Now skip a few more frames:
|
|
254
|
+
// This should be the frame displaying number 13
|
|
255
|
+
const f3 = await extractor.getFrameAtTime(0.400000 + FRAME_SYNC_DELTA);
|
|
256
|
+
expect(f3.pts).to.eq(6144);
|
|
257
|
+
// Now skip pretty far:
|
|
258
|
+
// This should be the frame displaying number 59
|
|
259
|
+
const f4 = await extractor.getFrameAtTime(1.933333 + FRAME_SYNC_DELTA);
|
|
260
|
+
expect(f4.pts).to.eq(29696);
|
|
261
|
+
// This should be the frame displaying number 60
|
|
262
|
+
const f5 = await extractor.getFrameAtTime(1.966667 + FRAME_SYNC_DELTA);
|
|
263
|
+
expect(f5.pts).to.eq(30208);
|
|
264
|
+
// Cleanup
|
|
265
|
+
extractor.dispose();
|
|
266
|
+
}, 50000);
|
|
267
|
+
it.concurrent('Should seek and dump frames in a video [big video]', async () => {
|
|
268
|
+
// Arrange
|
|
269
|
+
const extractor = await BeamcoderExtractor.create({
|
|
270
|
+
inputFileOrUrl: TEST_VIDEO,
|
|
271
|
+
threadCount: 8,
|
|
272
|
+
});
|
|
273
|
+
// Sample at the middle of each frame
|
|
274
|
+
const FRAME_SYNC_DELTA = (1 / 60.0) / 2.0;
|
|
275
|
+
// Act & assert
|
|
276
|
+
const p1 = performance.now();
|
|
277
|
+
for (let i = 0; i < 3; i++) {
|
|
278
|
+
const frame = await extractor.getFrameAtTime(i / 60.0 + FRAME_SYNC_DELTA);
|
|
279
|
+
expect(Math.round(extractor.ptsToTime(frame.pts) * 60)).to.equal(i);
|
|
280
|
+
}
|
|
281
|
+
const p2 = performance.now();
|
|
282
|
+
console.log('Time to interpolate all frames (fast) and dump all frames (ms): ', p2 - p1);
|
|
283
|
+
// Cleanup
|
|
284
|
+
extractor.dispose();
|
|
285
|
+
}, 30000);
|
|
286
|
+
});
|
|
287
|
+
it('Should interpolate frames (fast)', async () => {
|
|
288
|
+
// Arrange
|
|
289
|
+
const extractor = await BeamcoderExtractor.create({
|
|
290
|
+
inputFileOrUrl: TEST_VIDEO_LOW_FRAMERATE,
|
|
291
|
+
outputFile: './output/frame-%04d.png',
|
|
292
|
+
threadCount: 8,
|
|
293
|
+
interpolateFps: 25,
|
|
294
|
+
interpolateMode: 'fast',
|
|
295
|
+
});
|
|
296
|
+
// Act
|
|
297
|
+
const p1 = performance.now();
|
|
298
|
+
let count = 0;
|
|
299
|
+
await extractor.readFrames({
|
|
300
|
+
async onFrameAvailable() {
|
|
301
|
+
count++;
|
|
302
|
+
return true;
|
|
303
|
+
},
|
|
304
|
+
});
|
|
305
|
+
const p2 = performance.now();
|
|
306
|
+
console.log('Time to interpolate all frames (fast) and dump all frames (ms): ', p2 - p1);
|
|
307
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
308
|
+
expect(count).to.be.greaterThan(240);
|
|
309
|
+
expect(fileExistsSync('./output/frame-0001.png')).to.be.true;
|
|
310
|
+
expect(fileExistsSync('./output/frame-0241.png')).to.be.true;
|
|
311
|
+
// Cleanup
|
|
312
|
+
extractor.dispose();
|
|
313
|
+
}, 200000);
|
|
314
|
+
it('Should minterpolate frames (high-quality)', async () => {
|
|
315
|
+
// Arrange
|
|
316
|
+
const extractor = await BeamcoderExtractor.create({
|
|
317
|
+
inputFileOrUrl: TEST_VIDEO_LOW_FRAMERATE,
|
|
318
|
+
outputFile: './output/frame-%04d.png',
|
|
319
|
+
threadCount: 8,
|
|
320
|
+
interpolateFps: 25,
|
|
321
|
+
interpolateMode: 'high-quality',
|
|
322
|
+
});
|
|
323
|
+
// Act
|
|
324
|
+
const p1 = performance.now();
|
|
325
|
+
let count = 0;
|
|
326
|
+
await extractor.readFrames({
|
|
327
|
+
async onFrameAvailable() {
|
|
328
|
+
count++;
|
|
329
|
+
return true;
|
|
330
|
+
},
|
|
331
|
+
});
|
|
332
|
+
const p2 = performance.now();
|
|
333
|
+
console.log('Time to interpolate (high-quality) and dump all frames (ms): ', p2 - p1);
|
|
334
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
335
|
+
expect(count).to.be.greaterThan(240);
|
|
336
|
+
expect(fileExistsSync('./output/frame-0001.png')).to.be.true;
|
|
337
|
+
expect(fileExistsSync('./output/frame-0241.png')).to.be.true;
|
|
338
|
+
// Cleanup
|
|
339
|
+
extractor.dispose();
|
|
340
|
+
}, 200000);
|
|
341
|
+
it('Should open a file from the network and dump all frames [smaller video version]', async () => {
|
|
342
|
+
// Arrange
|
|
343
|
+
const extractor = await BeamcoderExtractor.create({
|
|
344
|
+
inputFileOrUrl: `http://127.0.0.1:${TEST_SERVER_PORT}/test/samples/bbb-smaller-faststart.mp4`,
|
|
345
|
+
outputFile: './output/frame-%04d.png',
|
|
346
|
+
});
|
|
347
|
+
// Act
|
|
348
|
+
const p1 = performance.now();
|
|
349
|
+
await extractor.readFrames();
|
|
350
|
+
const p2 = performance.now();
|
|
351
|
+
console.log('Time to dump all frames through local network (ms): ', p2 - p1);
|
|
352
|
+
// Assert
|
|
353
|
+
expect(fileExistsSync('./output/frame-0001.png')).to.be.true;
|
|
354
|
+
expect(fileExistsSync('./output/frame-0600.png')).to.be.true;
|
|
355
|
+
// Cleanup
|
|
356
|
+
extractor.dispose();
|
|
357
|
+
}, 50000);
|
|
358
|
+
it.skip('Encode frames to mp4', async () => {
|
|
359
|
+
expect(false).to.be.true;
|
|
360
|
+
});
|
|
361
|
+
});
|
|
362
|
+
//# sourceMappingURL=framefusion.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framefusion.test.js","sourceRoot":"","sources":["../../test/framefusion.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { defineConfig } from 'vite';
|
|
3
|
+
import eslint from 'vite-plugin-eslint';
|
|
4
|
+
import autoExternal from 'rollup-plugin-auto-external';
|
|
5
|
+
// https://vitejs.dev/config/
|
|
6
|
+
export default defineConfig({
|
|
7
|
+
build: {
|
|
8
|
+
lib: {
|
|
9
|
+
entry: path.resolve(__dirname, 'framefusion.ts'),
|
|
10
|
+
name: 'framefusion.ts',
|
|
11
|
+
fileName: (format) => {
|
|
12
|
+
if (format === 'es') {
|
|
13
|
+
return 'framefusion.es.js';
|
|
14
|
+
}
|
|
15
|
+
if (format === 'cjs') {
|
|
16
|
+
return 'framefusion.cjs';
|
|
17
|
+
}
|
|
18
|
+
throw new Error(`Please provide a fileName for ${format}`);
|
|
19
|
+
},
|
|
20
|
+
formats: ['es', 'cjs'],
|
|
21
|
+
},
|
|
22
|
+
rollupOptions: {
|
|
23
|
+
external: ['node:https'],
|
|
24
|
+
},
|
|
25
|
+
sourcemap: true,
|
|
26
|
+
},
|
|
27
|
+
define: {
|
|
28
|
+
global: {},
|
|
29
|
+
},
|
|
30
|
+
optimizeDeps: {
|
|
31
|
+
disabled: true,
|
|
32
|
+
},
|
|
33
|
+
plugins: [autoExternal(), eslint()],
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=vite.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.config.js","sourceRoot":"","sources":["../vite.config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,YAAY,MAAM,6BAA6B,CAAC;AAEvD,6BAA6B;AAC7B,eAAe,YAAY,CAAC;IACxB,KAAK,EAAE;QACH,GAAG,EAAE;YACD,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC;YAChD,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;gBACjB,IAAI,MAAM,KAAK,IAAI,EAAE;oBACjB,OAAO,mBAAmB,CAAC;iBAC9B;gBACD,IAAI,MAAM,KAAK,KAAK,EAAE;oBAClB,OAAO,iBAAiB,CAAC;iBAC5B;gBAED,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;SACzB;QACD,aAAa,EAAE;YACX,QAAQ,EAAE,CAAC,YAAY,CAAC;SAC3B;QACD,SAAS,EAAE,IAAI;KAClB;IACD,MAAM,EAAE;QACJ,MAAM,EAAE,EAAE;KACb;IACD,YAAY,EAAE;QACV,QAAQ,EAAE,IAAI;KACjB;IACD,OAAO,EAAE,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC;CACtC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,6BAA6B;AAC7B,eAAe,YAAY,CAAC;IACxB,IAAI,EAAE;QACF,UAAU,EAAE,kBAAkB;QAC9B,OAAO,EAAE,IAAI;KAChB;CACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.global.js","sourceRoot":"","sources":["../vitest.global.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,SAAS,CAAC,GAAG,EAAE;IACX,kBAAkB;AACtB,CAAC,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lumen5/framefusion",
|
|
3
|
+
"version": "0.0.3",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"docs": "typedoc framefusion.ts",
|
|
7
|
+
"tsc": "tsc",
|
|
8
|
+
"build": "tsc && vite build && tsc --declaration",
|
|
9
|
+
"prepare": "yarn run build",
|
|
10
|
+
"preview": "vite preview",
|
|
11
|
+
"test-once": "vitest run",
|
|
12
|
+
"test": "vitest",
|
|
13
|
+
"test:debug": "vitest --inspect-brk --single-thread",
|
|
14
|
+
"test-ui": "vitest --ui",
|
|
15
|
+
"vite-node": "vite-node",
|
|
16
|
+
"dev": " yarn run build && node dist/framefusion.es.js",
|
|
17
|
+
"debug": " yarn run build && node --enable-source-maps --inspect-brk dist/framefusion.es.js",
|
|
18
|
+
"lint": "eslint ./ --ext .js,.ts"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"beamcoder": "^0.7.1",
|
|
22
|
+
"fs-extra": "^11.1.1",
|
|
23
|
+
"got": "^12.6.0",
|
|
24
|
+
"http-server": "^14.1.1",
|
|
25
|
+
"rollup-plugin-auto-external": "^2.0.0",
|
|
26
|
+
"tmp": "^0.2.1",
|
|
27
|
+
"tsconfig-paths": "^4.1.2"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/chai": "^4.3.4",
|
|
31
|
+
"@types/express": "^4.17.17",
|
|
32
|
+
"@types/http-server": "^0.12.1",
|
|
33
|
+
"@types/mocha": "^10.0.1",
|
|
34
|
+
"@types/node": "^18.14.6",
|
|
35
|
+
"@types/sinon": "^10.0.13",
|
|
36
|
+
"@typescript-eslint/eslint-plugin": "^5.59.0",
|
|
37
|
+
"@typescript-eslint/parser": "^5.59.0",
|
|
38
|
+
"@vitest/ui": "^0.29.8",
|
|
39
|
+
"eslint": "^8.38.0",
|
|
40
|
+
"eslint-config-standard": "^17.0.0",
|
|
41
|
+
"eslint-plugin-import": "^2.27.5",
|
|
42
|
+
"eslint-plugin-node": "^11.1.0",
|
|
43
|
+
"eslint-plugin-promise": "^6.1.1",
|
|
44
|
+
"eslint-plugin-standard": "^5.0.0",
|
|
45
|
+
"eslint-plugin-vitest": "^0.1.4",
|
|
46
|
+
"express": "^4.18.2",
|
|
47
|
+
"jest-image-snapshot": "^6.1.0",
|
|
48
|
+
"rimraf": "^4.4.1",
|
|
49
|
+
"sinon": "^15.0.3",
|
|
50
|
+
"typedoc": "^0.24.1",
|
|
51
|
+
"typescript": "^4.9.5",
|
|
52
|
+
"vite": "^4.1.0",
|
|
53
|
+
"vite-node": "^0.29.2",
|
|
54
|
+
"vite-plugin-eslint": "^1.8.1",
|
|
55
|
+
"vitest": "^0.29.2"
|
|
56
|
+
},
|
|
57
|
+
"description": "Video library",
|
|
58
|
+
"main": "./dist/framefusion.js",
|
|
59
|
+
"exports": {
|
|
60
|
+
".": {
|
|
61
|
+
"require": "./dist/framefusion.cjs",
|
|
62
|
+
"import": "./dist/framefusion.es.js",
|
|
63
|
+
"types": "./dist/framefusion.d.ts"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"files": [
|
|
67
|
+
"dist/*"
|
|
68
|
+
]
|
|
69
|
+
}
|