@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,291 @@
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 node_stream_1 = require("node:stream");
8
+ const utils_js_1 = __importDefault(require("./utils.js"));
9
+ const PERCENT_BASE = 100;
10
+ const PIXEL_ROUND_STEP = 2;
11
+ async function fileExists(p) {
12
+ try {
13
+ await (0, promises_1.access)(p);
14
+ return true;
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ }
20
+ function pickBiggestVideoStream(meta) {
21
+ return meta.streams.reduce((biggest, stream) => {
22
+ if (stream.codec_type === 'video' &&
23
+ Number(stream.width) * Number(stream.height) >
24
+ Number(biggest.width) * Number(biggest.height)) {
25
+ return stream;
26
+ }
27
+ return biggest;
28
+ }, { width: 0, height: 0 });
29
+ }
30
+ function probeFfprobe(self) {
31
+ return new Promise((resolve, reject) => {
32
+ self.ffprobe((err, data) => (err || !data ? reject(err) : resolve(data)));
33
+ });
34
+ }
35
+ function memoizeFfprobe(self) {
36
+ let cached;
37
+ return async () => {
38
+ if (cached)
39
+ return cached;
40
+ cached = await probeFfprobe(self);
41
+ return cached;
42
+ };
43
+ }
44
+ function normaliseScreenshotConfig(input, folder) {
45
+ let config;
46
+ if (typeof input === 'number') {
47
+ config = { count: input };
48
+ }
49
+ else {
50
+ config = { ...(input ?? { count: 1 }) };
51
+ }
52
+ if (!('folder' in config))
53
+ config.folder = folder ?? '.';
54
+ if (config.timestamps !== undefined)
55
+ config.timemarks = config.timestamps;
56
+ if (!config.timemarks) {
57
+ if (!config.count) {
58
+ throw new Error('Cannot take screenshots: neither a count nor a timemark list are specified');
59
+ }
60
+ const interval = PERCENT_BASE / (1 + config.count);
61
+ config.timemarks = Array.from({ length: config.count }, (_, i) => `${interval * (i + 1)}%`);
62
+ }
63
+ return config;
64
+ }
65
+ function parseSizeSpec(size) {
66
+ if (!size)
67
+ return { fixedSize: null, fixedWidth: null, fixedHeight: null, percentSize: null };
68
+ const fixedSize = size.match(/^(\d+)x(\d+)$/);
69
+ const fixedWidth = size.match(/^(\d+)x\?$/);
70
+ const fixedHeight = size.match(/^\?x(\d+)$/);
71
+ const percentSize = size.match(/^(\d+)%$/);
72
+ if (!fixedSize && !fixedWidth && !fixedHeight && !percentSize) {
73
+ throw new Error(`Invalid size parameter: ${size}`);
74
+ }
75
+ return { fixedSize, fixedWidth, fixedHeight, percentSize };
76
+ }
77
+ function isPercentTimemark(t) {
78
+ return /^[\d.]+%$/.test(String(t));
79
+ }
80
+ async function resolvePercentTimemarks(config, source, getMetadata) {
81
+ if (!config.timemarks.some(isPercentTimemark))
82
+ return;
83
+ if (typeof source !== 'string') {
84
+ throw new Error('Cannot compute screenshot timemarks with an input stream, please specify fixed timemarks');
85
+ }
86
+ const meta = await getMetadata();
87
+ const vstream = pickBiggestVideoStream(meta);
88
+ if (Number(vstream.width) === 0) {
89
+ throw new Error('No video stream in input, cannot take screenshots');
90
+ }
91
+ let duration = Number(vstream.duration);
92
+ if (Number.isNaN(duration))
93
+ duration = Number(meta.format.duration);
94
+ if (Number.isNaN(duration)) {
95
+ throw new Error('Could not get input duration, please specify fixed timemarks');
96
+ }
97
+ config.timemarks = config.timemarks.map((mark) => {
98
+ const m = String(mark).match(/^([\d.]+)%$/);
99
+ return m ? (duration * parseFloat(m[1])) / PERCENT_BASE : mark;
100
+ });
101
+ }
102
+ function fixPattern(config) {
103
+ let pattern = config.filename ?? 'tn.png';
104
+ if (!pattern.includes('.'))
105
+ pattern += '.png';
106
+ if (config.timemarks.length > 1 && !/%(s|0*i)/.test(pattern)) {
107
+ const ext = node_path_1.default.extname(pattern);
108
+ pattern = node_path_1.default.join(node_path_1.default.dirname(pattern), `${node_path_1.default.basename(pattern, ext)}_%i${ext}`);
109
+ }
110
+ return pattern;
111
+ }
112
+ function replaceFilenameTokens(pattern, source) {
113
+ if (!/%[bf]/.test(pattern))
114
+ return pattern;
115
+ if (typeof source !== 'string') {
116
+ throw new Error('Cannot replace %f or %b when using an input stream');
117
+ }
118
+ return pattern
119
+ .replace(/%f/g, node_path_1.default.basename(source))
120
+ .replace(/%b/g, node_path_1.default.basename(source, node_path_1.default.extname(source)));
121
+ }
122
+ async function computeSizeForTokens(pattern, resolvedSize, getMetadata) {
123
+ if (!/%[whr]/.test(pattern))
124
+ return { width: -1, height: -1 };
125
+ const { fixedSize, fixedWidth, fixedHeight, percentSize } = resolvedSize;
126
+ if (fixedSize)
127
+ return { width: Number(fixedSize[1]), height: Number(fixedSize[2]) };
128
+ let meta;
129
+ try {
130
+ meta = await getMetadata();
131
+ }
132
+ catch {
133
+ throw new Error('Could not determine video resolution to replace %w, %h or %r');
134
+ }
135
+ const vstream = pickBiggestVideoStream(meta);
136
+ if (Number(vstream.width) === 0) {
137
+ throw new Error('No video stream in input, cannot replace %w, %h or %r');
138
+ }
139
+ let width = Number(vstream.width);
140
+ let height = Number(vstream.height);
141
+ if (fixedWidth) {
142
+ height = (height * Number(fixedWidth[1])) / width;
143
+ width = Number(fixedWidth[1]);
144
+ }
145
+ else if (fixedHeight) {
146
+ width = (width * Number(fixedHeight[1])) / height;
147
+ height = Number(fixedHeight[1]);
148
+ }
149
+ else if (percentSize) {
150
+ const ratio = Number(percentSize[1]) / PERCENT_BASE;
151
+ width *= ratio;
152
+ height *= ratio;
153
+ }
154
+ return {
155
+ width: Math.round(width / PIXEL_ROUND_STEP) * PIXEL_ROUND_STEP,
156
+ height: Math.round(height / PIXEL_ROUND_STEP) * PIXEL_ROUND_STEP,
157
+ };
158
+ }
159
+ function replaceSizeTokens(pattern, size) {
160
+ return pattern
161
+ .replace(/%r/g, '%wx%h')
162
+ .replace(/%w/g, String(size.width))
163
+ .replace(/%h/g, String(size.height));
164
+ }
165
+ function generateFilenames(pattern, timemarks) {
166
+ return timemarks.map((t, i) => pattern
167
+ .replace(/%s/g, String(utils_js_1.default.timemarkToSeconds(t)))
168
+ .replace(/%(0*)i/g, (_match, padding) => {
169
+ const idx = String(i + 1);
170
+ return padding.slice(0, Math.max(0, padding.length + 1 - idx.length)) + idx;
171
+ }));
172
+ }
173
+ async function ensureDirectory(folder) {
174
+ if (await fileExists(folder))
175
+ return;
176
+ await (0, promises_1.mkdir)(folder);
177
+ }
178
+ function buildScreenshotFilters(self, config) {
179
+ const count = config.timemarks.length;
180
+ const split = { filter: 'split', options: count, outputs: [] };
181
+ let filters = [split];
182
+ if (config.size !== undefined) {
183
+ self.size(config.size);
184
+ const sizeFilters = self._currentOutput.sizeFilters.get().map((f, i) => {
185
+ if (i > 0)
186
+ f.inputs = `size${i - 1}`;
187
+ f.outputs = `size${i}`;
188
+ return f;
189
+ });
190
+ split.inputs = `size${sizeFilters.length - 1}`;
191
+ filters = [...sizeFilters, split];
192
+ self._currentOutput.sizeFilters.clear();
193
+ }
194
+ return { filters, split };
195
+ }
196
+ function attachScreenshotOutputs(self, config, filenames, split) {
197
+ let first = 0;
198
+ config.timemarks.forEach((mark, i) => {
199
+ const stream = `screen${i}`;
200
+ split.outputs.push(stream);
201
+ if (i === 0) {
202
+ first = Number(mark);
203
+ self.seekInput(first);
204
+ }
205
+ self.output(node_path_1.default.join(config.folder, filenames[i])).frames(1).map(stream);
206
+ if (i > 0)
207
+ self.seek(Number(mark) - first);
208
+ });
209
+ }
210
+ function applyRecipes(proto) {
211
+ proto.saveToFile = proto.save = function (output) {
212
+ this.output(output).run();
213
+ return this;
214
+ };
215
+ proto.writeToStream =
216
+ proto.pipe =
217
+ proto.stream =
218
+ function (streamArg, options) {
219
+ let stream;
220
+ let opts = options;
221
+ if (streamArg && typeof streamArg === 'object' && !('writable' in streamArg)) {
222
+ opts = streamArg;
223
+ stream = undefined;
224
+ }
225
+ else {
226
+ stream = streamArg;
227
+ }
228
+ if (!stream)
229
+ stream = new node_stream_1.PassThrough();
230
+ this.output(stream, opts).run();
231
+ return stream;
232
+ };
233
+ proto.takeScreenshots =
234
+ proto.thumbnail =
235
+ proto.thumbnails =
236
+ proto.screenshot =
237
+ proto.screenshots =
238
+ function (configArg, folder) {
239
+ const source = this._currentInput.source;
240
+ const config = normaliseScreenshotConfig(configArg, folder);
241
+ const resolvedSize = parseSizeSpec(config.size);
242
+ const getMetadata = memoizeFfprobe(this);
243
+ (async () => {
244
+ await resolvePercentTimemarks(config, source, getMetadata);
245
+ config.timemarks = config
246
+ .timemarks.map((m) => utils_js_1.default.timemarkToSeconds(m))
247
+ .sort((a, b) => a - b);
248
+ let pattern = fixPattern(config);
249
+ pattern = replaceFilenameTokens(pattern, source);
250
+ const size = await computeSizeForTokens(pattern, resolvedSize, getMetadata);
251
+ pattern = replaceSizeTokens(pattern, size);
252
+ const filenames = generateFilenames(pattern, config.timemarks);
253
+ this.emit('filenames', filenames);
254
+ await ensureDirectory(config.folder);
255
+ return filenames;
256
+ })().then((filenames) => {
257
+ const { filters, split } = buildScreenshotFilters(this, config);
258
+ attachScreenshotOutputs(this, config, filenames, split);
259
+ this.complexFilter(filters);
260
+ this.run();
261
+ }, (err) => this.emit('error', err));
262
+ return this;
263
+ };
264
+ proto.mergeToFile =
265
+ proto.concatenate =
266
+ proto.concat =
267
+ function (target, options) {
268
+ const fileInput = this._inputs.find((input) => !input.isStream);
269
+ if (!fileInput) {
270
+ this.emit('error', new Error('No file input for concat'));
271
+ return this;
272
+ }
273
+ this.ffprobe(this._inputs.indexOf(fileInput), (err, data) => {
274
+ if (err || !data) {
275
+ this.emit('error', err);
276
+ return;
277
+ }
278
+ const hasAudio = data.streams.some((s) => s.codec_type === 'audio');
279
+ const hasVideo = data.streams.some((s) => s.codec_type === 'video');
280
+ this.output(target, options)
281
+ .complexFilter({
282
+ filter: 'concat',
283
+ options: { n: this._inputs.length, v: hasVideo ? 1 : 0, a: hasAudio ? 1 : 0 },
284
+ })
285
+ .run();
286
+ });
287
+ return this;
288
+ };
289
+ }
290
+ module.exports = applyRecipes;
291
+ //# sourceMappingURL=recipes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipes.js","sourceRoot":"","sources":["../../lib/recipes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,198 @@
1
+ import type { ChildProcess } from 'node:child_process';
2
+ import type EventEmitter from 'node:events';
3
+ import type { Readable, Writable } from 'node:stream';
4
+ export interface FilterSpec {
5
+ filter: string;
6
+ inputs?: string | string[];
7
+ outputs?: string | string[];
8
+ options?: string | number | unknown[] | Record<string, unknown>;
9
+ }
10
+ export type ArgValue = string | number | FilterSpec;
11
+ export interface ArgList {
12
+ (...args: (ArgValue | ArgValue[])[]): void;
13
+ clear(): void;
14
+ get(): ArgValue[];
15
+ find(arg: ArgValue, count?: number): ArgValue[] | undefined;
16
+ remove(arg: ArgValue, count?: number): void;
17
+ clone(): ArgList;
18
+ }
19
+ export interface InputInfo {
20
+ format: string;
21
+ audio: string;
22
+ video: string;
23
+ duration: string;
24
+ audio_details?: string[];
25
+ video_details?: string[];
26
+ }
27
+ export interface CodecState {
28
+ inputStack?: InputInfo[];
29
+ inputIndex?: number;
30
+ inInput?: boolean;
31
+ }
32
+ export interface LinesRing {
33
+ callback(cb: (line: string) => void): void;
34
+ append(str: string | Buffer): void;
35
+ get(): string;
36
+ close(): void;
37
+ }
38
+ export interface ProgressReport {
39
+ frames: number;
40
+ currentFps: number;
41
+ currentKbps: number;
42
+ targetSize: number;
43
+ timemark: string;
44
+ percent?: number;
45
+ }
46
+ export interface CommandLike {
47
+ emit(event: string, ...args: unknown[]): boolean;
48
+ _ffprobeData?: FfprobeData;
49
+ }
50
+ export interface InputState {
51
+ source: string | Readable;
52
+ isFile: boolean;
53
+ isStream: boolean;
54
+ options: ArgList;
55
+ }
56
+ export interface OutputState {
57
+ target?: string | Writable;
58
+ isFile?: boolean;
59
+ pipeopts?: Record<string, unknown>;
60
+ audio: ArgList;
61
+ audioFilters: ArgList;
62
+ video: ArgList;
63
+ videoFilters: ArgList;
64
+ sizeFilters: ArgList;
65
+ options: ArgList;
66
+ flags: {
67
+ flvmeta?: boolean;
68
+ };
69
+ sizeData?: {
70
+ size?: string;
71
+ aspect?: number;
72
+ pad?: string | false;
73
+ };
74
+ }
75
+ export interface Logger {
76
+ warn(message: string): void;
77
+ debug(message: string): void;
78
+ info?(message: string): void;
79
+ error?(message: string): void;
80
+ }
81
+ export interface FfmpegCommandOptions {
82
+ presets?: string;
83
+ preset?: string;
84
+ source?: string | Readable;
85
+ logger?: Logger;
86
+ niceness?: number;
87
+ priority?: number;
88
+ cwd?: string;
89
+ timeout?: number;
90
+ stdoutLines?: number;
91
+ [key: string]: unknown;
92
+ }
93
+ export type PathCallback = (err: Error | null, path?: string) => void;
94
+ export interface SpawnOptions {
95
+ captureStdout?: boolean;
96
+ stdoutLines?: number;
97
+ niceness?: number;
98
+ cwd?: string;
99
+ }
100
+ export type SpawnCallback = (err: Error | null, stdoutRing?: LinesRing) => void;
101
+ export interface FilterInfo {
102
+ description: string;
103
+ input: 'audio' | 'video' | 'none';
104
+ multipleInputs: boolean;
105
+ output: 'audio' | 'video' | 'none';
106
+ multipleOutputs: boolean;
107
+ }
108
+ export interface CodecInfo {
109
+ type?: 'video' | 'audio' | 'subtitle';
110
+ description: string;
111
+ canDecode: boolean;
112
+ canEncode: boolean;
113
+ drawHorizBand?: boolean;
114
+ directRendering?: boolean;
115
+ weirdFrameTruncation?: boolean;
116
+ intraFrameOnly?: boolean;
117
+ isLossy?: boolean;
118
+ isLossless?: boolean;
119
+ }
120
+ export interface EncoderInfo {
121
+ type?: 'video' | 'audio' | 'subtitle';
122
+ description: string;
123
+ frameMT: boolean;
124
+ sliceMT: boolean;
125
+ experimental: boolean;
126
+ drawHorizBand: boolean;
127
+ directRendering: boolean;
128
+ }
129
+ export interface FormatInfo {
130
+ description: string;
131
+ canDemux: boolean;
132
+ canMux: boolean;
133
+ }
134
+ export interface FfprobeStream {
135
+ [key: string]: unknown;
136
+ tags?: Record<string, unknown>;
137
+ disposition?: Record<string, unknown>;
138
+ }
139
+ export interface FfprobeData {
140
+ streams: FfprobeStream[];
141
+ format: FfprobeStream;
142
+ chapters: FfprobeStream[];
143
+ }
144
+ export type FfprobeCallback = (err: Error | null, data?: FfprobeData) => void;
145
+ export type ProcessCallback = (proc: ChildProcess, stdoutRing: LinesRing, stderrRing: LinesRing) => void;
146
+ export type SpawnEndCallback = (err: Error | null, stdoutRing?: LinesRing, stderrRing?: LinesRing) => void;
147
+ export type PrepareCallback = (err: Error | null, args?: string[]) => void;
148
+ export interface FfmpegCommandThis extends EventEmitter {
149
+ _currentInput?: InputState;
150
+ _currentOutput?: OutputState;
151
+ _inputs: InputState[];
152
+ _outputs: OutputState[];
153
+ _complexFilters: ArgList;
154
+ _global: ArgList;
155
+ _ffprobeData?: FfprobeData;
156
+ options: FfmpegCommandOptions;
157
+ logger: Logger;
158
+ ffmpegProc?: ChildProcess;
159
+ processTimer?: NodeJS.Timeout;
160
+ setFfmpegPath(p: string): this;
161
+ setFfprobePath(p: string): this;
162
+ setFlvtoolPath(p: string): this;
163
+ _forgetPaths(): void;
164
+ _getFfmpegPath(callback: PathCallback): void;
165
+ _getFfprobePath(callback: PathCallback): void;
166
+ _getFlvtoolPath(callback: PathCallback): void;
167
+ availableFilters(callback: (err: Error | null, filters?: Record<string, FilterInfo>) => void): void;
168
+ availableCodecs(callback: (err: Error | null, codecs?: Record<string, CodecInfo>) => void): void;
169
+ availableEncoders(callback: (err: Error | null, encoders?: Record<string, EncoderInfo>) => void): void;
170
+ availableFormats(callback: (err: Error | null, formats?: Record<string, FormatInfo>) => void): void;
171
+ _checkCapabilities(callback: (err?: Error | null) => void): void;
172
+ ffprobe(callback: FfprobeCallback): void;
173
+ ffprobe(index: number, callback: FfprobeCallback): void;
174
+ ffprobe(options: string[], callback: FfprobeCallback): void;
175
+ ffprobe(index: number, options: string[], callback: FfprobeCallback): void;
176
+ _spawnFfmpeg(args: string[], options: SpawnOptions, processCB: ProcessCallback, endCB: SpawnEndCallback): void;
177
+ _spawnFfmpeg(args: string[], options: SpawnOptions, endCB: SpawnEndCallback): void;
178
+ _spawnFfmpeg(args: string[], endCB: SpawnEndCallback): void;
179
+ _getArguments(): (string | number)[];
180
+ _prepare(callback: PrepareCallback, readMetadata?: boolean): void;
181
+ run(): this;
182
+ exec(): this;
183
+ execute(): this;
184
+ renice(niceness?: number): this;
185
+ kill(signal?: string): this;
186
+ input(source: string | Readable): this;
187
+ duration(d: string | number): this;
188
+ videoFilters(filters: FilterSpec[]): this;
189
+ output(target?: string | Writable, pipeopts?: Record<string, unknown>): this;
190
+ seek(s: string | number): this;
191
+ seekInput(s: string | number): this;
192
+ size(s: string): this;
193
+ complexFilter(spec: string | FilterSpec | (string | FilterSpec)[], map?: string | string[]): this;
194
+ frames(count: number): this;
195
+ map(spec: string): this;
196
+ }
197
+ export type FfmpegCommandPrototype = Record<string, unknown>;
198
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import type { ArgList, CodecState, CommandLike, FilterSpec, LinesRing } from './types.js';
2
+ type WhichCallback = (err: null, path: string) => void;
3
+ declare function copy<S extends object>(source: S, dest: Record<string, unknown>): void;
4
+ declare function makeArgList(): ArgList;
5
+ declare function makeFilterStrings(filters: (string | FilterSpec)[]): string[];
6
+ declare function whichCached(name: string, callback: WhichCallback): void;
7
+ declare function timemarkToSeconds(timemark: string | number): number;
8
+ declare function extractCodecData(command: CommandLike, stderrLine: string, codecsObject: CodecState): boolean;
9
+ declare function extractProgress(command: CommandLike, stderrLine: string): void;
10
+ declare function extractError(stderr: string): string;
11
+ declare function makeLinesRing(maxLines: number): LinesRing;
12
+ declare const utils: {
13
+ isWindows: boolean;
14
+ streamRegexp: RegExp;
15
+ copy: typeof copy;
16
+ args: typeof makeArgList;
17
+ makeFilterStrings: typeof makeFilterStrings;
18
+ which: typeof whichCached;
19
+ timemarkToSeconds: typeof timemarkToSeconds;
20
+ extractCodecData: typeof extractCodecData;
21
+ extractProgress: typeof extractProgress;
22
+ extractError: typeof extractError;
23
+ linesRing: typeof makeLinesRing;
24
+ };
25
+ export = utils;
26
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,OAAO,EAEP,UAAU,EACV,WAAW,EACX,UAAU,EACV,SAAS,EAEV,MAAM,YAAY,CAAC;AAYpB,KAAK,aAAa,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAEvD,iBAAS,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAI9E;AAED,iBAAS,WAAW,IAAI,OAAO,CA8B9B;AAkCD,iBAAS,iBAAiB,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,GAAG,MAAM,EAAE,CAErE;AAED,iBAAS,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAQhE;AAED,iBAAS,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAS5D;AAyDD,iBAAS,gBAAgB,CACvB,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,UAAU,GACvB,OAAO,CAkBT;AAcD,iBAAS,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAiBvE;AAED,iBAAS,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAU5C;AAED,iBAAS,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CA0DlD;AAED,QAAA,MAAM,KAAK;;;;;;;;;;;;CAYV,CAAC;AAEF,SAAS,KAAK,CAAC"}