@modernized/fluent-ffmpeg 0.1.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.
Files changed (79) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +1481 -0
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +7 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/capabilities.d.ts +4 -0
  8. package/dist/lib/capabilities.d.ts.map +1 -0
  9. package/dist/lib/capabilities.js +354 -0
  10. package/dist/lib/capabilities.js.map +1 -0
  11. package/dist/lib/ffprobe.d.ts +4 -0
  12. package/dist/lib/ffprobe.d.ts.map +1 -0
  13. package/dist/lib/ffprobe.js +185 -0
  14. package/dist/lib/ffprobe.js.map +1 -0
  15. package/dist/lib/fluent-ffmpeg.d.ts +29 -0
  16. package/dist/lib/fluent-ffmpeg.d.ts.map +1 -0
  17. package/dist/lib/fluent-ffmpeg.js +145 -0
  18. package/dist/lib/fluent-ffmpeg.js.map +1 -0
  19. package/dist/lib/options/audio.d.ts +4 -0
  20. package/dist/lib/options/audio.d.ts.map +1 -0
  21. package/dist/lib/options/audio.js +48 -0
  22. package/dist/lib/options/audio.js.map +1 -0
  23. package/dist/lib/options/custom.d.ts +4 -0
  24. package/dist/lib/options/custom.d.ts.map +1 -0
  25. package/dist/lib/options/custom.js +61 -0
  26. package/dist/lib/options/custom.js.map +1 -0
  27. package/dist/lib/options/inputs.d.ts +4 -0
  28. package/dist/lib/options/inputs.d.ts.map +1 -0
  29. package/dist/lib/options/inputs.js +96 -0
  30. package/dist/lib/options/inputs.js.map +1 -0
  31. package/dist/lib/options/misc.d.ts +4 -0
  32. package/dist/lib/options/misc.d.ts.map +1 -0
  33. package/dist/lib/options/misc.js +37 -0
  34. package/dist/lib/options/misc.js.map +1 -0
  35. package/dist/lib/options/output.d.ts +4 -0
  36. package/dist/lib/options/output.d.ts.map +1 -0
  37. package/dist/lib/options/output.js +88 -0
  38. package/dist/lib/options/output.js.map +1 -0
  39. package/dist/lib/options/video.d.ts +4 -0
  40. package/dist/lib/options/video.d.ts.map +1 -0
  41. package/dist/lib/options/video.js +63 -0
  42. package/dist/lib/options/video.js.map +1 -0
  43. package/dist/lib/options/videosize.d.ts +4 -0
  44. package/dist/lib/options/videosize.d.ts.map +1 -0
  45. package/dist/lib/options/videosize.js +162 -0
  46. package/dist/lib/options/videosize.js.map +1 -0
  47. package/dist/lib/presets/divx.d.ts +3 -0
  48. package/dist/lib/presets/divx.d.ts.map +1 -0
  49. package/dist/lib/presets/divx.js +16 -0
  50. package/dist/lib/presets/divx.js.map +1 -0
  51. package/dist/lib/presets/flashvideo.d.ts +3 -0
  52. package/dist/lib/presets/flashvideo.d.ts.map +1 -0
  53. package/dist/lib/presets/flashvideo.js +18 -0
  54. package/dist/lib/presets/flashvideo.js.map +1 -0
  55. package/dist/lib/presets/podcast.d.ts +3 -0
  56. package/dist/lib/presets/podcast.d.ts.map +1 -0
  57. package/dist/lib/presets/podcast.js +34 -0
  58. package/dist/lib/presets/podcast.js.map +1 -0
  59. package/dist/lib/presets/types.d.ts +15 -0
  60. package/dist/lib/presets/types.d.ts.map +1 -0
  61. package/dist/lib/presets/types.js +3 -0
  62. package/dist/lib/presets/types.js.map +1 -0
  63. package/dist/lib/processor.d.ts +4 -0
  64. package/dist/lib/processor.d.ts.map +1 -0
  65. package/dist/lib/processor.js +378 -0
  66. package/dist/lib/processor.js.map +1 -0
  67. package/dist/lib/recipes.d.ts +4 -0
  68. package/dist/lib/recipes.d.ts.map +1 -0
  69. package/dist/lib/recipes.js +291 -0
  70. package/dist/lib/recipes.js.map +1 -0
  71. package/dist/lib/types.d.ts +198 -0
  72. package/dist/lib/types.d.ts.map +1 -0
  73. package/dist/lib/types.js +3 -0
  74. package/dist/lib/types.js.map +1 -0
  75. package/dist/lib/utils.d.ts +26 -0
  76. package/dist/lib/utils.d.ts.map +1 -0
  77. package/dist/lib/utils.js +292 -0
  78. package/dist/lib/utils.js.map +1 -0
  79. package/package.json +58 -0
@@ -0,0 +1,3 @@
1
+ import FfmpegCommand from './lib/fluent-ffmpeg.js';
2
+ export = FfmpegCommand;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,wBAAwB,CAAC;AAEnD,SAAS,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ const fluent_ffmpeg_js_1 = __importDefault(require("./lib/fluent-ffmpeg.js"));
6
+ module.exports = fluent_ffmpeg_js_1.default;
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;AAAA,8EAAmD;AAEnD,iBAAS,0BAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { FfmpegCommandPrototype } from './types.js';
2
+ declare function applyCapabilities(proto: FfmpegCommandPrototype): void;
3
+ export = applyCapabilities;
4
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../lib/capabilities.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,sBAAsB,EAKvB,MAAM,YAAY,CAAC;AAiQpB,iBAAS,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAgK9D;AAED,SAAS,iBAAiB,CAAC"}
@@ -0,0 +1,354 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ const promises_1 = require("node:fs/promises");
6
+ const node_path_1 = __importDefault(require("node:path"));
7
+ const utils_js_1 = __importDefault(require("./utils.js"));
8
+ const avCodecRegexp = /^\s*([D ])([E ])([VAS])([S ])([D ])([T ]) ([^ ]+) +(.*)$/;
9
+ const ffCodecRegexp = /^\s*([D.])([E.])([VAS])([I.])([L.])([S.]) ([^ ]+) +(.*)$/;
10
+ const ffEncodersRegexp = /\(encoders:([^)]+)\)/;
11
+ const ffDecodersRegexp = /\(decoders:([^)]+)\)/;
12
+ const encodersRegexp = /^\s*([VAS.])([F.])([S.])([X.])([B.])([D.]) ([^ ]+) +(.*)$/;
13
+ const formatRegexp = /^\s*([D ])([E ])\s+([^ ]+)\s+(.*)$/;
14
+ const lineBreakRegexp = /\r\n|\r|\n/;
15
+ const filterRegexp = /^(?: [T.][S.][C.] )?([^ ]+) +(AA?|VV?|\|)->(AA?|VV?|\|) +(.*)$/;
16
+ const codecTypeByLetter = {
17
+ V: 'video',
18
+ A: 'audio',
19
+ S: 'subtitle',
20
+ };
21
+ const filterTypeByLetter = {
22
+ A: 'audio',
23
+ V: 'video',
24
+ '|': 'none',
25
+ };
26
+ const cache = {};
27
+ async function fileExists(p) {
28
+ try {
29
+ await (0, promises_1.access)(p);
30
+ return true;
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ function whichAsync(name) {
37
+ return new Promise((resolve) => {
38
+ utils_js_1.default.which(name, (_err, found) => resolve(found ?? ''));
39
+ });
40
+ }
41
+ async function resolveFromEnv(envVar) {
42
+ const fromEnv = process.env[envVar];
43
+ if (!fromEnv)
44
+ return '';
45
+ return (await fileExists(fromEnv)) ? fromEnv : '';
46
+ }
47
+ async function resolveFfmpegPath() {
48
+ const fromEnv = await resolveFromEnv('FFMPEG_PATH');
49
+ if (fromEnv)
50
+ return fromEnv;
51
+ return whichAsync('ffmpeg');
52
+ }
53
+ async function resolveFfprobePath(siblingFfmpeg) {
54
+ const fromEnv = await resolveFromEnv('FFPROBE_PATH');
55
+ if (fromEnv)
56
+ return fromEnv;
57
+ const fromPath = await whichAsync('ffprobe');
58
+ if (fromPath)
59
+ return fromPath;
60
+ if (!siblingFfmpeg)
61
+ return '';
62
+ const sibling = node_path_1.default.join(node_path_1.default.dirname(siblingFfmpeg), utils_js_1.default.isWindows ? 'ffprobe.exe' : 'ffprobe');
63
+ return (await fileExists(sibling)) ? sibling : '';
64
+ }
65
+ async function resolveFlvtoolPath() {
66
+ const flvmetaEnv = await resolveFromEnv('FLVMETA_PATH');
67
+ if (flvmetaEnv)
68
+ return flvmetaEnv;
69
+ const flvtoolEnv = await resolveFromEnv('FLVTOOL2_PATH');
70
+ if (flvtoolEnv)
71
+ return flvtoolEnv;
72
+ const flvmeta = await whichAsync('flvmeta');
73
+ if (flvmeta)
74
+ return flvmeta;
75
+ return whichAsync('flvtool2');
76
+ }
77
+ function callbackify(promise, callback) {
78
+ promise.then((value) => callback(null, value), (err) => callback(err));
79
+ }
80
+ function parseCodecAvLine(line, data) {
81
+ const match = line.match(avCodecRegexp);
82
+ if (!match || match[7] === '=')
83
+ return;
84
+ data[match[7]] = {
85
+ type: codecTypeByLetter[match[3]],
86
+ description: match[8],
87
+ canDecode: match[1] === 'D',
88
+ canEncode: match[2] === 'E',
89
+ drawHorizBand: match[4] === 'S',
90
+ directRendering: match[5] === 'D',
91
+ weirdFrameTruncation: match[6] === 'T',
92
+ };
93
+ }
94
+ function expandCoders(codecData, encoders, decoders, data) {
95
+ if (encoders.length === 0 && decoders.length === 0)
96
+ return;
97
+ const coderTemplate = {
98
+ type: codecData.type,
99
+ description: codecData.description,
100
+ canDecode: false,
101
+ canEncode: false,
102
+ intraFrameOnly: codecData.intraFrameOnly,
103
+ isLossy: codecData.isLossy,
104
+ isLossless: codecData.isLossless,
105
+ };
106
+ encoders.forEach((name) => {
107
+ data[name] = { ...coderTemplate, canEncode: true };
108
+ });
109
+ decoders.forEach((name) => {
110
+ if (name in data) {
111
+ data[name].canDecode = true;
112
+ }
113
+ else {
114
+ data[name] = { ...coderTemplate, canDecode: true };
115
+ }
116
+ });
117
+ }
118
+ function parseCodecFfLine(line, data) {
119
+ const match = line.match(ffCodecRegexp);
120
+ if (!match || match[7] === '=')
121
+ return;
122
+ const codecData = {
123
+ type: codecTypeByLetter[match[3]],
124
+ description: match[8],
125
+ canDecode: match[1] === 'D',
126
+ canEncode: match[2] === 'E',
127
+ intraFrameOnly: match[4] === 'I',
128
+ isLossy: match[5] === 'L',
129
+ isLossless: match[6] === 'S',
130
+ };
131
+ data[match[7]] = codecData;
132
+ const encMatch = codecData.description.match(ffEncodersRegexp);
133
+ const decMatch = codecData.description.match(ffDecodersRegexp);
134
+ const encoders = encMatch ? encMatch[1].trim().split(' ') : [];
135
+ const decoders = decMatch ? decMatch[1].trim().split(' ') : [];
136
+ expandCoders(codecData, encoders, decoders, data);
137
+ }
138
+ function parseFiltersOutput(stdout) {
139
+ const data = {};
140
+ stdout.split('\n').forEach((line) => {
141
+ const match = line.match(filterRegexp);
142
+ if (!match)
143
+ return;
144
+ data[match[1]] = {
145
+ description: match[4],
146
+ input: filterTypeByLetter[match[2].charAt(0)],
147
+ multipleInputs: match[2].length > 1,
148
+ output: filterTypeByLetter[match[3].charAt(0)],
149
+ multipleOutputs: match[3].length > 1,
150
+ };
151
+ });
152
+ return data;
153
+ }
154
+ function parseCodecsOutput(stdout) {
155
+ const data = {};
156
+ stdout.split(lineBreakRegexp).forEach((line) => {
157
+ parseCodecAvLine(line, data);
158
+ parseCodecFfLine(line, data);
159
+ });
160
+ return data;
161
+ }
162
+ function parseEncodersOutput(stdout) {
163
+ const data = {};
164
+ stdout.split(lineBreakRegexp).forEach((line) => {
165
+ const match = line.match(encodersRegexp);
166
+ if (!match || match[7] === '=')
167
+ return;
168
+ data[match[7]] = {
169
+ type: codecTypeByLetter[match[1]],
170
+ description: match[8],
171
+ frameMT: match[2] === 'F',
172
+ sliceMT: match[3] === 'S',
173
+ experimental: match[4] === 'X',
174
+ drawHorizBand: match[5] === 'B',
175
+ directRendering: match[6] === 'D',
176
+ };
177
+ });
178
+ return data;
179
+ }
180
+ function parseFormatsOutput(stdout) {
181
+ const data = {};
182
+ stdout.split(lineBreakRegexp).forEach((line) => {
183
+ const match = line.match(formatRegexp);
184
+ if (!match)
185
+ return;
186
+ match[3].split(',').forEach((format) => {
187
+ if (!(format in data)) {
188
+ data[format] = { description: match[4], canDemux: false, canMux: false };
189
+ }
190
+ if (match[1] === 'D')
191
+ data[format].canDemux = true;
192
+ if (match[2] === 'E')
193
+ data[format].canMux = true;
194
+ });
195
+ });
196
+ return data;
197
+ }
198
+ function findUnavailableFormats(containers, formats, predicate) {
199
+ return containers.reduce((acc, container) => {
200
+ const found = container.options.find('-f', 1);
201
+ if (!found)
202
+ return acc;
203
+ const name = found[0];
204
+ if (!(name in formats) || !predicate(formats[name]))
205
+ acc.push(name);
206
+ return acc;
207
+ }, []);
208
+ }
209
+ function findUnavailableCodecs(outputs, encoders, kind, flag) {
210
+ return outputs.reduce((acc, output) => {
211
+ const list = kind === 'audio' ? output.audio : output.video;
212
+ const found = list.find(flag, 1);
213
+ if (!found)
214
+ return acc;
215
+ const name = found[0];
216
+ if (name === 'copy')
217
+ return acc;
218
+ if (!(name in encoders) || encoders[name].type !== kind)
219
+ acc.push(name);
220
+ return acc;
221
+ }, []);
222
+ }
223
+ function unavailableError(label, names) {
224
+ if (names.length === 0)
225
+ return null;
226
+ const word = names.length === 1 ? `${label} ${names[0]} is` : `${label}s ${names.join(', ')} are`;
227
+ return new Error(`${word} not available`);
228
+ }
229
+ function applyCapabilities(proto) {
230
+ proto.setFfmpegPath = function (ffmpegPath) {
231
+ cache.ffmpegPath = ffmpegPath;
232
+ return this;
233
+ };
234
+ proto.setFfprobePath = function (ffprobePath) {
235
+ cache.ffprobePath = ffprobePath;
236
+ return this;
237
+ };
238
+ proto.setFlvtoolPath = function (flvtool) {
239
+ cache.flvtoolPath = flvtool;
240
+ return this;
241
+ };
242
+ proto._forgetPaths = function () {
243
+ delete cache.ffmpegPath;
244
+ delete cache.ffprobePath;
245
+ delete cache.flvtoolPath;
246
+ };
247
+ proto._getFfmpegPath = function (callback) {
248
+ if ('ffmpegPath' in cache) {
249
+ callback(null, cache.ffmpegPath);
250
+ return;
251
+ }
252
+ callbackify(resolveFfmpegPath().then((p) => (cache.ffmpegPath = p ?? '')), callback);
253
+ };
254
+ proto._getFfprobePath = function (callback) {
255
+ if ('ffprobePath' in cache) {
256
+ callback(null, cache.ffprobePath);
257
+ return;
258
+ }
259
+ const getFfmpeg = () => new Promise((resolve, reject) => {
260
+ this._getFfmpegPath((err, p) => (err ? reject(err) : resolve(p ?? '')));
261
+ });
262
+ callbackify((async () => {
263
+ const ffmpegPath = await getFfmpeg();
264
+ const resolved = await resolveFfprobePath(ffmpegPath);
265
+ cache.ffprobePath = resolved;
266
+ return resolved;
267
+ })(), callback);
268
+ };
269
+ proto._getFlvtoolPath = function (callback) {
270
+ if ('flvtoolPath' in cache) {
271
+ callback(null, cache.flvtoolPath);
272
+ return;
273
+ }
274
+ callbackify(resolveFlvtoolPath().then((p) => (cache.flvtoolPath = p)), callback);
275
+ };
276
+ proto.availableFilters = proto.getAvailableFilters = function (callback) {
277
+ if (cache.filters) {
278
+ callback(null, cache.filters);
279
+ return;
280
+ }
281
+ this._spawnFfmpeg(['-filters'], { captureStdout: true, stdoutLines: 0 }, (err, ring) => {
282
+ if (err || !ring)
283
+ return callback(err);
284
+ cache.filters = parseFiltersOutput(ring.get());
285
+ callback(null, cache.filters);
286
+ });
287
+ };
288
+ proto.availableCodecs = proto.getAvailableCodecs = function (callback) {
289
+ if (cache.codecs) {
290
+ callback(null, cache.codecs);
291
+ return;
292
+ }
293
+ this._spawnFfmpeg(['-codecs'], { captureStdout: true, stdoutLines: 0 }, (err, ring) => {
294
+ if (err || !ring)
295
+ return callback(err);
296
+ cache.codecs = parseCodecsOutput(ring.get());
297
+ callback(null, cache.codecs);
298
+ });
299
+ };
300
+ proto.availableEncoders = proto.getAvailableEncoders = function (callback) {
301
+ if (cache.encoders) {
302
+ callback(null, cache.encoders);
303
+ return;
304
+ }
305
+ this._spawnFfmpeg(['-encoders'], { captureStdout: true, stdoutLines: 0 }, (err, ring) => {
306
+ if (err || !ring)
307
+ return callback(err);
308
+ cache.encoders = parseEncodersOutput(ring.get());
309
+ callback(null, cache.encoders);
310
+ });
311
+ };
312
+ proto.availableFormats = proto.getAvailableFormats = function (callback) {
313
+ if (cache.formats) {
314
+ callback(null, cache.formats);
315
+ return;
316
+ }
317
+ this._spawnFfmpeg(['-formats'], { captureStdout: true, stdoutLines: 0 }, (err, ring) => {
318
+ if (err || !ring)
319
+ return callback(err);
320
+ cache.formats = parseFormatsOutput(ring.get());
321
+ callback(null, cache.formats);
322
+ });
323
+ };
324
+ proto._checkCapabilities = function (callback) {
325
+ const getFormats = () => new Promise((resolve, reject) => {
326
+ this.availableFormats((err, formats) => (err || !formats ? reject(err) : resolve(formats)));
327
+ });
328
+ const getEncoders = () => new Promise((resolve, reject) => {
329
+ this.availableEncoders((err, encoders) => err || !encoders ? reject(err) : resolve(encoders));
330
+ });
331
+ (async () => {
332
+ const formats = await getFormats();
333
+ const badOutFmts = findUnavailableFormats(this._outputs, formats, (i) => i.canMux);
334
+ const outErr = unavailableError('Output format', badOutFmts);
335
+ if (outErr)
336
+ throw outErr;
337
+ const badInFmts = findUnavailableFormats(this._inputs, formats, (i) => i.canDemux);
338
+ const inErr = unavailableError('Input format', badInFmts);
339
+ if (inErr)
340
+ throw inErr;
341
+ const encoders = await getEncoders();
342
+ const badAudio = findUnavailableCodecs(this._outputs, encoders, 'audio', '-acodec');
343
+ const audioErr = unavailableError('Audio codec', badAudio);
344
+ if (audioErr)
345
+ throw audioErr;
346
+ const badVideo = findUnavailableCodecs(this._outputs, encoders, 'video', '-vcodec');
347
+ const videoErr = unavailableError('Video codec', badVideo);
348
+ if (videoErr)
349
+ throw videoErr;
350
+ })().then(() => callback(), (err) => callback(err));
351
+ };
352
+ }
353
+ module.exports = applyCapabilities;
354
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../lib/capabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { FfmpegCommandPrototype } from './types.js';
2
+ declare function applyFfprobe(proto: FfmpegCommandPrototype): void;
3
+ export = applyFfprobe;
4
+ //# sourceMappingURL=ffprobe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ffprobe.d.ts","sourceRoot":"","sources":["../../lib/ffprobe.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,sBAAsB,EAMvB,MAAM,YAAY,CAAC;AAoLpB,iBAAS,YAAY,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAczD;AAED,SAAS,YAAY,CAAC"}
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ const node_child_process_1 = require("node:child_process");
3
+ const blockEndRegexp = /^\[\/(.+)]$/;
4
+ const sectionStartRegexp = /^\[/;
5
+ const kvRegexp = /^([^=]+)=(.*)$/;
6
+ const numericRegexp = /^[0-9]+(\.[0-9]+)?$/;
7
+ const tagPrefixRegexp = /^TAG:/;
8
+ const dispositionPrefixRegexp = /^DISPOSITION:/;
9
+ const stdinIgnorableErrors = new Set(['ECONNRESET', 'EPIPE', 'EOF']);
10
+ function parseBlockBody(lines, name) {
11
+ const data = {};
12
+ while (lines.length > 0) {
13
+ const line = lines.shift();
14
+ const closing = line.match(blockEndRegexp);
15
+ if (closing && closing[1] === name)
16
+ return data;
17
+ if (sectionStartRegexp.test(line))
18
+ continue;
19
+ const kv = line.match(kvRegexp);
20
+ if (!kv)
21
+ continue;
22
+ const [, key, raw] = kv;
23
+ if (!tagPrefixRegexp.test(key) && numericRegexp.test(raw)) {
24
+ data[key] = Number(raw);
25
+ }
26
+ else {
27
+ data[key] = raw;
28
+ }
29
+ }
30
+ return data;
31
+ }
32
+ function parseFfprobeOutput(out) {
33
+ const lines = out.split(/\r\n|\r|\n/).filter((l) => l.length > 0);
34
+ const data = { streams: [], format: {}, chapters: [] };
35
+ while (lines.length > 0) {
36
+ const line = lines.shift();
37
+ if (/^\[stream/i.test(line))
38
+ data.streams.push(parseBlockBody(lines, 'STREAM'));
39
+ else if (/^\[chapter/i.test(line))
40
+ data.chapters.push(parseBlockBody(lines, 'CHAPTER'));
41
+ else if (line.toLowerCase() === '[format]')
42
+ data.format = parseBlockBody(lines, 'FORMAT');
43
+ }
44
+ return data;
45
+ }
46
+ function liftLegacyKeys(target, prefix, dest) {
47
+ const matchingKeys = Object.keys(target).filter((k) => prefix.test(k));
48
+ if (matchingKeys.length === 0)
49
+ return;
50
+ target[dest] ??= {};
51
+ const bag = target[dest];
52
+ const sliceFrom = dest === 'tags' ? 4 : 12;
53
+ matchingKeys.forEach((key) => {
54
+ bag[key.slice(sliceFrom)] = target[key];
55
+ delete target[key];
56
+ });
57
+ }
58
+ function normaliseLegacyOutput(data) {
59
+ [data.format, ...data.streams].forEach((target) => {
60
+ if (!target)
61
+ return;
62
+ liftLegacyKeys(target, tagPrefixRegexp, 'tags');
63
+ liftLegacyKeys(target, dispositionPrefixRegexp, 'disposition');
64
+ });
65
+ }
66
+ function parseFfprobeArgs(args) {
67
+ const callback = args[args.length - 1];
68
+ let index = null;
69
+ let options = [];
70
+ if (args.length === 3) {
71
+ index = args[0];
72
+ options = args[1];
73
+ }
74
+ else if (args.length === 2) {
75
+ if (typeof args[0] === 'number')
76
+ index = args[0];
77
+ else if (Array.isArray(args[0]))
78
+ options = args[0];
79
+ }
80
+ return { index, options, callback };
81
+ }
82
+ function pickInput(index, currentInput, inputs) {
83
+ if (index === null) {
84
+ if (!currentInput)
85
+ return { error: new Error('No input specified') };
86
+ return { input: currentInput };
87
+ }
88
+ const input = inputs[index];
89
+ if (!input)
90
+ return { error: new Error('Invalid input index') };
91
+ return { input };
92
+ }
93
+ function runFfprobe(probePath, input, options, callback) {
94
+ const state = {
95
+ stdout: '',
96
+ stderr: '',
97
+ stdoutClosed: false,
98
+ stderrClosed: false,
99
+ processExited: false,
100
+ exitError: null,
101
+ };
102
+ let ended = false;
103
+ const handleCallback = (err, data) => {
104
+ if (ended)
105
+ return;
106
+ ended = true;
107
+ callback(err, data);
108
+ };
109
+ const tryFinish = (err) => {
110
+ if (err)
111
+ state.exitError = err;
112
+ if (!(state.processExited && state.stdoutClosed && state.stderrClosed))
113
+ return;
114
+ if (state.exitError) {
115
+ const finalErr = state.exitError;
116
+ if (state.stderr)
117
+ finalErr.message += `\n${state.stderr}`;
118
+ handleCallback(finalErr);
119
+ return;
120
+ }
121
+ const data = parseFfprobeOutput(state.stdout);
122
+ normaliseLegacyOutput(data);
123
+ handleCallback(null, data);
124
+ };
125
+ const src = input.isStream ? 'pipe:0' : input.source;
126
+ const child = (0, node_child_process_1.spawn)(probePath, ['-show_streams', '-show_format', ...options, src], {
127
+ windowsHide: true,
128
+ });
129
+ if (input.isStream) {
130
+ child.stdin.on('error', (err) => {
131
+ if (err.code && stdinIgnorableErrors.has(err.code))
132
+ return;
133
+ handleCallback(err);
134
+ });
135
+ child.stdin.on('close', () => {
136
+ const stream = input.source;
137
+ stream.pause();
138
+ stream.unpipe(child.stdin);
139
+ });
140
+ input.source.pipe(child.stdin);
141
+ }
142
+ child.on('error', (err) => handleCallback(err));
143
+ child.on('exit', (code, signal) => {
144
+ state.processExited = true;
145
+ if (code)
146
+ tryFinish(new Error(`ffprobe exited with code ${code}`));
147
+ else if (signal)
148
+ tryFinish(new Error(`ffprobe was killed with signal ${signal}`));
149
+ else
150
+ tryFinish();
151
+ });
152
+ child.stdout.on('data', (chunk) => {
153
+ state.stdout += chunk;
154
+ });
155
+ child.stdout.on('close', () => {
156
+ state.stdoutClosed = true;
157
+ tryFinish();
158
+ });
159
+ child.stderr.on('data', (chunk) => {
160
+ state.stderr += chunk;
161
+ });
162
+ child.stderr.on('close', () => {
163
+ state.stderrClosed = true;
164
+ tryFinish();
165
+ });
166
+ }
167
+ function applyFfprobe(proto) {
168
+ proto.ffprobe = function (...args) {
169
+ const { index, options, callback } = parseFfprobeArgs(args);
170
+ const { input, error } = pickInput(index, this._currentInput, this._inputs);
171
+ if (error || !input) {
172
+ callback(error);
173
+ return;
174
+ }
175
+ this._getFfprobePath((pathErr, probePath) => {
176
+ if (pathErr)
177
+ return callback(pathErr);
178
+ if (!probePath)
179
+ return callback(new Error('Cannot find ffprobe'));
180
+ runFfprobe(probePath, input, options, callback);
181
+ });
182
+ };
183
+ }
184
+ module.exports = applyFfprobe;
185
+ //# sourceMappingURL=ffprobe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ffprobe.js","sourceRoot":"","sources":["../../lib/ffprobe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { Readable } from 'node:stream';
2
+ import type { CodecInfo, EncoderInfo, FfmpegCommandOptions, FfmpegCommandThis, FfprobeCallback, FilterInfo, FormatInfo } from './types.js';
3
+ type FfmpegInput = string | Readable | FfmpegCommandOptions | undefined;
4
+ interface FfmpegCommand extends FfmpegCommandThis {
5
+ clone(): FfmpegCommand;
6
+ }
7
+ interface FfmpegCommandStatic {
8
+ new (input?: FfmpegInput, options?: FfmpegCommandOptions): FfmpegCommand;
9
+ (input?: FfmpegInput, options?: FfmpegCommandOptions): FfmpegCommand;
10
+ prototype: FfmpegCommand;
11
+ setFfmpegPath(p: string): void;
12
+ setFfprobePath(p: string): void;
13
+ setFlvtoolPath(p: string): void;
14
+ availableFilters(callback: (err: Error | null, filters?: Record<string, FilterInfo>) => void): void;
15
+ getAvailableFilters(callback: (err: Error | null, filters?: Record<string, FilterInfo>) => void): void;
16
+ availableCodecs(callback: (err: Error | null, codecs?: Record<string, CodecInfo>) => void): void;
17
+ getAvailableCodecs(callback: (err: Error | null, codecs?: Record<string, CodecInfo>) => void): void;
18
+ availableFormats(callback: (err: Error | null, formats?: Record<string, FormatInfo>) => void): void;
19
+ getAvailableFormats(callback: (err: Error | null, formats?: Record<string, FormatInfo>) => void): void;
20
+ availableEncoders(callback: (err: Error | null, encoders?: Record<string, EncoderInfo>) => void): void;
21
+ getAvailableEncoders(callback: (err: Error | null, encoders?: Record<string, EncoderInfo>) => void): void;
22
+ ffprobe(file: string, callback: FfprobeCallback): void;
23
+ ffprobe(file: string, options: string[], callback: FfprobeCallback): void;
24
+ ffprobe(file: string, index: number, callback: FfprobeCallback): void;
25
+ ffprobe(file: string, index: number, options: string[], callback: FfprobeCallback): void;
26
+ }
27
+ declare const FfmpegCommand: FfmpegCommandStatic;
28
+ export = FfmpegCommand;
29
+ //# sourceMappingURL=fluent-ffmpeg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fluent-ffmpeg.d.ts","sourceRoot":"","sources":["../../lib/fluent-ffmpeg.ts"],"names":[],"mappings":"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"}