cerevox 0.2.0 → 0.3.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"videokit.d.ts","sourceRoot":"","sources":["../../src/utils/videokit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,587 @@
1
+ "use strict";
2
+ // videokit-ts: A tiny TypeScript library for AI-driven video assembly via FFmpeg
3
+ // ---------------------------------------------------------------------------------
4
+ // Features
5
+ // - Strongly-typed project spec (tracks/assets/effects/subtitles)
6
+ // - Zod runtime validation
7
+ // - Subtitles rendering with 3 modes: SRT (basic), ASS+libass (rich), drawtext (no libass)
8
+ // - Optional music ducking (sidechaincompress)
9
+ // - Compiler that turns JSON spec into ffmpeg args (+ extra files to write)
10
+ // - Helper to auto-detect libass, write files, and spawn ffmpeg
11
+ //
12
+ // Install peer deps:
13
+ // npm i zod
14
+ // # ffmpeg must be installed in PATH
15
+ //
16
+ // Optional runtime helpers (Node only):
17
+ // npm i execa # if you prefer execa over child_process
18
+ //
19
+ // Usage (Node):
20
+ // import {
21
+ // validateProject, compileToFfmpeg, runFfmpeg,
22
+ // hasLibass, type VideoProject
23
+ // } from "videokit-ts";
24
+ //
25
+ // const spec: VideoProject = { ... };
26
+ // const validated = validateProject(spec);
27
+ // const compiled = compileToFfmpeg(validated, { subtitleStrategy: "auto", outFile: "out.mp4" });
28
+ // await runFfmpeg(compiled);
29
+ //
30
+ // ---------------------------------------------------------------------------------
31
+ var __importDefault = (this && this.__importDefault) || function (mod) {
32
+ return (mod && mod.__esModule) ? mod : { "default": mod };
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.zVideoProject = void 0;
36
+ exports.validateProject = validateProject;
37
+ exports.hasLibass = hasLibass;
38
+ exports.compileToFfmpeg = compileToFfmpeg;
39
+ exports.runFfmpeg = runFfmpeg;
40
+ exports.escapeDrawtextText = escapeDrawtextText;
41
+ const zod_1 = require("zod");
42
+ // Node helpers for writing files and spawning ffmpeg (guarded for browser builds)
43
+ const fs_1 = __importDefault(require("fs"));
44
+ const path_1 = __importDefault(require("path"));
45
+ const child_process_1 = require("child_process");
46
+ const shell_quote_1 = require("shell-quote");
47
+ // ---- Zod ----
48
+ const zResolution = zod_1.z.object({
49
+ width: zod_1.z.number().int().min(16),
50
+ height: zod_1.z.number().int().min(16),
51
+ });
52
+ const zSettings = zod_1.z.object({
53
+ fps: zod_1.z.number().positive(),
54
+ resolution: zResolution,
55
+ pixelFormat: zod_1.z.string(),
56
+ sampleRate: zod_1.z.number().int().positive(),
57
+ channels: zod_1.z.number().int().min(1),
58
+ timebase: zod_1.z.string(),
59
+ });
60
+ const zAsset = zod_1.z.object({
61
+ id: zod_1.z.string(),
62
+ type: zod_1.z.enum(['video', 'audio', 'image']),
63
+ uri: zod_1.z.string(),
64
+ durationMs: zod_1.z.number().int().optional(),
65
+ fps: zod_1.z.number().optional(),
66
+ });
67
+ const zEffect = zod_1.z.object({
68
+ name: zod_1.z.string(),
69
+ params: zod_1.z.record(zod_1.z.unknown()).optional(),
70
+ });
71
+ const zTransition = zod_1.z.object({
72
+ name: zod_1.z.string(),
73
+ durationMs: zod_1.z.number().int().min(1),
74
+ });
75
+ const zTransform = zod_1.z.object({
76
+ scale: zod_1.z.number().optional(),
77
+ rotate: zod_1.z.number().optional(),
78
+ anchor: zod_1.z
79
+ .enum(['center', 'topleft', 'topright', 'bottomleft', 'bottomright'])
80
+ .optional(),
81
+ position: zod_1.z.object({ x: zod_1.z.number(), y: zod_1.z.number() }).optional(),
82
+ fit: zod_1.z.enum(['contain', 'cover', 'stretch']).optional(),
83
+ });
84
+ const zClip = zod_1.z.object({
85
+ id: zod_1.z.string(),
86
+ assetId: zod_1.z.string(),
87
+ startMs: zod_1.z.number().int().min(0),
88
+ inMs: zod_1.z.number().int().min(0),
89
+ durationMs: zod_1.z.number().int().min(1),
90
+ transform: zTransform.optional(),
91
+ speed: zod_1.z.number().positive().optional(),
92
+ effects: zod_1.z.array(zEffect).optional(),
93
+ transitionIn: zTransition.optional(),
94
+ transitionOut: zTransition.optional(),
95
+ });
96
+ const zTrack = zod_1.z.object({
97
+ id: zod_1.z.string(),
98
+ type: zod_1.z.enum(['video', 'audio', 'subtitle']),
99
+ muted: zod_1.z.boolean().optional(),
100
+ opacity: zod_1.z.number().min(0).max(1).optional(),
101
+ clips: zod_1.z.array(zClip),
102
+ });
103
+ const zDucking = zod_1.z.object({
104
+ id: zod_1.z.string(),
105
+ musicTrackId: zod_1.z.string(),
106
+ dialogTrackId: zod_1.z.string(),
107
+ params: zod_1.z
108
+ .object({
109
+ threshold: zod_1.z.number().optional(),
110
+ ratio: zod_1.z.number().optional(),
111
+ attackMs: zod_1.z.number().optional(),
112
+ releaseMs: zod_1.z.number().optional(),
113
+ musicPreGain: zod_1.z.number().optional(),
114
+ })
115
+ .optional(),
116
+ });
117
+ const zMix = zod_1.z.object({ ducking: zod_1.z.array(zDucking).optional() });
118
+ const zSubtitle = zod_1.z.object({
119
+ id: zod_1.z.string(),
120
+ text: zod_1.z.string(),
121
+ startMs: zod_1.z.number().int().min(0),
122
+ endMs: zod_1.z.number().int().min(1),
123
+ audio: zod_1.z.string().optional(),
124
+ style: zod_1.z
125
+ .object({
126
+ fontFamily: zod_1.z.string().optional(),
127
+ fontSize: zod_1.z.number().optional(),
128
+ bold: zod_1.z.boolean().optional(),
129
+ color: zod_1.z.string().optional(),
130
+ outlineColor: zod_1.z.string().optional(),
131
+ outlineWidth: zod_1.z.number().optional(),
132
+ align: zod_1.z.enum(['left', 'center', 'right']).optional(),
133
+ position: zod_1.z.object({ x: zod_1.z.number(), y: zod_1.z.number() }).optional(),
134
+ })
135
+ .optional(),
136
+ });
137
+ const zExport = zod_1.z.object({
138
+ container: zod_1.z.string(),
139
+ videoCodec: zod_1.z.string(),
140
+ crf: zod_1.z.number().int().optional(),
141
+ preset: zod_1.z.string().optional(),
142
+ audioCodec: zod_1.z.string(),
143
+ audioBitrate: zod_1.z.string().optional(),
144
+ outFile: zod_1.z.string().optional(),
145
+ });
146
+ exports.zVideoProject = zod_1.z.object({
147
+ version: zod_1.z.string(),
148
+ project: zod_1.z.object({ name: zod_1.z.string(), id: zod_1.z.string() }),
149
+ settings: zSettings,
150
+ assets: zod_1.z.array(zAsset).min(1),
151
+ timeline: zod_1.z.object({ tracks: zod_1.z.array(zTrack).min(1), mix: zMix.optional() }),
152
+ subtitles: zod_1.z.array(zSubtitle).optional(),
153
+ export: zExport,
154
+ });
155
+ function validateProject(json) {
156
+ const parsed = exports.zVideoProject.parse(json);
157
+ // TODO: semantic checks for references, overlaps, bounds, etc.
158
+ return parsed;
159
+ }
160
+ // ======================================
161
+ // 2) Subtitles helpers (SRT/ASS/drawtext)
162
+ // ======================================
163
+ function pad2(n) {
164
+ return String(n).padStart(2, '0');
165
+ }
166
+ function pad3(n) {
167
+ return String(n).padStart(3, '0');
168
+ }
169
+ function msToSrtTime(ms) {
170
+ const h = Math.floor(ms / 3600000), m = Math.floor((ms % 3600000) / 60000), s = Math.floor((ms % 60000) / 1000), msRem = Math.floor(ms % 1000);
171
+ return `${pad2(h)}:${pad2(m)}:${pad2(s)},${pad3(msRem)}`;
172
+ }
173
+ function composeSrtFromItems(subs) {
174
+ const sorted = [...subs].sort((a, b) => a.startMs - b.startMs);
175
+ return sorted
176
+ .map((s, i) => `${i + 1}\n${msToSrtTime(Math.max(0, s.startMs))} --> ${msToSrtTime(Math.max(s.endMs, s.startMs + 1))}\n${s.text}\n`)
177
+ .join('\n');
178
+ }
179
+ function hexToAssColor(hex) {
180
+ if (!hex)
181
+ return undefined;
182
+ const m = /^#?([0-9a-fA-F]{6})$/.exec(hex);
183
+ if (!m)
184
+ return undefined;
185
+ const rr = m[1].slice(0, 2), gg = m[1].slice(2, 4), bb = m[1].slice(4, 6);
186
+ return `&H00${bb}${gg}${rr}`; // &HAABBGGRR
187
+ }
188
+ function composeAssFromItems(subs, defaultStyle) {
189
+ const s = defaultStyle || {};
190
+ const font = s.fontFamily ?? 'Arial';
191
+ const size = s.fontSize ?? 42;
192
+ const c = hexToAssColor(s.color ?? '#FFFFFF') ?? '&H00FFFFFF';
193
+ const oc = hexToAssColor(s.outlineColor ?? '#000000') ?? '&H00000000';
194
+ const ow = Math.max(0, s.outlineWidth ?? 2);
195
+ const align = s.align === 'left' ? 1 : s.align === 'right' ? 3 : 2; // bottom row
196
+ const header = `[Script Info]\nScriptType: v4.00+\nCollisions: Normal\nPlayResX: 1920\nPlayResY: 1080\n\n[V4+ Styles]\nFormat: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding\nStyle: Default,${font},${size},${c},&H000000FF,${oc},&H64000000,${s.bold ? -1 : 0},0,0,0,100,100,0,0,1,${ow},0,${align},60,60,120,0\n\n[Events]\nFormat: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\n`;
197
+ const events = subs
198
+ .sort((a, b) => a.startMs - b.startMs)
199
+ .map(it => {
200
+ const sMs = Math.max(0, it.startMs), eMs = Math.max(it.endMs, it.startMs + 1);
201
+ const sH = pad2(Math.floor(sMs / 3600000)), sM = pad2(Math.floor((sMs % 3600000) / 60000)), sS = pad2(Math.floor((sMs % 60000) / 1000)), sC = pad2(Math.floor((sMs % 1000) / 10));
202
+ const eH = pad2(Math.floor(eMs / 3600000)), eM = pad2(Math.floor((eMs % 3600000) / 60000)), eS = pad2(Math.floor((eMs % 60000) / 1000)), eC = pad2(Math.floor((eMs % 1000) / 10));
203
+ const sAss = `${sH}:${sM}:${sS}.${sC}`;
204
+ const eAss = `${eH}:${eM}:${eS}.${eC}`;
205
+ const text = it.text.replace(/\n/g, '\\N');
206
+ return `Dialogue: 0,${sAss},${eAss},Default,,0,0,0,,${text}`;
207
+ })
208
+ .join('\n');
209
+ return header + events + '\n';
210
+ }
211
+ // Function moved to exports section at end of file
212
+ // ======================
213
+ // 3) libass detection
214
+ // ======================
215
+ function hasLibass(ffmpegBin = 'ffmpeg') {
216
+ try {
217
+ const out = (0, child_process_1.execSync)(`${ffmpegBin} -filters`, {
218
+ encoding: 'utf-8',
219
+ });
220
+ return /subtitles.*libass/i.test(out);
221
+ }
222
+ catch {
223
+ return false;
224
+ }
225
+ }
226
+ function compileToFfmpeg(project, opts = {}) {
227
+ const ffmpegBin = opts.ffmpegBin ?? 'ffmpeg';
228
+ const tmpDir = opts.workingDir ?? process.cwd();
229
+ // Collect used assets from tracks
230
+ const usedAssetIds = new Set(project.timeline.tracks.flatMap(t => t.clips.map(c => c.assetId)));
231
+ // Also collect assets referenced in subtitles
232
+ if (project.subtitles?.length) {
233
+ for (const subtitle of project.subtitles) {
234
+ if (subtitle.audio) {
235
+ usedAssetIds.add(subtitle.audio);
236
+ }
237
+ }
238
+ }
239
+ const assets = project.assets.filter(a => usedAssetIds.has(a.id));
240
+ // Inputs
241
+ const inputArgs = [];
242
+ const inputIndexByAsset = {};
243
+ assets.forEach((a, i) => {
244
+ inputArgs.push('-i', a.uri);
245
+ inputIndexByAsset[a.id] = i;
246
+ });
247
+ // Filter graph builders
248
+ const fg = [];
249
+ const extraFiles = [];
250
+ let labelId = 0;
251
+ const newLabel = () => `s${labelId++}`;
252
+ const videoTrackOuts = [];
253
+ const audioTrackOuts = [];
254
+ // Per-track clips -> branches
255
+ for (const track of project.timeline.tracks) {
256
+ const outs = [];
257
+ for (const clip of track.clips) {
258
+ const asset = project.assets.find(a => a.id === clip.assetId);
259
+ if (!asset)
260
+ throw new Error(`Missing asset: ${clip.assetId}`);
261
+ const idx = inputIndexByAsset[asset.id];
262
+ const sel = track.type === 'audio' ? `[${idx}:a]` : `[${idx}:v]`;
263
+ const start = clip.inMs / 1000;
264
+ const dur = clip.durationMs / 1000;
265
+ const tpadSec = clip.startMs / 1000;
266
+ const trim = track.type === 'audio'
267
+ ? `atrim=start=${start}:duration=${dur},asetpts=PTS-STARTPTS`
268
+ : `trim=start=${start}:duration=${dur},setpts=PTS-STARTPTS`;
269
+ const shift = track.type === 'audio'
270
+ ? `adelay=${Math.round(tpadSec * 1000)}|${Math.round(tpadSec * 1000)}`
271
+ : `tpad=start_duration=${tpadSec}`;
272
+ // Effects mapping (partial demo)
273
+ const effects = [];
274
+ if (clip.effects)
275
+ for (const ef of clip.effects) {
276
+ switch (ef.name) {
277
+ case 'fadeIn': {
278
+ const params = ef.params;
279
+ const d = Number(params?.durationMs ?? 500) / 1000;
280
+ effects.push(track.type === 'audio'
281
+ ? `afade=t=in:st=0:d=${d}`
282
+ : `fade=t=in:st=0:d=${d}`);
283
+ break;
284
+ }
285
+ case 'fadeOut': {
286
+ const params = ef.params;
287
+ const d = Number(params?.durationMs ?? 500) / 1000;
288
+ effects.push(track.type === 'audio'
289
+ ? `afade=t=out:st=${Math.max(0, dur - d)}:d=${d}`
290
+ : `fade=t=out:st=${Math.max(0, dur - d)}:d=${d}`);
291
+ break;
292
+ }
293
+ case 'gain': {
294
+ const params = ef.params;
295
+ const db = Number(params?.db ?? 0);
296
+ effects.push(`volume=${Math.pow(10, db / 20)}`);
297
+ break;
298
+ }
299
+ case 'color': {
300
+ if (track.type === 'video') {
301
+ const params = ef.params;
302
+ const p = params || {};
303
+ effects.push(`eq=saturation=${p.saturation ?? 1}:contrast=${p.contrast ?? 1}:brightness=${p.brightness ?? 0}`);
304
+ }
305
+ break;
306
+ }
307
+ case 'blur': {
308
+ if (track.type === 'video') {
309
+ const params = ef.params;
310
+ const s = Number(params?.strength ?? 10);
311
+ effects.push(`gblur=sigma=${s}`);
312
+ }
313
+ break;
314
+ }
315
+ case 'speed': {
316
+ const params = ef.params;
317
+ const rate = Number(params?.rate ?? 1);
318
+ if (rate !== 1) {
319
+ if (track.type === 'video')
320
+ effects.push(`setpts=${(1 / rate).toFixed(6)}*PTS`);
321
+ else
322
+ effects.push(`atempo=${rate.toFixed(3)}`);
323
+ }
324
+ break;
325
+ }
326
+ default:
327
+ break;
328
+ }
329
+ }
330
+ const lIn = newLabel();
331
+ const lScale = newLabel();
332
+ const lOut = newLabel();
333
+ fg.push(`${sel}${trim}${effects.length ? ',' + effects.join(',') : ''}[${lIn}]`);
334
+ // Scale video clips to project resolution
335
+ if (track.type === 'video') {
336
+ fg.push(`[${lIn}]scale=${project.settings.resolution.width}:${project.settings.resolution.height}:force_original_aspect_ratio=decrease,pad=${project.settings.resolution.width}:${project.settings.resolution.height}:(ow-iw)/2:(oh-ih)/2,setsar=1[${lScale}]`);
337
+ fg.push(`[${lScale}]${shift}[${lOut}]`);
338
+ }
339
+ else {
340
+ fg.push(`[${lIn}]${shift}[${lOut}]`);
341
+ }
342
+ outs.push(`[${lOut}]`);
343
+ }
344
+ // Simplified per-track combine (concat for video, amix for audio)
345
+ if (outs.length) {
346
+ if (track.type === 'audio') {
347
+ const l = newLabel();
348
+ fg.push(`${outs.join('')}amix=inputs=${outs.length}:normalize=0[${l}]`);
349
+ audioTrackOuts.push(`[${l}]`);
350
+ }
351
+ else if (track.type === 'video') {
352
+ if (outs.length === 1) {
353
+ videoTrackOuts.push(outs[0]);
354
+ }
355
+ else {
356
+ const l = newLabel();
357
+ fg.push(`${outs.join('')}concat=n=${outs.length}:v=1:a=0[${l}]`);
358
+ videoTrackOuts.push(`[${l}]`);
359
+ }
360
+ }
361
+ }
362
+ }
363
+ // Simple audio mixing: BGM + Dialog
364
+ let finalAudioOuts = [...audioTrackOuts];
365
+ // If we have multiple audio tracks, mix them together
366
+ if (audioTrackOuts.length > 1) {
367
+ // Find the first audio track with only 1 clip (likely BGM) and reduce its volume
368
+ const audioTracks = project.timeline.tracks.filter(t => t.type === 'audio');
369
+ const singleClipTrackIndex = audioTracks.findIndex(t => t.clips.length === 1);
370
+ const processedTracks = audioTrackOuts.map((track, index) => {
371
+ if (index === singleClipTrackIndex && singleClipTrackIndex !== -1) {
372
+ // BGM track (single clip audio track)
373
+ const volumeLabel = newLabel();
374
+ const fadeoutLabel = newLabel();
375
+ // Get BGM track duration to calculate fadeout start time
376
+ const bgmTrack = audioTracks[singleClipTrackIndex];
377
+ const bgmClip = bgmTrack.clips[0];
378
+ const bgmDurationSec = bgmClip.durationMs / 1000;
379
+ const fadeoutStartSec = Math.max(0, bgmDurationSec - 3); // Start fadeout 3 seconds before end
380
+ fg.push(`${track}volume=0.3[${volumeLabel}]`); // Reduce BGM volume to 30%
381
+ fg.push(`[${volumeLabel}]afade=t=out:st=${fadeoutStartSec}:d=3[${fadeoutLabel}]`); // Add 3-second fadeout at the end
382
+ return `[${fadeoutLabel}]`;
383
+ }
384
+ return track;
385
+ });
386
+ const l = newLabel();
387
+ fg.push(`${processedTracks.join('')}amix=inputs=${processedTracks.length}:normalize=0[${l}]`);
388
+ finalAudioOuts = [`[${l}]`];
389
+ }
390
+ // Calculate total video duration
391
+ let totalVideoDurationMs = 0;
392
+ for (const track of project.timeline.tracks) {
393
+ if (track.type === 'video') {
394
+ for (const clip of track.clips) {
395
+ const endTime = clip.startMs + clip.durationMs;
396
+ totalVideoDurationMs = Math.max(totalVideoDurationMs, endTime);
397
+ }
398
+ }
399
+ }
400
+ // Mixdown videos
401
+ const outV = videoTrackOuts.length > 1
402
+ ? (() => {
403
+ const l = newLabel();
404
+ fg.push(`${videoTrackOuts.join('')}concat=n=${videoTrackOuts.length}:v=1:a=0[${l}]`);
405
+ return `[${l}]`;
406
+ })()
407
+ : videoTrackOuts[0] || '';
408
+ // Calculate original video duration in seconds (for audio matching)
409
+ const originalVideoDurationSec = totalVideoDurationMs / 1000;
410
+ // Video processing completed (no additional freeze)
411
+ // Process subtitle audio clips (only if not already processed in timeline tracks)
412
+ const dialogAudioOuts = [];
413
+ if (project.subtitles?.length && finalAudioOuts.length === 0) {
414
+ for (const subtitle of project.subtitles) {
415
+ if (subtitle.audio) {
416
+ const asset = project.assets.find(a => a.id === subtitle.audio);
417
+ if (asset) {
418
+ const idx = inputIndexByAsset[asset.id];
419
+ if (idx !== undefined) {
420
+ const sel = `[${idx}:a]`;
421
+ const dur = (subtitle.endMs - subtitle.startMs) / 1000;
422
+ const tpadSec = subtitle.startMs / 1000;
423
+ const lIn = newLabel();
424
+ const lOut = newLabel();
425
+ fg.push(`${sel}atrim=start=0:duration=${dur},asetpts=PTS-STARTPTS[${lIn}]`);
426
+ fg.push(`[${lIn}]adelay=${Math.round(tpadSec * 1000)}|${Math.round(tpadSec * 1000)}[${lOut}]`);
427
+ dialogAudioOuts.push(`[${lOut}]`);
428
+ }
429
+ }
430
+ }
431
+ }
432
+ }
433
+ // Process final audio output
434
+ let outA = '';
435
+ if (finalAudioOuts.length > 0) {
436
+ // Use the ducked/mixed audio from timeline processing
437
+ const audioOut = finalAudioOuts.length > 1
438
+ ? (() => {
439
+ const l = newLabel();
440
+ fg.push(`${finalAudioOuts.join('')}amix=inputs=${finalAudioOuts.length}:normalize=0[${l}]`);
441
+ return `[${l}]`;
442
+ })()
443
+ : finalAudioOuts[0];
444
+ // Audio processing completed (no additional padding)
445
+ outA = audioOut;
446
+ }
447
+ else if (dialogAudioOuts.length > 0) {
448
+ // Fallback: use subtitle audio if no timeline audio
449
+ outA =
450
+ dialogAudioOuts.length > 1
451
+ ? (() => {
452
+ const l = newLabel();
453
+ fg.push(`${dialogAudioOuts.join('')}amix=inputs=${dialogAudioOuts.length}:normalize=0[${l}]`);
454
+ return `[${l}]`;
455
+ })()
456
+ : dialogAudioOuts[0];
457
+ }
458
+ // Subtitles strategy
459
+ const strat = opts.subtitleStrategy ?? 'auto';
460
+ let finalV = outV;
461
+ if (project.subtitles?.length && outV) {
462
+ const libassOk = strat === 'ass' || (strat === 'auto' && hasLibass(ffmpegBin));
463
+ if (libassOk) {
464
+ // ASS mode
465
+ const def = project.subtitles[0]?.style || {};
466
+ const ass = composeAssFromItems(project.subtitles, def);
467
+ const assName = opts.subtitlesFileName ?? 'subtitles.ass';
468
+ const assPath = path_1.default.join(tmpDir, assName);
469
+ extraFiles.push({ path: assPath, content: ass });
470
+ const l = newLabel();
471
+ const arg = assPath
472
+ .replace(/\\/g, '/')
473
+ .replace(/:/g, '\\:')
474
+ .replace(/'/g, "\\'");
475
+ fg.push(`${finalV}subtitles='${arg}'[${l}]`);
476
+ finalV = `[${l}]`;
477
+ }
478
+ else if (strat === 'srt') {
479
+ // SRT mode
480
+ const srt = composeSrtFromItems(project.subtitles);
481
+ const srtName = opts.subtitlesFileName ?? 'subtitles.srt';
482
+ const srtPath = path_1.default.join(tmpDir, srtName);
483
+ extraFiles.push({ path: srtPath, content: srt });
484
+ const l = newLabel();
485
+ const arg = srtPath
486
+ .replace(/\\/g, '/')
487
+ .replace(/:/g, '\\:')
488
+ .replace(/'/g, "\\'");
489
+ fg.push(`${outV}subtitles='${arg}'[${l}]`);
490
+ finalV = `[${l}]`;
491
+ }
492
+ else {
493
+ // drawtext fallback
494
+ for (const sub of project.subtitles) {
495
+ const l = newLabel();
496
+ const ff = sub.style?.fontFamily
497
+ ? `:fontfile=${sub.style.fontFamily.replace(/\\/g, '/').replace(/:/g, '\\:').replace(/'/g, "\\'")}`
498
+ : '';
499
+ const txt = escapeDrawtextText(sub.text);
500
+ const fc = sub.style?.color && sub.style?.color.match(/^#?[0-9a-fA-F]{6}$/)
501
+ ? `0x${sub.style.color.replace('#', '')}`
502
+ : 'white';
503
+ const bo = sub.style?.bold ? 1 : 0;
504
+ const fs = sub.style?.fontSize ?? 42;
505
+ const oc = sub.style?.outlineColor &&
506
+ sub.style?.outlineColor.match(/^#?[0-9a-fA-F]{6}$/)
507
+ ? `0x${sub.style.outlineColor.replace('#', '')}`
508
+ : '0x000000';
509
+ const ow = Math.max(0, sub.style?.outlineWidth ?? 2);
510
+ const align = sub.style?.align ?? 'center';
511
+ const pos = sub.style?.position;
512
+ const exprX = pos
513
+ ? `w*${pos.x}`
514
+ : align === 'left'
515
+ ? '(0+60)'
516
+ : align === 'right'
517
+ ? '(w-tw-60)'
518
+ : '(w/2-tw/2)';
519
+ const exprY = pos ? `h*${pos.y}` : '(h-th-40)';
520
+ const st = (sub.startMs / 1000).toFixed(3);
521
+ const et = (sub.endMs / 1000).toFixed(3);
522
+ fg.push(`${finalV}drawtext=text='${txt}'${ff}:fontcolor=${fc}:fontsize=${fs}:fontcolor_outline=${oc}:outline=${ow}:bold=${bo}:x=${exprX}:y=${exprY}:enable='between(t,${st},${et})'[${l}]`);
523
+ finalV = `[${l}]`;
524
+ }
525
+ }
526
+ }
527
+ const filterGraph = fg.join(';');
528
+ const args = [
529
+ ...inputArgs,
530
+ '-filter_complex',
531
+ filterGraph,
532
+ '-map',
533
+ finalV || outV || '0:v:0',
534
+ '-map',
535
+ outA || '0:a:0',
536
+ '-c:v',
537
+ project.export.videoCodec,
538
+ ...(project.export.crf != null ? ['-crf', String(project.export.crf)] : []),
539
+ ...(project.export.preset ? ['-preset', project.export.preset] : []),
540
+ '-pix_fmt',
541
+ project.settings.pixelFormat,
542
+ '-c:a',
543
+ project.export.audioCodec,
544
+ ...(project.export.audioBitrate
545
+ ? ['-b:a', project.export.audioBitrate]
546
+ : []),
547
+ project.export.outFile ||
548
+ opts.outFile ||
549
+ `output.${project.export.container}`,
550
+ ];
551
+ const cmd = (0, shell_quote_1.quote)([ffmpegBin, ...args]);
552
+ return { cmd, args, filterGraph, extraFiles, ffmpegBin };
553
+ }
554
+ // ===========================
555
+ // 5) Run helper (Node only)
556
+ // ===========================
557
+ async function runFfmpeg(compiled, writeFiles = true) {
558
+ if (writeFiles && compiled.extraFiles?.length) {
559
+ for (const f of compiled.extraFiles) {
560
+ // Ensure dir exists
561
+ const dir = path_1.default.dirname(f.path);
562
+ if (!fs_1.default.existsSync(dir))
563
+ fs_1.default.mkdirSync(dir, { recursive: true });
564
+ fs_1.default.writeFileSync(f.path, f.content, 'utf-8');
565
+ }
566
+ }
567
+ return await new Promise((resolve, reject) => {
568
+ const child = (0, child_process_1.spawn)(compiled.ffmpegBin, compiled.args, {
569
+ stdio: 'inherit',
570
+ });
571
+ child.on('error', reject);
572
+ child.on('close', code => code === 0
573
+ ? resolve(0)
574
+ : reject(new Error(`ffmpeg exited with code ${code}`)));
575
+ });
576
+ }
577
+ // ===========================
578
+ // 6) Small utilities
579
+ // ===========================
580
+ function escapeDrawtextText(s) {
581
+ return s
582
+ .replace(/\\/g, '\\\\')
583
+ .replace(/:/g, '\\:')
584
+ .replace(/'/g, "\\'")
585
+ .replace(/%/g, '\\%');
586
+ }
587
+ //# sourceMappingURL=videokit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"videokit.js","sourceRoot":"","sources":["../../src/utils/videokit.ts"],"names":[],"mappings":"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"}