@xyo-network/image-thumbnail-plugin 2.72.8 → 2.72.9

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.
@@ -76,9 +76,7 @@ export class ImageThumbnailWitness extends AbstractWitness {
76
76
  if (url.startsWith('data:image')) {
77
77
  const data = url.split(',')[1];
78
78
  if (data) {
79
- const buffer = Buffer.from(Uint8Array.from(atob(data), (c) => c.charCodeAt(0)));
80
- console.log(`data buffer: ${buffer.length}`);
81
- return buffer;
79
+ return Buffer.from(Uint8Array.from(atob(data), (c) => c.charCodeAt(0)));
82
80
  }
83
81
  else {
84
82
  const error = {
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.js","sourceRoot":"","sources":["../../../src/Witness/Witness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Witness.js","sourceRoot":"","sources":["../../../src/Witness/Witness.ts"],"names":[],"mappings":"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"}
@@ -1,48 +1,69 @@
1
+ import { uuid } from '@xyo-network/core';
1
2
  import ffmpeg from 'fluent-ffmpeg';
2
- import { Readable, Writable } from 'stream';
3
+ import { unlink, writeFile } from 'fs/promises';
4
+ import { tmpdir } from 'os';
5
+ import { Writable } from 'stream';
6
+ /**
7
+ * A Writable stream that collects output from ffmpeg.
8
+ */
9
+ class FfmpegOutputStream extends Writable {
10
+ chunks = [];
11
+ constructor(options) {
12
+ super(options);
13
+ }
14
+ _write(chunk, _encoding, callback) {
15
+ this.chunks.push(chunk);
16
+ callback();
17
+ }
18
+ /**
19
+ * Collects the output from ffmpeg into a buffer.
20
+ * @returns A buffer containing the concatenated
21
+ * output from ffmpeg.
22
+ */
23
+ toBuffer = () => Buffer.concat(this.chunks);
24
+ }
3
25
  /**
4
26
  * Execute FFmpeg using fluent API with provided input buffer and video thumbnail image.
5
27
  * @param videoBuffer Input video buffer.
6
28
  * @returns Output buffer containing the video thumbnail image.
7
29
  */
8
30
  export const getVideoFrameAsImageFluent = async (videoBuffer) => {
9
- const imageBuffer = await new Promise((resolve, reject) => {
10
- // const videoStream = new PassThrough()
11
- // videoStream.end(videoBuffer)
12
- const videoStream = new Readable();
13
- videoStream._read = () => { }; // _read is required but you can noop it
14
- videoStream.push(videoBuffer);
15
- videoStream.push(null);
16
- // Initialize empty array to collect PNG chunks
17
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
- const pngChunks = [];
19
- // Create a Writable stream to collect PNG output from ffmpeg
20
- const writableStream = new Writable({
21
- write(chunk, encoding, callback) {
22
- pngChunks.push(chunk);
23
- callback();
24
- },
31
+ // Get a temp file name
32
+ const tmpFile = `/${tmpdir()}/${uuid()}`;
33
+ try {
34
+ // Write videoBuffer to temp file for use as input to ffmpeg to
35
+ // avoid issues with ffmpeg inferring premature EOF from buffer
36
+ // passed via stdin (happens when ffmpeg is trying to infer
37
+ // input video format)
38
+ await writeFile(tmpFile, videoBuffer, { encoding: 'binary' });
39
+ const imageBuffer = await new Promise((resolve, reject) => {
40
+ // Create a Writable stream to collect PNG output from ffmpeg
41
+ const ffmpegOutput = new FfmpegOutputStream();
42
+ // Execute ffmpeg using fluent API
43
+ ffmpeg()
44
+ // NOTE: Uncomment to debug CLI args to ffmpeg
45
+ // .on('start', (commandLine) => console.log('Spawned Ffmpeg with command: ' + commandLine))
46
+ .on('error', (err) => reject(err.message))
47
+ // Listen for the 'end' event to combine the output into a buffer holding the PNG image
48
+ .on('end', () => resolve(ffmpegOutput.toBuffer()))
49
+ .input(tmpFile) // Use temp file as input
50
+ .takeFrames(1) // Only take 1st video frame
51
+ .withNoAudio() // Don't include audio
52
+ .outputOptions('-f image2pipe') // Write output to stdout
53
+ .videoCodec('png') // Force PNG output
54
+ // Start processing and direct ffmpeg stdout to writable stream
55
+ .pipe(ffmpegOutput);
25
56
  });
26
- const command = ffmpeg()
27
- // Uncomment to debug CLI args to ffmpeg
28
- // .on('start', (commandLine) => console.log('Spawned Ffmpeg with command: ' + commandLine))
29
- .input(videoStream)
30
- .takeFrames(1)
31
- .withNoAudio()
32
- // Exactly as their docs but does not work
33
- // .setStartTime('00:00:00')
34
- // .seekInput(0)
35
- .on('error', (err) => reject(err.message))
36
- // Listen for the 'end' event to combine the chunks and create a PNG buffer
37
- .on('end', () => resolve(Buffer.concat(pngChunks)))
38
- .on('data', (chunk) => pngChunks.push(chunk))
39
- // .toFormat('png')
40
- .outputOptions('-f image2pipe');
41
- // .outputOptions('-vcodec png')
42
- // .output(writableStream, { end: true })
43
- // Start processing
44
- command.pipe(writableStream);
45
- });
46
- return imageBuffer;
57
+ return imageBuffer;
58
+ }
59
+ finally {
60
+ // Cleanup temp file
61
+ try {
62
+ await unlink(tmpFile);
63
+ }
64
+ catch {
65
+ // No error here since file doesn't exist
66
+ }
67
+ }
47
68
  };
48
69
  //# sourceMappingURL=getVideoFrameAsImageFluent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getVideoFrameAsImageFluent.js","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,eAAe,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAE3C;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,EAAE,WAAmB,EAAE,EAAE;IACtE,MAAM,WAAW,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAChE,wCAAwC;QACxC,+BAA+B;QAE/B,MAAM,WAAW,GAAG,IAAI,QAAQ,EAAE,CAAA;QAClC,WAAW,CAAC,KAAK,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA,CAAC,wCAAwC;QACrE,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC7B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEtB,+CAA+C;QAC/C,8DAA8D;QAC9D,MAAM,SAAS,GAAU,EAAE,CAAA;QAE3B,6DAA6D;QAC7D,MAAM,cAAc,GAAG,IAAI,QAAQ,CAAC;YAClC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ;gBAC7B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACrB,QAAQ,EAAE,CAAA;YACZ,CAAC;SACF,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,MAAM,EAAE;YACtB,wCAAwC;YACxC,4FAA4F;aAC3F,KAAK,CAAC,WAAW,CAAC;aAClB,UAAU,CAAC,CAAC,CAAC;aACb,WAAW,EAAE;YACd,0CAA0C;YAC1C,4BAA4B;YAC5B,gBAAgB;aACf,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1C,2EAA2E;aAC1E,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;aAClD,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7C,mBAAmB;aAClB,aAAa,CAAC,eAAe,CAAC,CAAA;QACjC,gCAAgC;QAChC,yCAAyC;QAEzC,mBAAmB;QACnB,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IACF,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA"}
1
+ {"version":3,"file":"getVideoFrameAsImageFluent.js","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,MAAM,MAAM,eAAe,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAC3B,OAAO,EAAE,QAAQ,EAAmB,MAAM,QAAQ,CAAA;AAElD;;GAEG;AACH,MAAM,kBAAmB,SAAQ,QAAQ;IACtB,MAAM,GAAiB,EAAE,CAAA;IAE1C,YAAY,OAAyB;QACnC,KAAK,CAAC,OAAO,CAAC,CAAA;IAChB,CAAC;IAEQ,MAAM,CAAC,KAAY,EAAE,SAAyB,EAAE,QAAwC;QAC/F,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACvB,QAAQ,EAAE,CAAA;IACZ,CAAC;IAED;;;;OAIG;IACH,QAAQ,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;CAC5C;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,EAAE,WAAmB,EAAE,EAAE;IACtE,uBAAuB;IACvB,MAAM,OAAO,GAAG,IAAI,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,CAAA;IACxC,IAAI;QACF,+DAA+D;QAC/D,+DAA+D;QAC/D,2DAA2D;QAC3D,sBAAsB;QACtB,MAAM,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC7D,MAAM,WAAW,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChE,6DAA6D;YAC7D,MAAM,YAAY,GAAG,IAAI,kBAAkB,EAAE,CAAA;YAC7C,kCAAkC;YAClC,MAAM,EAAE;gBACN,8CAA8C;gBAC9C,4FAA4F;iBAC3F,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC1C,uFAAuF;iBACtF,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;iBACjD,KAAK,CAAC,OAAO,CAAC,CAAC,yBAAyB;iBACxC,UAAU,CAAC,CAAC,CAAC,CAAC,4BAA4B;iBAC1C,WAAW,EAAE,CAAC,sBAAsB;iBACpC,aAAa,CAAC,eAAe,CAAC,CAAC,yBAAyB;iBACxD,UAAU,CAAC,KAAK,CAAC,CAAC,mBAAmB;gBACtC,+DAA+D;iBAC9D,IAAI,CAAC,YAAY,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;QACF,OAAO,WAAW,CAAA;KACnB;YAAS;QACR,oBAAoB;QACpB,IAAI;YACF,MAAM,MAAM,CAAC,OAAO,CAAC,CAAA;SACtB;QAAC,MAAM;YACN,yCAAyC;SAC1C;KACF;AACH,CAAC,CAAA"}
@@ -1,5 +1,4 @@
1
1
  import { spawn } from 'child_process';
2
- import { PassThrough } from 'stream';
3
2
  /**
4
3
  * Execute FFmpeg with the provided arguments.
5
4
  * @param videoBuffer Input video buffer.
@@ -8,22 +7,22 @@ import { PassThrough } from 'stream';
8
7
  */
9
8
  export const executeFFmpeg = (videoBuffer, ffmpegArgs) => {
10
9
  return new Promise((resolve, reject) => {
10
+ const imageData = [];
11
11
  const ffmpeg = spawn('ffmpeg', ffmpegArgs);
12
- // Create a readable stream from the input buffer
13
- const videoStream = new PassThrough().end(videoBuffer);
14
- // Pipe the input stream to ffmpeg's stdin
15
- videoStream.pipe(ffmpeg.stdin);
16
- const chunks = [];
17
- ffmpeg.stdout.on('data', (chunk) => chunks.push(chunk));
12
+ ffmpeg.stdout.on('data', (data) => imageData.push(data));
18
13
  // TODO: This is required as we're seeing errors thrown due to
19
14
  // how we're piping the data to ffmpeg. Works perfectly though.
20
15
  ffmpeg.stdin.on('error', () => { });
21
16
  ffmpeg.on('close', (code) => {
22
17
  if (code !== 0) {
23
- return reject(new Error(`FFmpeg exited with code ${code}`));
18
+ reject(new Error(`FFmpeg exited with code ${code}`));
19
+ }
20
+ else {
21
+ resolve(Buffer.concat(imageData));
24
22
  }
25
- resolve(Buffer.concat(chunks));
26
23
  });
24
+ // Pipe the input stream to ffmpeg's stdin
25
+ ffmpeg.stdin.end(videoBuffer);
27
26
  });
28
27
  };
29
28
  //# sourceMappingURL=executeFfmpeg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"executeFfmpeg.js","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/spawn/executeFfmpeg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,WAAmB,EAAE,UAAoB,EAAmB,EAAE;IAC1F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QAE1C,iDAAiD;QACjD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAEtD,0CAA0C;QAC1C,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC9B,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QAC/D,8DAA8D;QAC9D,+DAA+D;QAC/D,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAClC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,IAAI,IAAI,KAAK,CAAC,EAAE;gBACd,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC,CAAA;aAC5D;YACD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"executeFfmpeg.js","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/spawn/executeFfmpeg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAErC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,WAAmB,EAAE,UAAoB,EAAmB,EAAE;IAC1F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,SAAS,GAAa,EAAE,CAAA;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QAC1C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAChE,8DAA8D;QAC9D,+DAA+D;QAC/D,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAClC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,IAAI,IAAI,KAAK,CAAC,EAAE;gBACd,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC,CAAA;aACrD;iBAAM;gBACL,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;aAClC;QACH,CAAC,CAAC,CAAA;QACF,0CAA0C;QAC1C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../../src/Witness/Witness.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAwB,MAAM,6CAA6C,CAAA;AAClG,OAAO,EAAE,UAAU,EAAa,MAAM,iCAAiC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAOtD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAIpC,OAAO,EAAE,sBAAsB,EAAqC,MAAM,UAAU,CAAA;AAEpF,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAA;AAQtD,MAAM,WAAW,0BAA2B,SAAQ,KAAK;IACvD,IAAI,EAAE,4BAA4B,CAAA;IAClC,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,QAAS,SAAQ,KAAK;IACrC,IAAI,EAAE,MAAM,CAAA;CACb;AAED,qBAAa,qBAAqB,CAAC,OAAO,SAAS,2BAA2B,GAAG,2BAA2B,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IAC5I,OAAgB,aAAa,iDAAsC;IAEnE,OAAO,CAAC,MAAM,CAAC,CAAkC;IACjD,OAAO,CAAC,UAAU,CAAwC;IAE1D,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;gBAUR;IAED,IAAI,QAAQ,2BAEX;IAED,IAAI,MAAM,WAET;IAED,IAAI,UAAU,WAEb;IAED,IAAI,iBAAiB,WAEpB;IAED,IAAI,aAAa,WAEhB;IAED,IAAI,eAAe,WAElB;IAED,IAAI,OAAO,WAEV;IAED,IAAI,KAAK,WAER;mBAEoB,cAAc;IAanC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAkBhC;;;;;OAKG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM;cAiBN,cAAc,CAAC,QAAQ,GAAE,UAAU,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YAsCjF,sBAAsB;IAiBpC;;;;OAIG;YACW,wBAAwB;YAKxB,QAAQ;CA4HvB"}
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../../src/Witness/Witness.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAwB,MAAM,6CAA6C,CAAA;AAClG,OAAO,EAAE,UAAU,EAAa,MAAM,iCAAiC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAOtD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAIpC,OAAO,EAAE,sBAAsB,EAAqC,MAAM,UAAU,CAAA;AAEpF,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAA;AAQtD,MAAM,WAAW,0BAA2B,SAAQ,KAAK;IACvD,IAAI,EAAE,4BAA4B,CAAA;IAClC,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,QAAS,SAAQ,KAAK;IACrC,IAAI,EAAE,MAAM,CAAA;CACb;AAED,qBAAa,qBAAqB,CAAC,OAAO,SAAS,2BAA2B,GAAG,2BAA2B,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IAC5I,OAAgB,aAAa,iDAAsC;IAEnE,OAAO,CAAC,MAAM,CAAC,CAAkC;IACjD,OAAO,CAAC,UAAU,CAAwC;IAE1D,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;gBAUR;IAED,IAAI,QAAQ,2BAEX;IAED,IAAI,MAAM,WAET;IAED,IAAI,UAAU,WAEb;IAED,IAAI,iBAAiB,WAEpB;IAED,IAAI,aAAa,WAEhB;IAED,IAAI,eAAe,WAElB;IAED,IAAI,OAAO,WAEV;IAED,IAAI,KAAK,WAER;mBAEoB,cAAc;IAanC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAgBhC;;;;;OAKG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM;cAiBN,cAAc,CAAC,QAAQ,GAAE,UAAU,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YAsCjF,sBAAsB;IAiBpC;;;;OAIG;YACW,wBAAwB;YAKxB,QAAQ;CA4HvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"getVideoFrameAsImageFluent.d.ts","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.ts"],"names":[],"mappings":";AAGA;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,gBAAuB,MAAM,oBA4CnE,CAAA"}
1
+ {"version":3,"file":"getVideoFrameAsImageFluent.d.ts","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.ts"],"names":[],"mappings":";AA6BA;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,gBAAuB,MAAM,oBAoCnE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"executeFfmpeg.d.ts","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/spawn/executeFfmpeg.ts"],"names":[],"mappings":";AAGA;;;;;GAKG;AACH,eAAO,MAAM,aAAa,gBAAiB,MAAM,cAAc,MAAM,EAAE,KAAG,QAAQ,MAAM,CAqBvF,CAAA"}
1
+ {"version":3,"file":"executeFfmpeg.d.ts","sourceRoot":"","sources":["../../../../../src/Witness/ffmpeg/spawn/executeFfmpeg.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AACH,eAAO,MAAM,aAAa,gBAAiB,MAAM,cAAc,MAAM,EAAE,KAAG,QAAQ,MAAM,CAkBvF,CAAA"}
package/package.json CHANGED
@@ -13,18 +13,18 @@
13
13
  "@xylabs/assert": "^2.9.3",
14
14
  "@xylabs/delay": "^2.9.3",
15
15
  "@xylabs/url": "^2.9.3",
16
- "@xyo-network/abstract-diviner": "~2.72.8",
17
- "@xyo-network/archivist-model": "~2.72.8",
18
- "@xyo-network/axios": "~2.72.8",
19
- "@xyo-network/core": "~2.72.8",
20
- "@xyo-network/diviner-model": "~2.72.8",
21
- "@xyo-network/diviner-payload-model": "~2.72.8",
22
- "@xyo-network/image-thumbnail-payload-plugin": "~2.72.8",
23
- "@xyo-network/module": "~2.72.8",
24
- "@xyo-network/payload-model": "~2.72.8",
25
- "@xyo-network/payloadset-plugin": "~2.72.8",
26
- "@xyo-network/url-payload-plugin": "~2.72.8",
27
- "@xyo-network/witness": "~2.72.8",
16
+ "@xyo-network/abstract-diviner": "~2.72.9",
17
+ "@xyo-network/archivist-model": "~2.72.9",
18
+ "@xyo-network/axios": "~2.72.9",
19
+ "@xyo-network/core": "~2.72.9",
20
+ "@xyo-network/diviner-model": "~2.72.9",
21
+ "@xyo-network/diviner-payload-model": "~2.72.9",
22
+ "@xyo-network/image-thumbnail-payload-plugin": "~2.72.9",
23
+ "@xyo-network/module": "~2.72.9",
24
+ "@xyo-network/payload-model": "~2.72.9",
25
+ "@xyo-network/payloadset-plugin": "~2.72.9",
26
+ "@xyo-network/url-payload-plugin": "~2.72.9",
27
+ "@xyo-network/witness": "~2.72.9",
28
28
  "async-mutex": "^0.4.0",
29
29
  "file-type": "^16.5.4",
30
30
  "fluent-ffmpeg": "^2.1.2",
@@ -78,5 +78,5 @@
78
78
  },
79
79
  "sideEffects": false,
80
80
  "types": "dist/types/index.d.ts",
81
- "version": "2.72.8"
81
+ "version": "2.72.9"
82
82
  }
@@ -103,9 +103,7 @@ export class ImageThumbnailWitness<TParams extends ImageThumbnailWitnessParams =
103
103
  if (url.startsWith('data:image')) {
104
104
  const data = url.split(',')[1]
105
105
  if (data) {
106
- const buffer = Buffer.from(Uint8Array.from(atob(data), (c) => c.charCodeAt(0)))
107
- console.log(`data buffer: ${buffer.length}`)
108
- return buffer
106
+ return Buffer.from(Uint8Array.from(atob(data), (c) => c.charCodeAt(0)))
109
107
  } else {
110
108
  const error: ImageThumbnailWitnessError = {
111
109
  message: 'Invalid data Url',
@@ -1,5 +1,31 @@
1
+ import { uuid } from '@xyo-network/core'
1
2
  import ffmpeg from 'fluent-ffmpeg'
2
- import { Readable, Writable } from 'stream'
3
+ import { unlink, writeFile } from 'fs/promises'
4
+ import { tmpdir } from 'os'
5
+ import { Writable, WritableOptions } from 'stream'
6
+
7
+ /**
8
+ * A Writable stream that collects output from ffmpeg.
9
+ */
10
+ class FfmpegOutputStream extends Writable {
11
+ private readonly chunks: Uint8Array[] = []
12
+
13
+ constructor(options?: WritableOptions) {
14
+ super(options)
15
+ }
16
+
17
+ override _write(chunk: never, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void {
18
+ this.chunks.push(chunk)
19
+ callback()
20
+ }
21
+
22
+ /**
23
+ * Collects the output from ffmpeg into a buffer.
24
+ * @returns A buffer containing the concatenated
25
+ * output from ffmpeg.
26
+ */
27
+ toBuffer = () => Buffer.concat(this.chunks)
28
+ }
3
29
 
4
30
  /**
5
31
  * Execute FFmpeg using fluent API with provided input buffer and video thumbnail image.
@@ -7,47 +33,39 @@ import { Readable, Writable } from 'stream'
7
33
  * @returns Output buffer containing the video thumbnail image.
8
34
  */
9
35
  export const getVideoFrameAsImageFluent = async (videoBuffer: Buffer) => {
10
- const imageBuffer = await new Promise<Buffer>((resolve, reject) => {
11
- // const videoStream = new PassThrough()
12
- // videoStream.end(videoBuffer)
13
-
14
- const videoStream = new Readable()
15
- videoStream._read = () => {} // _read is required but you can noop it
16
- videoStream.push(videoBuffer)
17
- videoStream.push(null)
18
-
19
- // Initialize empty array to collect PNG chunks
20
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
- const pngChunks: any[] = []
22
-
23
- // Create a Writable stream to collect PNG output from ffmpeg
24
- const writableStream = new Writable({
25
- write(chunk, encoding, callback) {
26
- pngChunks.push(chunk)
27
- callback()
28
- },
36
+ // Get a temp file name
37
+ const tmpFile = `/${tmpdir()}/${uuid()}`
38
+ try {
39
+ // Write videoBuffer to temp file for use as input to ffmpeg to
40
+ // avoid issues with ffmpeg inferring premature EOF from buffer
41
+ // passed via stdin (happens when ffmpeg is trying to infer
42
+ // input video format)
43
+ await writeFile(tmpFile, videoBuffer, { encoding: 'binary' })
44
+ const imageBuffer = await new Promise<Buffer>((resolve, reject) => {
45
+ // Create a Writable stream to collect PNG output from ffmpeg
46
+ const ffmpegOutput = new FfmpegOutputStream()
47
+ // Execute ffmpeg using fluent API
48
+ ffmpeg()
49
+ // NOTE: Uncomment to debug CLI args to ffmpeg
50
+ // .on('start', (commandLine) => console.log('Spawned Ffmpeg with command: ' + commandLine))
51
+ .on('error', (err) => reject(err.message))
52
+ // Listen for the 'end' event to combine the output into a buffer holding the PNG image
53
+ .on('end', () => resolve(ffmpegOutput.toBuffer()))
54
+ .input(tmpFile) // Use temp file as input
55
+ .takeFrames(1) // Only take 1st video frame
56
+ .withNoAudio() // Don't include audio
57
+ .outputOptions('-f image2pipe') // Write output to stdout
58
+ .videoCodec('png') // Force PNG output
59
+ // Start processing and direct ffmpeg stdout to writable stream
60
+ .pipe(ffmpegOutput)
29
61
  })
30
-
31
- const command = ffmpeg()
32
- // Uncomment to debug CLI args to ffmpeg
33
- // .on('start', (commandLine) => console.log('Spawned Ffmpeg with command: ' + commandLine))
34
- .input(videoStream)
35
- .takeFrames(1)
36
- .withNoAudio()
37
- // Exactly as their docs but does not work
38
- // .setStartTime('00:00:00')
39
- // .seekInput(0)
40
- .on('error', (err) => reject(err.message))
41
- // Listen for the 'end' event to combine the chunks and create a PNG buffer
42
- .on('end', () => resolve(Buffer.concat(pngChunks)))
43
- .on('data', (chunk) => pngChunks.push(chunk))
44
- // .toFormat('png')
45
- .outputOptions('-f image2pipe')
46
- // .outputOptions('-vcodec png')
47
- // .output(writableStream, { end: true })
48
-
49
- // Start processing
50
- command.pipe(writableStream)
51
- })
52
- return imageBuffer
62
+ return imageBuffer
63
+ } finally {
64
+ // Cleanup temp file
65
+ try {
66
+ await unlink(tmpFile)
67
+ } catch {
68
+ // No error here since file doesn't exist
69
+ }
70
+ }
53
71
  }
@@ -1,5 +1,4 @@
1
1
  import { spawn } from 'child_process'
2
- import { PassThrough } from 'stream'
3
2
 
4
3
  /**
5
4
  * Execute FFmpeg with the provided arguments.
@@ -9,23 +8,20 @@ import { PassThrough } from 'stream'
9
8
  */
10
9
  export const executeFFmpeg = (videoBuffer: Buffer, ffmpegArgs: string[]): Promise<Buffer> => {
11
10
  return new Promise((resolve, reject) => {
11
+ const imageData: Buffer[] = []
12
12
  const ffmpeg = spawn('ffmpeg', ffmpegArgs)
13
-
14
- // Create a readable stream from the input buffer
15
- const videoStream = new PassThrough().end(videoBuffer)
16
-
17
- // Pipe the input stream to ffmpeg's stdin
18
- videoStream.pipe(ffmpeg.stdin)
19
- const chunks: Buffer[] = []
20
- ffmpeg.stdout.on('data', (chunk: Buffer) => chunks.push(chunk))
13
+ ffmpeg.stdout.on('data', (data: Buffer) => imageData.push(data))
21
14
  // TODO: This is required as we're seeing errors thrown due to
22
15
  // how we're piping the data to ffmpeg. Works perfectly though.
23
16
  ffmpeg.stdin.on('error', () => {})
24
17
  ffmpeg.on('close', (code) => {
25
18
  if (code !== 0) {
26
- return reject(new Error(`FFmpeg exited with code ${code}`))
19
+ reject(new Error(`FFmpeg exited with code ${code}`))
20
+ } else {
21
+ resolve(Buffer.concat(imageData))
27
22
  }
28
- resolve(Buffer.concat(chunks))
29
23
  })
24
+ // Pipe the input stream to ffmpeg's stdin
25
+ ffmpeg.stdin.end(videoBuffer)
30
26
  })
31
27
  }