@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.
- package/.prettierrc +8 -0
- package/Makefile +69 -0
- package/dist/asset-manager.d.ts +16 -0
- package/dist/asset-manager.d.ts.map +1 -0
- package/dist/asset-manager.js +50 -0
- package/dist/asset-manager.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +257 -0
- package/dist/cli.js.map +1 -0
- package/dist/container-renderer.d.ts +21 -0
- package/dist/container-renderer.d.ts.map +1 -0
- package/dist/container-renderer.js +149 -0
- package/dist/container-renderer.js.map +1 -0
- package/dist/expression-parser.d.ts +63 -0
- package/dist/expression-parser.d.ts.map +1 -0
- package/dist/expression-parser.js +145 -0
- package/dist/expression-parser.js.map +1 -0
- package/dist/ffmpeg.d.ts +375 -0
- package/dist/ffmpeg.d.ts.map +1 -0
- package/dist/ffmpeg.js +997 -0
- package/dist/ffmpeg.js.map +1 -0
- package/dist/ffprobe.d.ts +2 -0
- package/dist/ffprobe.d.ts.map +1 -0
- package/dist/ffprobe.js +31 -0
- package/dist/ffprobe.js.map +1 -0
- package/dist/html-parser.d.ts +56 -0
- package/dist/html-parser.d.ts.map +1 -0
- package/dist/html-parser.js +208 -0
- package/dist/html-parser.js.map +1 -0
- package/dist/html-project-parser.d.ts +169 -0
- package/dist/html-project-parser.d.ts.map +1 -0
- package/dist/html-project-parser.js +954 -0
- package/dist/html-project-parser.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/label-generator.d.ts +35 -0
- package/dist/label-generator.d.ts.map +1 -0
- package/dist/label-generator.js +69 -0
- package/dist/label-generator.js.map +1 -0
- package/dist/project.d.ts +29 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +137 -0
- package/dist/project.js.map +1 -0
- package/dist/sample-sequences.d.ts +5 -0
- package/dist/sample-sequences.d.ts.map +1 -0
- package/dist/sample-sequences.js +199 -0
- package/dist/sample-sequences.js.map +1 -0
- package/dist/sample-streams.d.ts +2 -0
- package/dist/sample-streams.d.ts.map +1 -0
- package/dist/sample-streams.js +109 -0
- package/dist/sample-streams.js.map +1 -0
- package/dist/sequence.d.ts +21 -0
- package/dist/sequence.d.ts.map +1 -0
- package/dist/sequence.js +269 -0
- package/dist/sequence.js.map +1 -0
- package/dist/stream.d.ts +135 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +779 -0
- package/dist/stream.js.map +1 -0
- package/dist/type.d.ts +73 -0
- package/dist/type.d.ts.map +1 -0
- package/dist/type.js +3 -0
- package/dist/type.js.map +1 -0
- package/eslint.config.js +44 -0
- package/package.json +50 -0
- package/src/asset-manager.ts +55 -0
- package/src/cli.ts +306 -0
- package/src/container-renderer.ts +190 -0
- package/src/expression-parser.test.ts +459 -0
- package/src/expression-parser.ts +199 -0
- package/src/ffmpeg.ts +1403 -0
- package/src/ffprobe.ts +29 -0
- package/src/html-parser.ts +221 -0
- package/src/html-project-parser.ts +1195 -0
- package/src/index.ts +9 -0
- package/src/label-generator.ts +74 -0
- package/src/project.ts +180 -0
- package/src/sample-sequences.ts +225 -0
- package/src/sample-streams.ts +142 -0
- package/src/sequence.ts +330 -0
- package/src/stream.ts +1012 -0
- package/src/type.ts +81 -0
- 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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"}
|
package/dist/ffmpeg.d.ts
ADDED
|
@@ -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":"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"}
|