@gannochenko/staticstripes 0.0.1

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 (86) hide show
  1. package/.prettierrc +8 -0
  2. package/Makefile +69 -0
  3. package/dist/asset-manager.d.ts +16 -0
  4. package/dist/asset-manager.d.ts.map +1 -0
  5. package/dist/asset-manager.js +50 -0
  6. package/dist/asset-manager.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +257 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/container-renderer.d.ts +21 -0
  12. package/dist/container-renderer.d.ts.map +1 -0
  13. package/dist/container-renderer.js +149 -0
  14. package/dist/container-renderer.js.map +1 -0
  15. package/dist/expression-parser.d.ts +63 -0
  16. package/dist/expression-parser.d.ts.map +1 -0
  17. package/dist/expression-parser.js +145 -0
  18. package/dist/expression-parser.js.map +1 -0
  19. package/dist/ffmpeg.d.ts +375 -0
  20. package/dist/ffmpeg.d.ts.map +1 -0
  21. package/dist/ffmpeg.js +997 -0
  22. package/dist/ffmpeg.js.map +1 -0
  23. package/dist/ffprobe.d.ts +2 -0
  24. package/dist/ffprobe.d.ts.map +1 -0
  25. package/dist/ffprobe.js +31 -0
  26. package/dist/ffprobe.js.map +1 -0
  27. package/dist/html-parser.d.ts +56 -0
  28. package/dist/html-parser.d.ts.map +1 -0
  29. package/dist/html-parser.js +208 -0
  30. package/dist/html-parser.js.map +1 -0
  31. package/dist/html-project-parser.d.ts +169 -0
  32. package/dist/html-project-parser.d.ts.map +1 -0
  33. package/dist/html-project-parser.js +954 -0
  34. package/dist/html-project-parser.js.map +1 -0
  35. package/dist/index.d.ts +6 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +18 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/label-generator.d.ts +35 -0
  40. package/dist/label-generator.d.ts.map +1 -0
  41. package/dist/label-generator.js +69 -0
  42. package/dist/label-generator.js.map +1 -0
  43. package/dist/project.d.ts +29 -0
  44. package/dist/project.d.ts.map +1 -0
  45. package/dist/project.js +137 -0
  46. package/dist/project.js.map +1 -0
  47. package/dist/sample-sequences.d.ts +5 -0
  48. package/dist/sample-sequences.d.ts.map +1 -0
  49. package/dist/sample-sequences.js +199 -0
  50. package/dist/sample-sequences.js.map +1 -0
  51. package/dist/sample-streams.d.ts +2 -0
  52. package/dist/sample-streams.d.ts.map +1 -0
  53. package/dist/sample-streams.js +109 -0
  54. package/dist/sample-streams.js.map +1 -0
  55. package/dist/sequence.d.ts +21 -0
  56. package/dist/sequence.d.ts.map +1 -0
  57. package/dist/sequence.js +269 -0
  58. package/dist/sequence.js.map +1 -0
  59. package/dist/stream.d.ts +135 -0
  60. package/dist/stream.d.ts.map +1 -0
  61. package/dist/stream.js +779 -0
  62. package/dist/stream.js.map +1 -0
  63. package/dist/type.d.ts +73 -0
  64. package/dist/type.d.ts.map +1 -0
  65. package/dist/type.js +3 -0
  66. package/dist/type.js.map +1 -0
  67. package/eslint.config.js +44 -0
  68. package/package.json +50 -0
  69. package/src/asset-manager.ts +55 -0
  70. package/src/cli.ts +306 -0
  71. package/src/container-renderer.ts +190 -0
  72. package/src/expression-parser.test.ts +459 -0
  73. package/src/expression-parser.ts +199 -0
  74. package/src/ffmpeg.ts +1403 -0
  75. package/src/ffprobe.ts +29 -0
  76. package/src/html-parser.ts +221 -0
  77. package/src/html-project-parser.ts +1195 -0
  78. package/src/index.ts +9 -0
  79. package/src/label-generator.ts +74 -0
  80. package/src/project.ts +180 -0
  81. package/src/sample-sequences.ts +225 -0
  82. package/src/sample-streams.ts +142 -0
  83. package/src/sequence.ts +330 -0
  84. package/src/stream.ts +1012 -0
  85. package/src/type.ts +81 -0
  86. package/tsconfig.json +24 -0
@@ -0,0 +1,63 @@
1
+ import { Expression } from 'expr-eval';
2
+ export type TimeData = {
3
+ start: number;
4
+ end: number;
5
+ duration: number;
6
+ };
7
+ export type FragmentData = {
8
+ time: TimeData;
9
+ };
10
+ /**
11
+ * Context available for expression evaluation
12
+ * Contains fragment data with runtime timing information
13
+ */
14
+ export type ExpressionContext = {
15
+ fragments: Map<string, FragmentData>;
16
+ };
17
+ /**
18
+ * Compiled expression that can be evaluated with runtime context
19
+ */
20
+ export type CompiledExpression = {
21
+ original: string;
22
+ expression: Expression;
23
+ };
24
+ /**
25
+ * Parses a calc() expression into a compiled expression for later evaluation
26
+ *
27
+ * Supported syntax:
28
+ * - Fragment references: #fragment_id.property.path
29
+ * - Math operations: +, -, *, /, parentheses
30
+ * - Constants: numeric values
31
+ *
32
+ * Examples:
33
+ * - calc(-1 * #ending_screen.time.start)
34
+ * - calc(#intro.time.duration + 1000)
35
+ * - calc((#scene1.time.start + #scene2.time.end) / 2)
36
+ *
37
+ * @param expression - The expression string to parse
38
+ * @returns Compiled expression that can be evaluated later
39
+ */
40
+ export declare function parseExpression(expression: string): CompiledExpression;
41
+ /**
42
+ * Evaluates a compiled expression with runtime context
43
+ *
44
+ * @param compiled - Compiled expression from parseExpression()
45
+ * @param context - Context containing fragment data
46
+ * @returns Evaluated numeric result (in milliseconds)
47
+ */
48
+ export declare function evaluateCompiledExpression(compiled: CompiledExpression, context: ExpressionContext): number;
49
+ /**
50
+ * Checks if a string contains a calc() expression
51
+ * @param value - String to check
52
+ * @returns True if value contains calc()
53
+ */
54
+ export declare function isCalcExpression(value: string): boolean;
55
+ /**
56
+ * Parses a value into either a number or a compiled expression for later evaluation
57
+ * Use this during HTML parsing to compile expressions once
58
+ * @param value - Value to parse (number or calc expression string)
59
+ * @returns Number or CompiledExpression
60
+ */
61
+ export declare function parseValueLazy(value: number | string): number | CompiledExpression;
62
+ export declare function calculateFinalValue(value: number | CompiledExpression, context: ExpressionContext): number;
63
+ //# sourceMappingURL=expression-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression-parser.d.ts","sourceRoot":"","sources":["../src/expression-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAU,MAAM,WAAW,CAAC;AAE/C,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,CAoBtE;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,iBAAiB,GACzB,MAAM,CA8CR;AAgCD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,MAAM,GAAG,kBAAkB,CAkB7B;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,GAAG,kBAAkB,EAClC,OAAO,EAAE,iBAAiB,UAK3B"}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseExpression = parseExpression;
4
+ exports.evaluateCompiledExpression = evaluateCompiledExpression;
5
+ exports.isCalcExpression = isCalcExpression;
6
+ exports.parseValueLazy = parseValueLazy;
7
+ exports.calculateFinalValue = calculateFinalValue;
8
+ const expr_eval_1 = require("expr-eval");
9
+ /**
10
+ * Parses a calc() expression into a compiled expression for later evaluation
11
+ *
12
+ * Supported syntax:
13
+ * - Fragment references: #fragment_id.property.path
14
+ * - Math operations: +, -, *, /, parentheses
15
+ * - Constants: numeric values
16
+ *
17
+ * Examples:
18
+ * - calc(-1 * #ending_screen.time.start)
19
+ * - calc(#intro.time.duration + 1000)
20
+ * - calc((#scene1.time.start + #scene2.time.end) / 2)
21
+ *
22
+ * @param expression - The expression string to parse
23
+ * @returns Compiled expression that can be evaluated later
24
+ */
25
+ function parseExpression(expression) {
26
+ const parser = new expr_eval_1.Parser();
27
+ // Transform expression to replace fragment references with variable names
28
+ // Convert: calc(-1 * #ending_screen.time.start)
29
+ // To: -1 * ending_screen_time_start
30
+ const transformed = transformExpressionToVariables(expression);
31
+ try {
32
+ // Parse into Expression object
33
+ const expr = parser.parse(transformed);
34
+ return {
35
+ original: expression,
36
+ expression: expr,
37
+ };
38
+ }
39
+ catch (error) {
40
+ throw new Error(`Failed to parse expression "${expression}": ${error instanceof Error ? error.message : String(error)}`);
41
+ }
42
+ }
43
+ /**
44
+ * Evaluates a compiled expression with runtime context
45
+ *
46
+ * @param compiled - Compiled expression from parseExpression()
47
+ * @param context - Context containing fragment data
48
+ * @returns Evaluated numeric result (in milliseconds)
49
+ */
50
+ function evaluateCompiledExpression(compiled, context) {
51
+ // Build evaluation context by resolving all fragment references
52
+ // Convert fragment references to flat variable names
53
+ const evalContext = {};
54
+ // Extract all fragment references from the original expression
55
+ const fragmentRefs = compiled.original.matchAll(/#(\w+)\.([\w.]+?)(?=\s|[+\-*/)]|$)/g);
56
+ for (const match of fragmentRefs) {
57
+ const id = match[1];
58
+ const prop = match[2];
59
+ const varName = `${id}_${prop.replace(/\./g, '_')}`;
60
+ // Resolve fragment value
61
+ const fragment = context.fragments.get(id);
62
+ if (!fragment) {
63
+ throw new Error(`Fragment with id "${id}" not found in expression: ${compiled.original}`);
64
+ }
65
+ // Navigate property path (e.g., "time.start" -> fragment.time.start)
66
+ const parts = prop.split('.');
67
+ let value = fragment;
68
+ for (const part of parts) {
69
+ value = value[part];
70
+ if (value === undefined) {
71
+ throw new Error(`Property "${prop}" not found on fragment "${id}" in expression: ${compiled.original}`);
72
+ }
73
+ }
74
+ evalContext[varName] = value;
75
+ }
76
+ try {
77
+ // Evaluate with resolved context
78
+ return compiled.expression.evaluate(evalContext);
79
+ }
80
+ catch (error) {
81
+ throw new Error(`Failed to evaluate expression "${compiled.original}": ${error instanceof Error ? error.message : String(error)}`);
82
+ }
83
+ }
84
+ /**
85
+ * Transforms calc() expression syntax to use variable names instead of fragment references
86
+ * and converts time units to milliseconds
87
+ * @param expression - Original expression
88
+ * @returns Transformed expression
89
+ *
90
+ * Example: calc(url(#ending_screen.time.start) + 5s)
91
+ * -> ending_screen_time_start + 5000
92
+ */
93
+ function transformExpressionToVariables(expression) {
94
+ let transformed = expression
95
+ // Remove calc() wrapper
96
+ .replace(/calc\(/g, '(')
97
+ // Convert fragment references: url(#id.prop.path) -> id_prop_path
98
+ .replace(/url\(#(\w+)\.([\w.]+?)\)/g, (_, id, prop) => {
99
+ return `${id}_${prop.replace(/\./g, '_')}`;
100
+ })
101
+ // Convert time units to milliseconds
102
+ // Match numbers with 's' suffix (seconds): 5s -> 5000
103
+ .replace(/(\d+(?:\.\d+)?)s(?!\w)/g, (_, num) => {
104
+ return String(parseFloat(num) * 1000);
105
+ })
106
+ // Match numbers with 'ms' suffix (milliseconds): 5000ms -> 5000
107
+ .replace(/(\d+(?:\.\d+)?)ms(?!\w)/g, (_, num) => {
108
+ return String(parseFloat(num));
109
+ });
110
+ return transformed;
111
+ }
112
+ /**
113
+ * Checks if a string contains a calc() expression
114
+ * @param value - String to check
115
+ * @returns True if value contains calc()
116
+ */
117
+ function isCalcExpression(value) {
118
+ return typeof value === 'string' && value.trim().startsWith('calc(');
119
+ }
120
+ /**
121
+ * Parses a value into either a number or a compiled expression for later evaluation
122
+ * Use this during HTML parsing to compile expressions once
123
+ * @param value - Value to parse (number or calc expression string)
124
+ * @returns Number or CompiledExpression
125
+ */
126
+ function parseValueLazy(value) {
127
+ if (typeof value === 'number') {
128
+ return value;
129
+ }
130
+ if (isCalcExpression(value)) {
131
+ return parseExpression(value);
132
+ }
133
+ // Try to parse as plain number
134
+ const parsed = parseFloat(value);
135
+ if (!isNaN(parsed)) {
136
+ return parsed;
137
+ }
138
+ throw new Error(`Invalid value: "${value}". Expected number or calc() expression`);
139
+ }
140
+ function calculateFinalValue(value, context) {
141
+ return typeof value === 'number'
142
+ ? value
143
+ : evaluateCompiledExpression(value, context);
144
+ }
145
+ //# sourceMappingURL=expression-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression-parser.js","sourceRoot":"","sources":["../src/expression-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,375 @@
1
+ import { Project } from './project';
2
+ export type Label = {
3
+ tag: string;
4
+ isAudio: boolean;
5
+ };
6
+ /**
7
+ * Checks if FFmpeg is installed and available in the system PATH
8
+ * @throws Error if FFmpeg is not found
9
+ */
10
+ export declare function checkFFmpegInstalled(): Promise<void>;
11
+ export type Millisecond = number;
12
+ /**
13
+ * Helper function to format milliseconds for FFmpeg time parameters
14
+ * @param value - Time value in milliseconds
15
+ * @returns Formatted string with 'ms' suffix (e.g., "1500ms")
16
+ */
17
+ export declare function ms(value: Millisecond): string;
18
+ export declare class Filter {
19
+ private inputs;
20
+ outputs: Label[];
21
+ body: string;
22
+ constructor(inputs: Label[], outputs: Label[], body: string);
23
+ render(): string;
24
+ }
25
+ /**
26
+ * Generates the complete ffmpeg command for rendering the project
27
+ */
28
+ export declare function makeFFmpegCommand(project: Project, filterComplex: string, outputName: string, preset?: 'ultrafast' | 'medium'): string;
29
+ export declare const runFFMpeg: (ffmpegCommand: string) => Promise<void>;
30
+ /**
31
+ * Creates a concat filter
32
+ * Automatically determines the number of segments (n) and stream counts (v, a) from input labels
33
+ * and generates appropriate output labels
34
+ * @param inputs - Array of input stream labels
35
+ * @returns Filter with auto-generated outputs
36
+ */
37
+ export declare function makeConcat(inputs: Label[]): Filter;
38
+ /**
39
+ * Creates an xfade (crossfade) filter for video streams
40
+ * Note: xfade only works with video, not audio
41
+ * @param input1 - First video input stream label
42
+ * @param input2 - Second video input stream label
43
+ * @param options - Transition parameters
44
+ * @returns Filter with auto-generated video output
45
+ */
46
+ export declare function makeXFade(inputs: Label[], options: {
47
+ duration: Millisecond;
48
+ offset: Millisecond;
49
+ transition?: string;
50
+ }): Filter;
51
+ /**
52
+ * Creates a null filter (passthrough)
53
+ * @param input - Input stream label
54
+ */
55
+ export declare function makeNull(inputs: Label[]): Filter;
56
+ export declare function makeOverlay(inputs: Label[], options?: {
57
+ x?: string | number;
58
+ y?: string | number;
59
+ }): Filter;
60
+ export declare function makeFps(inputs: Label[], fps: number): Filter;
61
+ export declare function makeScale(inputs: Label[], options: {
62
+ width: number | string;
63
+ height: number | string;
64
+ flags?: string;
65
+ }): Filter;
66
+ /**
67
+ * Creates a split filter (splits one input into multiple outputs)
68
+ * @param input - Input stream label
69
+ * @param outputLabels - Array of output stream labels
70
+ */
71
+ export declare function makeSplit(inputs: Label[]): Filter;
72
+ export declare function makeTranspose(inputs: Label[], direction: 0 | 1 | 2 | 3): Filter;
73
+ /**
74
+ * Creates a trim filter to cut streams to a specific time range
75
+ * @param inputs - Input stream labels (video or audio)
76
+ * @param start - Start time in milliseconds
77
+ * @param end - End time in milliseconds
78
+ * @returns Filter with trimmed output
79
+ */
80
+ export declare function makeTrim(inputs: Label[], start: Millisecond, end: Millisecond): Filter;
81
+ /**
82
+ * Creates a tpad/apad filter to add temporal padding (frames/silence)
83
+ * @param inputs - Input stream labels (video or audio)
84
+ * @param options - Padding parameters
85
+ * - start: Duration to add at the beginning (in milliseconds, default: 0)
86
+ * - stop: Duration to add at the end (in milliseconds, default: 0)
87
+ * - start_mode: 'clone' (duplicate frames) or 'add' (colored frames/silence, default)
88
+ * - stop_mode: 'clone' (duplicate frames) or 'add' (colored frames/silence, default)
89
+ * - color: Color of added frames (video only, e.g., 'black', '#00FF00', default: 'black')
90
+ */
91
+ export declare function makeTPad(inputs: Label[], options?: {
92
+ start?: Millisecond;
93
+ stop?: Millisecond;
94
+ color?: string;
95
+ startMode?: 'clone' | 'add';
96
+ stopMode?: 'clone' | 'add';
97
+ }): Filter;
98
+ /**
99
+ * Creates a pad filter to add borders/letterboxing
100
+ * @param inputs - Input stream labels (must be video)
101
+ * @param width - Output width (can be expression like 'iw' or number)
102
+ * @param height - Output height (can be expression like 'ih' or number)
103
+ * @param x - X position (default: center using '(ow-iw)/2')
104
+ * @param y - Y position (default: center using '(oh-ih)/2')
105
+ * @param color - Background color (default: 'black')
106
+ */
107
+ export declare function makePad(inputs: Label[], options: {
108
+ width: number | string;
109
+ height: number | string;
110
+ x?: string;
111
+ y?: string;
112
+ color?: string;
113
+ }): Filter;
114
+ /**
115
+ * Creates a crop filter to cut video to specific dimensions
116
+ * @param inputs - Input stream labels (must be video)
117
+ * @param options - Crop parameters
118
+ * - width: Output width (can be expression or number)
119
+ * - height: Output height (can be expression or number)
120
+ * - x: X position to start crop (default: center using '(in_w-out_w)/2')
121
+ * - y: Y position to start crop (default: center using '(in_h-out_h)/2')
122
+ */
123
+ export declare function makeCrop(inputs: Label[], options: {
124
+ width: number | string;
125
+ height: number | string;
126
+ x?: string;
127
+ y?: string;
128
+ }): Filter;
129
+ /**
130
+ * Creates an eq (equalization) filter for color correction
131
+ * @param inputs - Input stream labels (must be video)
132
+ * @param options - Color adjustment parameters
133
+ * - brightness: -1.0 to 1.0 (default: 0)
134
+ * - contrast: -1000 to 1000 (default: 1.0)
135
+ * - saturation: 0 to 3 (default: 1.0)
136
+ * - gamma: 0.1 to 10 (default: 1.0)
137
+ */
138
+ export declare function makeEq(inputs: Label[], options: {
139
+ brightness?: number;
140
+ contrast?: number;
141
+ saturation?: number;
142
+ gamma?: number;
143
+ }): Filter;
144
+ /**
145
+ * Creates a colorchannelmixer filter for advanced color adjustment
146
+ * @param inputs - Input stream labels (must be video)
147
+ * @param options - Color channel mixing parameters
148
+ * - rr: Red contribution to red channel (-2 to 2, default: 1)
149
+ * - rg: Green contribution to red channel (-2 to 2, default: 0)
150
+ * - rb: Blue contribution to red channel (-2 to 2, default: 0)
151
+ * - ra: Alpha contribution to red channel (-2 to 2, default: 0)
152
+ * - gr: Red contribution to green channel (-2 to 2, default: 0)
153
+ * - gg: Green contribution to green channel (-2 to 2, default: 1)
154
+ * - gb: Blue contribution to green channel (-2 to 2, default: 0)
155
+ * - ga: Alpha contribution to green channel (-2 to 2, default: 0)
156
+ * - br: Red contribution to blue channel (-2 to 2, default: 0)
157
+ * - bg: Green contribution to blue channel (-2 to 2, default: 0)
158
+ * - bb: Blue contribution to blue channel (-2 to 2, default: 1)
159
+ * - ba: Alpha contribution to blue channel (-2 to 2, default: 0)
160
+ */
161
+ export declare function makeColorChannelMixer(inputs: Label[], options?: {
162
+ rr?: number;
163
+ rg?: number;
164
+ rb?: number;
165
+ ra?: number;
166
+ gr?: number;
167
+ gg?: number;
168
+ gb?: number;
169
+ ga?: number;
170
+ br?: number;
171
+ bg?: number;
172
+ bb?: number;
173
+ ba?: number;
174
+ }): Filter;
175
+ /**
176
+ * Creates a curves filter for color grading (similar to Photoshop curves)
177
+ * @param inputs - Input stream labels (must be video)
178
+ * @param options - Curves parameters
179
+ * - preset: Preset curve name (e.g., 'darker', 'lighter', 'increase_contrast', 'vintage', etc.)
180
+ * - master: Master curve points (affects all channels, e.g., '0/0 0.5/0.6 1/1')
181
+ * - red: Red channel curve points
182
+ * - green: Green channel curve points
183
+ * - blue: Blue channel curve points
184
+ * - all: Apply same curve to all RGB channels
185
+ */
186
+ export declare function makeCurves(inputs: Label[], options?: {
187
+ preset?: string;
188
+ master?: string;
189
+ red?: string;
190
+ green?: string;
191
+ blue?: string;
192
+ all?: string;
193
+ }): Filter;
194
+ /**
195
+ * Creates a vignette filter to darken the corners/edges
196
+ * @param inputs - Input stream labels (must be video)
197
+ * @param options - Vignette parameters
198
+ * - angle: Lens angle (0 to PI/2, default: PI/5)
199
+ * - x0: X coordinate of vignette center (0 to 1, default: w/2)
200
+ * - y0: Y coordinate of vignette center (0 to 1, default: h/2)
201
+ * - mode: Vignette mode ('forward' or 'backward', default: 'forward')
202
+ * - eval: When to evaluate expressions ('init' or 'frame', default: 'init')
203
+ */
204
+ export declare function makeVignette(inputs: Label[], options?: {
205
+ angle?: string;
206
+ x0?: string;
207
+ y0?: string;
208
+ mode?: 'forward' | 'backward';
209
+ eval?: 'init' | 'frame';
210
+ }): Filter;
211
+ /**
212
+ * Creates a colorbalance filter to adjust colors in shadows, midtones, and highlights
213
+ * @param inputs - Input stream labels (must be video)
214
+ * @param options - Color balance parameters
215
+ * - rs: Red shift for shadows (-1 to 1, default: 0)
216
+ * - gs: Green shift for shadows (-1 to 1, default: 0)
217
+ * - bs: Blue shift for shadows (-1 to 1, default: 0)
218
+ * - rm: Red shift for midtones (-1 to 1, default: 0)
219
+ * - gm: Green shift for midtones (-1 to 1, default: 0)
220
+ * - bm: Blue shift for midtones (-1 to 1, default: 0)
221
+ * - rh: Red shift for highlights (-1 to 1, default: 0)
222
+ * - gh: Green shift for highlights (-1 to 1, default: 0)
223
+ * - bh: Blue shift for highlights (-1 to 1, default: 0)
224
+ */
225
+ export declare function makeColorBalance(inputs: Label[], options?: {
226
+ rs?: number;
227
+ gs?: number;
228
+ bs?: number;
229
+ rm?: number;
230
+ gm?: number;
231
+ bm?: number;
232
+ rh?: number;
233
+ gh?: number;
234
+ bh?: number;
235
+ }): Filter;
236
+ /**
237
+ * Creates a Gaussian blur filter
238
+ * @param inputs - Input stream labels (must be video)
239
+ * @param sigma - Blur strength (0.01 to 1024, default: 1.0)
240
+ * @param steps - Number of blur steps (1 to 6, default: 1, higher = smoother but slower)
241
+ */
242
+ export declare function makeGblur(inputs: Label[], options?: {
243
+ sigma?: number;
244
+ steps?: number;
245
+ }): Filter;
246
+ /**
247
+ * Creates a box blur filter (simpler, faster blur)
248
+ * @param inputs - Input stream labels (must be video)
249
+ * @param options - Blur parameters
250
+ * - luma_radius (lr): Horizontal luma blur radius (0 to min(w,h)/2)
251
+ * - luma_power (lp): Number of times to apply luma blur (0 to 2)
252
+ * - chroma_radius (cr): Horizontal chroma blur radius (0 to min(w,h)/2)
253
+ * - chroma_power (cp): Number of times to apply chroma blur (0 to 2)
254
+ */
255
+ export declare function makeBoxblur(inputs: Label[], options?: {
256
+ luma_radius?: number;
257
+ luma_power?: number;
258
+ chroma_radius?: number;
259
+ chroma_power?: number;
260
+ }): Filter;
261
+ /**
262
+ * Creates an unsharp filter (sharpen or blur)
263
+ * @param inputs - Input stream labels (must be video)
264
+ * @param options - Sharpening parameters
265
+ * - luma_amount: Luma sharpening amount (-2 to 5, default: 1.0, negative = blur)
266
+ * - chroma_amount: Chroma sharpening amount (-2 to 5, default: 0)
267
+ */
268
+ export declare function makeUnsharp(inputs: Label[], options?: {
269
+ luma_amount?: number;
270
+ chroma_amount?: number;
271
+ }): Filter;
272
+ /**
273
+ * Creates a hue adjustment filter
274
+ * @param inputs - Input stream labels (must be video)
275
+ * @param options - Hue adjustment parameters
276
+ * - hue: Hue angle in degrees (0 to 360)
277
+ * - saturation: Saturation multiplier (-10 to 10, default: 1.0)
278
+ * - brightness: Brightness adjustment (-10 to 10, default: 0)
279
+ */
280
+ export declare function makeHue(inputs: Label[], options?: {
281
+ hue?: number;
282
+ saturation?: number;
283
+ brightness?: number;
284
+ }): Filter;
285
+ /**
286
+ * Creates a horizontal flip filter (mirrors video left-right)
287
+ * Note: Only works with video streams
288
+ */
289
+ export declare function makeHflip(inputs: Label[]): Filter;
290
+ /**
291
+ * Creates a vertical flip filter (mirrors video top-bottom)
292
+ * Note: Only works with video streams
293
+ */
294
+ export declare function makeVflip(inputs: Label[]): Filter;
295
+ /**
296
+ * Creates a chromakey filter for green/blue screen removal
297
+ * @param inputs - Input stream labels (must be video)
298
+ * @param options - Chromakey parameters
299
+ * - color: Color to key out (e.g., 'green', '0x00FF00', '#00FF00')
300
+ * - similarity: How similar colors need to be to match (0.01 to 1.0, default: 0.01)
301
+ * - blend: Blend percentage for edges (0.0 to 1.0, default: 0.0)
302
+ */
303
+ export declare function makeChromakey(inputs: Label[], options: {
304
+ color: string;
305
+ similarity?: number;
306
+ blend?: number;
307
+ }): Filter;
308
+ /**
309
+ * Creates a despill filter to remove color spill from chromakey
310
+ * @param inputs - Input stream labels (must be video)
311
+ * @param options - Despill parameters
312
+ * - type: Color to despill ('green' or 'blue', default: 'green')
313
+ * - mix: Mix factor (0.0 to 1.0, default: 0.5)
314
+ * - expand: Expand factor (0.0 to 1.0, default: 0.0)
315
+ */
316
+ export declare function makeDespill(inputs: Label[], options?: {
317
+ type?: 'green' | 'blue';
318
+ mix?: number;
319
+ expand?: number;
320
+ }): Filter;
321
+ export declare function makeFade(inputs: Label[], options: {
322
+ fades: Array<{
323
+ type: 'in' | 'out';
324
+ startTime: Millisecond;
325
+ duration: Millisecond;
326
+ color?: string;
327
+ curve?: string;
328
+ }>;
329
+ }): Filter;
330
+ /**
331
+ * Creates a color source filter to generate blank video
332
+ * @param options - Video parameters
333
+ * - duration: Duration in milliseconds
334
+ * - width: Video width in pixels
335
+ * - height: Video height in pixels
336
+ * - fps: Frame rate (default: 30)
337
+ * - color: Color (default: 'black', supports alpha with format '#RRGGBBAA')
338
+ * @returns Filter with video output
339
+ */
340
+ export declare function makeColor(options: {
341
+ duration: Millisecond;
342
+ width: number;
343
+ height: number;
344
+ fps?: number;
345
+ color?: string;
346
+ }): Filter;
347
+ /**
348
+ * Creates an anullsrc filter to generate silent audio
349
+ * @param options - Audio parameters
350
+ * - duration: Duration in milliseconds
351
+ * - channel_layout: Audio channel layout (default: 'stereo')
352
+ * - sample_rate: Sample rate in Hz (default: 48000)
353
+ * @returns Filter with audio output
354
+ */
355
+ export declare function makeAnullsrc(options: {
356
+ duration: Millisecond;
357
+ channel_layout?: string;
358
+ sample_rate?: number;
359
+ }): Filter;
360
+ /**
361
+ * Creates an amix filter to mix multiple audio streams
362
+ * @param inputs - Input stream labels (must all be audio)
363
+ * @param options - Mix parameters
364
+ * - duration: Output duration mode ('longest', 'shortest', 'first', default: 'longest')
365
+ * - dropout_transition: Transition time when input ends in seconds (default: 2)
366
+ * - weights: Array of weights for each input (e.g., [1, 0.5] makes second input quieter)
367
+ * - normalize: If true, automatically normalize weights to prevent clipping (default: true)
368
+ */
369
+ export declare function makeAmix(inputs: Label[], options?: {
370
+ duration?: 'longest' | 'shortest' | 'first';
371
+ dropout_transition?: number;
372
+ weights?: number[];
373
+ normalize?: boolean;
374
+ }): Filter;
375
+ //# sourceMappingURL=ffmpeg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ffmpeg.d.ts","sourceRoot":"","sources":["../src/ffmpeg.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,MAAM,KAAK,GAAG;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CA0C1D;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC;;;;GAIG;AACH,wBAAgB,EAAE,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAE7C;AAED,qBAAa,MAAM;IAEf,OAAO,CAAC,MAAM;IACP,OAAO,EAAE,KAAK,EAAE;IAChB,IAAI,EAAE,MAAM;gBAFX,MAAM,EAAE,KAAK,EAAE,EAChB,OAAO,EAAE,KAAK,EAAE,EAChB,IAAI,EAAE,MAAM;IAGd,MAAM,IAAI,MAAM;CAcxB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,WAAW,GAAG,QAAmB,GACxC,MAAM,CA0DR;AAED,eAAO,MAAM,SAAS,GAAU,eAAe,MAAM,kBAwCpD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAoElD;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,EAAE;IACP,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,MAAM,CAiCR;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAmBhD;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,CAAC,EAAE;IACR,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACrB,GACA,MAAM,CAqCR;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAkB5D;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3E,MAAM,CAwBR;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAiBjD;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,KAAK,EAAE,EACf,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GACvB,MAAM,CAcR;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,WAAW,GACf,MAAM,CAeR;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;CACvB,GACL,MAAM,CAqDR;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,EAAE;IACP,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,MAAM,CAuBR;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,EAAE;IACP,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ,GACA,MAAM,CAsBR;AAED;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CACpB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,EAAE;IACP,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,MAAM,CA0BR;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE;IACP,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;CACR,GACL,MAAM,CAkCR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACT,GACL,MAAM,CAyBR;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACpB,GACL,MAAM,CAyBR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE;IACP,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;CACR,GACL,MAAM,CA6BR;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CACX,GACL,MAAM,CAkBR;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CAClB,GACL,MAAM,CAwBR;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACnB,GACL,MAAM,CAsBR;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CAChB,GACL,MAAM,CAsBR;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAejD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAejD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,EAAE;IACP,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,MAAM,CAsBR;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACZ,GACL,MAAM,CAuBR;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,EAAE;IACP,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC;QACnB,SAAS,EAAE,WAAW,CAAC;QACvB,QAAQ,EAAE,WAAW,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ,GACA,MAAM,CAoCR;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE;IACjC,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAqBT;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,QAAQ,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAcT;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CAChB,GACL,MAAM,CAgDR"}