nodejs-audio-visualizer 4.2.5 → 4.3.6
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/README.md +5 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.js +57 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +89 -26
- package/dist/index.js.map +1 -1
- package/dist/subtitleConvert.d.ts +3 -0
- package/dist/subtitleConvert.js +62 -0
- package/dist/subtitleConvert.js.map +1 -0
- package/dist/video.d.ts +5 -0
- package/dist/video.js +24 -3
- package/dist/video.js.map +1 -1
- package/package.json +1 -1
- package/src/config.ts +80 -0
- package/src/index.ts +171 -107
- package/src/subtitleConvert.ts +63 -0
- package/src/tests/config.test.ts +69 -0
- package/src/tests/subtitleConvert.test.ts +23 -0
- package/src/tests/video.test.ts +67 -0
- package/src/video.ts +36 -2
package/dist/video.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.js","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"video.js","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/config.ts
CHANGED
|
@@ -77,6 +77,86 @@ export const getAutoEditVideo = (config: Config) =>
|
|
|
77
77
|
export const getOutVideoPath = (config: Config) =>
|
|
78
78
|
path.resolve(config.outVideo.path);
|
|
79
79
|
|
|
80
|
+
export type SubtitleAlignment = 'top' | 'middle' | 'bottom';
|
|
81
|
+
|
|
82
|
+
export type SubtitleRenderSpec = {
|
|
83
|
+
source: { kind: 'file'; path: string } | { kind: 'inline'; text: string };
|
|
84
|
+
alignment: SubtitleAlignment;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const subtitleAlignmentToAss = (alignment: SubtitleAlignment): number => {
|
|
88
|
+
switch (alignment) {
|
|
89
|
+
case 'top':
|
|
90
|
+
return 6;
|
|
91
|
+
case 'middle':
|
|
92
|
+
return 10;
|
|
93
|
+
case 'bottom':
|
|
94
|
+
return 2;
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const parseSubtitleAlignment = (raw: unknown): SubtitleAlignment => {
|
|
99
|
+
if (raw === undefined) {
|
|
100
|
+
return 'bottom';
|
|
101
|
+
}
|
|
102
|
+
if (raw === 'top' || raw === 'middle' || raw === 'bottom') {
|
|
103
|
+
return raw;
|
|
104
|
+
}
|
|
105
|
+
throw new Error(
|
|
106
|
+
`Invalid outVideo.subtitles.alignment: expected 'top', 'middle', or 'bottom', got '${String(raw)}'.`,
|
|
107
|
+
);
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export const getSubtitleRenderSpec = (config: Config): SubtitleRenderSpec | undefined => {
|
|
111
|
+
const subtitles = config.outVideo.subtitles;
|
|
112
|
+
if (subtitles === undefined || subtitles === null) {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
if (typeof subtitles === 'string') {
|
|
116
|
+
if (subtitles.trim().length === 0) {
|
|
117
|
+
throw new Error(
|
|
118
|
+
`Invalid outVideo.subtitles: expected non-empty string content, got '${String(subtitles)}'.`,
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
source: { kind: 'inline', text: subtitles },
|
|
123
|
+
alignment: 'bottom',
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
if (typeof subtitles !== 'object' || Array.isArray(subtitles)) {
|
|
127
|
+
throw new Error(
|
|
128
|
+
`Invalid outVideo.subtitles: expected string or object, got '${String(subtitles)}'.`,
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
const obj = subtitles as {
|
|
132
|
+
path?: string;
|
|
133
|
+
rawContent?: string;
|
|
134
|
+
alignment?: unknown;
|
|
135
|
+
};
|
|
136
|
+
const alignment = parseSubtitleAlignment(obj.alignment);
|
|
137
|
+
const pathRaw = obj.path !== undefined ? String(obj.path).trim() : '';
|
|
138
|
+
const rawContent =
|
|
139
|
+
obj.rawContent !== undefined ? String(obj.rawContent).trim() : '';
|
|
140
|
+
if (pathRaw.length > 0 && rawContent.length > 0) {
|
|
141
|
+
throw new Error(
|
|
142
|
+
'Invalid outVideo.subtitles: specify only one of "path" or "rawContent", not both.',
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
if (pathRaw.length === 0 && rawContent.length === 0) {
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
if (pathRaw.length > 0) {
|
|
149
|
+
return {
|
|
150
|
+
source: { kind: 'file', path: path.resolve(pathRaw) },
|
|
151
|
+
alignment,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
source: { kind: 'inline', text: rawContent },
|
|
156
|
+
alignment,
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
|
|
80
160
|
export const getFPS = (config: Config) =>
|
|
81
161
|
config.outVideo.fps || defaults.fps;
|
|
82
162
|
|
package/src/index.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
|
+
import { readFileSync } from 'fs';
|
|
2
3
|
import {
|
|
3
4
|
getAudioFilePath,
|
|
4
5
|
getBackgroundImagePath,
|
|
5
6
|
getBackgroundVideoPath,
|
|
6
7
|
getOutVideoPath,
|
|
8
|
+
getSubtitleRenderSpec,
|
|
9
|
+
subtitleAlignmentToAss,
|
|
7
10
|
getFPS,
|
|
8
11
|
getSpectrumBusMargin,
|
|
9
12
|
getSpectrumWidthAbsolute,
|
|
@@ -34,7 +37,8 @@ import {
|
|
|
34
37
|
} from './config';
|
|
35
38
|
import { createAudioBuffer, bufferToUInt8, createSpectrumsProcessor } from './audio';
|
|
36
39
|
import { parseImage, getImageColor, getVideoFrameColor, invertColor, Color, convertToBmp, createSpectrumVisualizerFrameGenerator, createPolarVisualizerFrameGenerator, CreatePolarVisualizerFrameProps, CreateVisualizerFrameProps, CommonVisualizerFrameProps } from './image';
|
|
37
|
-
import {
|
|
40
|
+
import { normalizeInlineSubtitlesToSrt, lrcToSrt } from './subtitleConvert';
|
|
41
|
+
import { spawnFfmpegVideoWriter, waitDrain, getVideoInfo, spawnVideoFrameReader, readVideoFrame, detectSceneChanges, buildBeatSyncedSegments, writeConcatFile, writeSubtitlesFile, spawnConcatVideoFrameReader, cleanupConcatFile, cleanupTempFile } from './video';
|
|
38
42
|
import { createBpmEncoder, createBgrFrameEncoder, EncodedBmp } from './bpmEncoder';
|
|
39
43
|
import { createBeatDetector } from './beats';
|
|
40
44
|
export { BeatInfo, BeatDetectorOptions } from './beats';
|
|
@@ -66,6 +70,13 @@ export interface Config {
|
|
|
66
70
|
};
|
|
67
71
|
outVideo: {
|
|
68
72
|
path: string;
|
|
73
|
+
subtitles?:
|
|
74
|
+
| string
|
|
75
|
+
| {
|
|
76
|
+
path?: string;
|
|
77
|
+
rawContent?: string;
|
|
78
|
+
alignment?: 'top' | 'middle' | 'bottom';
|
|
79
|
+
};
|
|
69
80
|
fps?: number;
|
|
70
81
|
resolution?: {
|
|
71
82
|
width: number;
|
|
@@ -177,6 +188,8 @@ interface PreProcessedAudio {
|
|
|
177
188
|
}
|
|
178
189
|
|
|
179
190
|
const PRE_PROCESS_PROGRESS_SHARE = 60;
|
|
191
|
+
const POST_AUDIO_PROGRESS_SHARE = 10;
|
|
192
|
+
const RENDER_PROGRESS_SHARE = 30;
|
|
180
193
|
|
|
181
194
|
const preProcessAudio = async (
|
|
182
195
|
audioBuffer: Buffer,
|
|
@@ -386,6 +399,29 @@ export const renderAudioVisualizer = (config: Config, onProgress?: (progress: nu
|
|
|
386
399
|
|
|
387
400
|
const audioFilePath = getAudioFilePath(config);
|
|
388
401
|
const outVideoPath = getOutVideoPath(config);
|
|
402
|
+
const subtitleSpec = getSubtitleRenderSpec(config);
|
|
403
|
+
let subtitleFilePath: string | undefined;
|
|
404
|
+
let subtitleFileIsTemporary = false;
|
|
405
|
+
let subtitleAlignmentAss = 2;
|
|
406
|
+
if (subtitleSpec) {
|
|
407
|
+
subtitleAlignmentAss = subtitleAlignmentToAss(subtitleSpec.alignment);
|
|
408
|
+
if (subtitleSpec.source.kind === 'file') {
|
|
409
|
+
const absPath = subtitleSpec.source.path;
|
|
410
|
+
const ext = path.extname(absPath).toLowerCase();
|
|
411
|
+
if (ext === '.lrc') {
|
|
412
|
+
const raw = readFileSync(absPath, 'utf-8');
|
|
413
|
+
subtitleFilePath = writeSubtitlesFile(lrcToSrt(raw));
|
|
414
|
+
subtitleFileIsTemporary = true;
|
|
415
|
+
} else {
|
|
416
|
+
subtitleFilePath = absPath;
|
|
417
|
+
}
|
|
418
|
+
} else {
|
|
419
|
+
subtitleFilePath = writeSubtitlesFile(
|
|
420
|
+
normalizeInlineSubtitlesToSrt(subtitleSpec.source.text),
|
|
421
|
+
);
|
|
422
|
+
subtitleFileIsTemporary = true;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
389
425
|
const backgroundVideoPath = getBackgroundVideoPath(config);
|
|
390
426
|
const backgroundImagePath = getBackgroundImagePath(config);
|
|
391
427
|
const useVideoBackground = !!backgroundVideoPath;
|
|
@@ -407,16 +443,30 @@ export const renderAudioVisualizer = (config: Config, onProgress?: (progress: nu
|
|
|
407
443
|
const framesCount = Math.trunc(audioDuration * FPS);
|
|
408
444
|
const outputResolution = getOutputResolution(config);
|
|
409
445
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
446
|
+
let maxProgressReported = -1;
|
|
447
|
+
const reportProgress = (progress: number) => {
|
|
448
|
+
if (!onProgress) {
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
const normalized = +Math.min(100, Math.max(0, progress)).toFixed(2);
|
|
452
|
+
if (normalized <= maxProgressReported) {
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
maxProgressReported = normalized;
|
|
456
|
+
onProgress(normalized);
|
|
457
|
+
};
|
|
458
|
+
reportProgress(0);
|
|
459
|
+
|
|
413
460
|
const preprocessed = await preProcessAudio(
|
|
414
461
|
audioBuffer,
|
|
415
462
|
sampleRate,
|
|
416
463
|
FPS,
|
|
417
464
|
framesCount,
|
|
418
|
-
|
|
465
|
+
(progress: number) => {
|
|
466
|
+
reportProgress(progress);
|
|
467
|
+
},
|
|
419
468
|
);
|
|
469
|
+
reportProgress(PRE_PROCESS_PROGRESS_SHARE);
|
|
420
470
|
|
|
421
471
|
const autoHighlight = getAudioAutoHighlight(config);
|
|
422
472
|
let spectrumsForRender = preprocessed.spectrums;
|
|
@@ -430,6 +480,7 @@ export const renderAudioVisualizer = (config: Config, onProgress?: (progress: nu
|
|
|
430
480
|
let highlightSlice: HighlightSliceResult | undefined;
|
|
431
481
|
|
|
432
482
|
if (autoHighlight) {
|
|
483
|
+
reportProgress(PRE_PROCESS_PROGRESS_SHARE + 1);
|
|
433
484
|
highlightSlice = await computeHighlightSlice(
|
|
434
485
|
FPS,
|
|
435
486
|
framesCount,
|
|
@@ -440,6 +491,9 @@ export const renderAudioVisualizer = (config: Config, onProgress?: (progress: nu
|
|
|
440
491
|
spectrumsForRender = highlightSlice.spectrums;
|
|
441
492
|
beatIndicesForRender = highlightSlice.beatFrameIndices;
|
|
442
493
|
framesCountForRender = highlightSlice.highlightFrames;
|
|
494
|
+
reportProgress(PRE_PROCESS_PROGRESS_SHARE + POST_AUDIO_PROGRESS_SHARE);
|
|
495
|
+
} else {
|
|
496
|
+
reportProgress(PRE_PROCESS_PROGRESS_SHARE + POST_AUDIO_PROGRESS_SHARE);
|
|
443
497
|
}
|
|
444
498
|
|
|
445
499
|
const separateHighlightFiles =
|
|
@@ -485,126 +539,136 @@ export const renderAudioVisualizer = (config: Config, onProgress?: (progress: nu
|
|
|
485
539
|
},
|
|
486
540
|
];
|
|
487
541
|
|
|
488
|
-
const
|
|
489
|
-
passes.reduce((
|
|
490
|
-
|
|
542
|
+
const totalPassFrames =
|
|
543
|
+
passes.reduce((sum, pass) => sum + pass.frameCount, 0);
|
|
544
|
+
const totalRenderMilestones = totalPassFrames + (passes.length * 2);
|
|
545
|
+
let renderMilestonesCompleted = 0;
|
|
546
|
+
const reportRenderProgress = (milestoneIncrement = 1) => {
|
|
547
|
+
renderMilestonesCompleted += milestoneIncrement;
|
|
548
|
+
reportProgress(
|
|
549
|
+
PRE_PROCESS_PROGRESS_SHARE
|
|
550
|
+
+ POST_AUDIO_PROGRESS_SHARE
|
|
551
|
+
+ (RENDER_PROGRESS_SHARE * renderMilestonesCompleted / Math.max(1, totalRenderMilestones)),
|
|
552
|
+
);
|
|
553
|
+
};
|
|
491
554
|
let lastExitCode = 0;
|
|
492
555
|
const outputVideoFiles: string[] = [];
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
videoFrameReader,
|
|
501
|
-
videoFrameSize,
|
|
502
|
-
encodeVideoFrame,
|
|
503
|
-
concatFilePath,
|
|
504
|
-
} = await prepareBackgroundForRender({
|
|
505
|
-
useVideoBackground,
|
|
506
|
-
backgroundVideoPath,
|
|
507
|
-
backgroundImagePath,
|
|
508
|
-
beatFrameIndices: pass.beatIndices,
|
|
509
|
-
framesCount: pass.frameCount,
|
|
510
|
-
outputResolution,
|
|
511
|
-
fps: FPS,
|
|
512
|
-
autoEditVideo: getAutoEditVideo(config),
|
|
513
|
-
});
|
|
514
|
-
|
|
515
|
-
const createVisualizerFrame = createVisualizerFrameGenerator(
|
|
516
|
-
config, backgroundWidth, backgroundHeight, defaultColor, spectrumBusMargin
|
|
517
|
-
);
|
|
518
|
-
|
|
519
|
-
const ffmpegVideoWriter = spawnFfmpegVideoWriter({
|
|
520
|
-
audioFilename: audioFilePath,
|
|
521
|
-
videoFileName: pass.outPath,
|
|
522
|
-
fps: FPS,
|
|
523
|
-
...(pass.audioSegment && { audioSegment: pass.audioSegment }),
|
|
524
|
-
...(!!onProgress && {
|
|
525
|
-
onStderr: getProgress((currentFrame: number) => {
|
|
526
|
-
const g = progressFrameBase + currentFrame;
|
|
527
|
-
onProgress(
|
|
528
|
-
+(
|
|
529
|
-
Math.min(
|
|
530
|
-
100,
|
|
531
|
-
PRE_PROCESS_PROGRESS_SHARE
|
|
532
|
-
+ (90 * g) / progressDenominator,
|
|
533
|
-
)
|
|
534
|
-
).toFixed(2),
|
|
535
|
-
);
|
|
536
|
-
}),
|
|
537
|
-
}),
|
|
538
|
-
...(ffmpeg_cfr && { crf: ffmpeg_cfr }),
|
|
539
|
-
...(ffmpeg_preset && { preset: ffmpeg_preset }),
|
|
540
|
-
});
|
|
541
|
-
|
|
542
|
-
const exitPromise = new Promise<number>(res => {
|
|
543
|
-
let settled = false;
|
|
544
|
-
ffmpegVideoWriter.on('exit', (code: number | null) => {
|
|
545
|
-
if (settled) {
|
|
546
|
-
return;
|
|
547
|
-
}
|
|
548
|
-
settled = true;
|
|
549
|
-
res(code ?? 0);
|
|
550
|
-
});
|
|
551
|
-
});
|
|
552
|
-
|
|
553
|
-
let stoppedEarly = false;
|
|
554
|
-
for (let i = 0; i < pass.frameCount; i++) {
|
|
555
|
-
const spectrum = pass.spectrums[i];
|
|
556
|
-
|
|
557
|
-
const backgroundImageBuffer = await resolveBackgroundFrameBuffer({
|
|
558
|
-
frameIndex: i,
|
|
559
|
-
useVideoBackground,
|
|
556
|
+
try {
|
|
557
|
+
passLoop: for (const pass of passes) {
|
|
558
|
+
const {
|
|
559
|
+
backgroundWidth,
|
|
560
|
+
backgroundHeight,
|
|
561
|
+
defaultColor,
|
|
562
|
+
staticBackgroundBuffer,
|
|
560
563
|
videoFrameReader,
|
|
561
564
|
videoFrameSize,
|
|
562
565
|
encodeVideoFrame,
|
|
563
|
-
|
|
566
|
+
concatFilePath,
|
|
567
|
+
} = await prepareBackgroundForRender({
|
|
568
|
+
useVideoBackground,
|
|
569
|
+
backgroundVideoPath,
|
|
570
|
+
backgroundImagePath,
|
|
571
|
+
beatFrameIndices: pass.beatIndices,
|
|
572
|
+
framesCount: pass.frameCount,
|
|
573
|
+
outputResolution,
|
|
574
|
+
fps: FPS,
|
|
575
|
+
autoEditVideo: getAutoEditVideo(config),
|
|
576
|
+
});
|
|
577
|
+
reportRenderProgress();
|
|
578
|
+
|
|
579
|
+
const createVisualizerFrame = createVisualizerFrameGenerator(
|
|
580
|
+
config, backgroundWidth, backgroundHeight, defaultColor, spectrumBusMargin
|
|
581
|
+
);
|
|
582
|
+
|
|
583
|
+
const ffmpegVideoWriter = spawnFfmpegVideoWriter({
|
|
584
|
+
audioFilename: audioFilePath,
|
|
585
|
+
videoFileName: pass.outPath,
|
|
586
|
+
...(subtitleFilePath && {
|
|
587
|
+
subtitleFilename: subtitleFilePath,
|
|
588
|
+
subtitleAlignmentAss,
|
|
589
|
+
}),
|
|
590
|
+
fps: FPS,
|
|
591
|
+
...(pass.audioSegment && { audioSegment: pass.audioSegment }),
|
|
592
|
+
...(ffmpeg_cfr && { crf: ffmpeg_cfr }),
|
|
593
|
+
...(ffmpeg_preset && { preset: ffmpeg_preset }),
|
|
564
594
|
});
|
|
565
595
|
|
|
566
|
-
const
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
596
|
+
const exitPromise = new Promise<number>(res => {
|
|
597
|
+
let settled = false;
|
|
598
|
+
ffmpegVideoWriter.on('exit', (code: number | null) => {
|
|
599
|
+
if (settled) {
|
|
600
|
+
return;
|
|
601
|
+
}
|
|
602
|
+
settled = true;
|
|
603
|
+
res(code ?? 0);
|
|
604
|
+
});
|
|
605
|
+
});
|
|
606
|
+
|
|
607
|
+
let stoppedEarly = false;
|
|
608
|
+
for (let i = 0; i < pass.frameCount; i++) {
|
|
609
|
+
const spectrum = pass.spectrums[i];
|
|
610
|
+
|
|
611
|
+
const backgroundImageBuffer = await resolveBackgroundFrameBuffer({
|
|
612
|
+
frameIndex: i,
|
|
613
|
+
useVideoBackground,
|
|
614
|
+
videoFrameReader,
|
|
615
|
+
videoFrameSize,
|
|
616
|
+
encodeVideoFrame,
|
|
617
|
+
staticBackgroundBuffer,
|
|
618
|
+
});
|
|
619
|
+
|
|
620
|
+
const commonVisualizerFrameProps: CommonVisualizerFrameProps = {
|
|
621
|
+
backgroundImageBuffer,
|
|
622
|
+
spectrum,
|
|
623
|
+
};
|
|
624
|
+
const frameImage = createVisualizerFrame(commonVisualizerFrameProps);
|
|
625
|
+
const isFrameProcessed = ffmpegVideoWriter.stdin.write(frameImage.data);
|
|
626
|
+
if (!isFrameProcessed) {
|
|
627
|
+
const isDrained = await waitDrain(ffmpegVideoWriter.stdin, ffmpegVideoWriter);
|
|
628
|
+
if (!isDrained) {
|
|
629
|
+
stoppedEarly = true;
|
|
630
|
+
break;
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
if (shouldStop && shouldStop()) {
|
|
575
634
|
stoppedEarly = true;
|
|
576
635
|
break;
|
|
577
636
|
}
|
|
637
|
+
if (frame_processing_delay) {
|
|
638
|
+
await sleep(frame_processing_delay);
|
|
639
|
+
}
|
|
640
|
+
await waitForEventLoop();
|
|
641
|
+
reportRenderProgress();
|
|
578
642
|
}
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
643
|
+
|
|
644
|
+
if (videoFrameReader) {
|
|
645
|
+
videoFrameReader.kill();
|
|
582
646
|
}
|
|
583
|
-
if (
|
|
584
|
-
|
|
647
|
+
if (concatFilePath) {
|
|
648
|
+
cleanupConcatFile(concatFilePath);
|
|
585
649
|
}
|
|
586
|
-
|
|
587
|
-
}
|
|
650
|
+
ffmpegVideoWriter.stdin.end();
|
|
588
651
|
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
}
|
|
592
|
-
if (concatFilePath) {
|
|
593
|
-
cleanupConcatFile(concatFilePath);
|
|
594
|
-
}
|
|
595
|
-
ffmpegVideoWriter.stdin.end();
|
|
652
|
+
lastExitCode = await exitPromise;
|
|
653
|
+
reportRenderProgress();
|
|
596
654
|
|
|
597
|
-
|
|
598
|
-
|
|
655
|
+
if (lastExitCode === 0 && !stoppedEarly) {
|
|
656
|
+
outputVideoFiles.push(pass.outPath);
|
|
657
|
+
}
|
|
599
658
|
|
|
600
|
-
|
|
601
|
-
|
|
659
|
+
if (stoppedEarly || lastExitCode !== 0) {
|
|
660
|
+
break passLoop;
|
|
661
|
+
}
|
|
602
662
|
}
|
|
603
663
|
|
|
604
|
-
if (
|
|
605
|
-
|
|
664
|
+
if (lastExitCode === 0 && outputVideoFiles.length === passes.length) {
|
|
665
|
+
reportProgress(100);
|
|
606
666
|
}
|
|
607
|
-
}
|
|
608
667
|
|
|
609
|
-
|
|
668
|
+
resolve({ exitCode: lastExitCode, outputVideoFiles });
|
|
669
|
+
} finally {
|
|
670
|
+
if (subtitleFilePath && subtitleFileIsTemporary) {
|
|
671
|
+
cleanupTempFile(subtitleFilePath);
|
|
672
|
+
}
|
|
673
|
+
}
|
|
610
674
|
});
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/** LRC timestamp line: [mm:ss.xx] text — hundredths optional after dot. */
|
|
2
|
+
const LRC_LINE = /^\[(\d+):(\d+)(?:\.(\d+))?\]\s*(.*)$/;
|
|
3
|
+
|
|
4
|
+
export const isLikelyLrc = (text: string): boolean => {
|
|
5
|
+
const body = text.replace(/^\uFEFF/, '');
|
|
6
|
+
for (const line of body.split(/\r?\n/)) {
|
|
7
|
+
const t = line.trim();
|
|
8
|
+
if (t.length === 0) {
|
|
9
|
+
continue;
|
|
10
|
+
}
|
|
11
|
+
return LRC_LINE.test(t);
|
|
12
|
+
}
|
|
13
|
+
return false;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const msToSrtTime = (ms: number): string => {
|
|
17
|
+
const h = Math.floor(ms / 3600000);
|
|
18
|
+
const m = Math.floor((ms % 3600000) / 60000);
|
|
19
|
+
const s = Math.floor((ms % 60000) / 1000);
|
|
20
|
+
const milli = ms % 1000;
|
|
21
|
+
const pad = (n: number, w: number) => String(n).padStart(w, '0');
|
|
22
|
+
return `${pad(h, 2)}:${pad(m, 2)}:${pad(s, 2)},${pad(milli, 3)}`;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const DEFAULT_TAIL_MS = 2000;
|
|
26
|
+
|
|
27
|
+
export const lrcToSrt = (lrc: string): string => {
|
|
28
|
+
const body = lrc.replace(/^\uFEFF/, '');
|
|
29
|
+
const entries: { startMs: number; text: string }[] = [];
|
|
30
|
+
for (const line of body.split(/\r?\n/)) {
|
|
31
|
+
const match = line.trim().match(LRC_LINE);
|
|
32
|
+
if (!match) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const min = parseInt(match[1], 10);
|
|
36
|
+
const sec = parseInt(match[2], 10);
|
|
37
|
+
const centisec =
|
|
38
|
+
match[3] !== undefined
|
|
39
|
+
? parseInt(match[3].padEnd(2, '0').slice(0, 2), 10)
|
|
40
|
+
: 0;
|
|
41
|
+
const startMs = (min * 60 + sec) * 1000 + centisec * 10;
|
|
42
|
+
const text = (match[4] || '').trim();
|
|
43
|
+
if (text.length > 0) {
|
|
44
|
+
entries.push({ startMs, text });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
entries.sort((a, b) => a.startMs - b.startMs);
|
|
48
|
+
let out = '';
|
|
49
|
+
for (let i = 0; i < entries.length; i++) {
|
|
50
|
+
const start = entries[i].startMs;
|
|
51
|
+
const end =
|
|
52
|
+
i + 1 < entries.length
|
|
53
|
+
? Math.max(entries[i + 1].startMs, start + 1)
|
|
54
|
+
: start + DEFAULT_TAIL_MS;
|
|
55
|
+
out += `${i + 1}\n`;
|
|
56
|
+
out += `${msToSrtTime(start)} --> ${msToSrtTime(end)}\n`;
|
|
57
|
+
out += `${entries[i].text}\n\n`;
|
|
58
|
+
}
|
|
59
|
+
return out.length > 0 ? out.replace(/\n*$/, '\n') : '';
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export const normalizeInlineSubtitlesToSrt = (text: string): string =>
|
|
63
|
+
isLikelyLrc(text) ? lrcToSrt(text) : text;
|
package/src/tests/config.test.ts
CHANGED
|
@@ -8,6 +8,8 @@ import {
|
|
|
8
8
|
getAudioAutoHighlightCount,
|
|
9
9
|
getBackgroundImagePath,
|
|
10
10
|
getOutVideoPath,
|
|
11
|
+
getSubtitleRenderSpec,
|
|
12
|
+
subtitleAlignmentToAss,
|
|
11
13
|
getFPS,
|
|
12
14
|
getSpectrumWidthAbsolute,
|
|
13
15
|
getSpectrumHeightAbsolute,
|
|
@@ -78,6 +80,73 @@ describe('config', function() {
|
|
|
78
80
|
expect(result).equal(expected);
|
|
79
81
|
});
|
|
80
82
|
|
|
83
|
+
it('getSubtitleRenderSpec', function() {
|
|
84
|
+
expect(
|
|
85
|
+
getSubtitleRenderSpec({ outVideo: {} } as Config)
|
|
86
|
+
).equal(undefined);
|
|
87
|
+
|
|
88
|
+
expect(
|
|
89
|
+
getSubtitleRenderSpec({
|
|
90
|
+
outVideo: { subtitles: '1\n00:00:00,000 --> 00:00:01,000\nTest' }
|
|
91
|
+
} as Config)
|
|
92
|
+
).deep.equal({
|
|
93
|
+
source: { kind: 'inline', text: '1\n00:00:00,000 --> 00:00:01,000\nTest' },
|
|
94
|
+
alignment: 'bottom',
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
expect(
|
|
98
|
+
getSubtitleRenderSpec({
|
|
99
|
+
outVideo: {
|
|
100
|
+
subtitles: { rawContent: '1\n00:00:00,000 --> 00:00:01,000\nHi', alignment: 'top' }
|
|
101
|
+
}
|
|
102
|
+
} as Config)
|
|
103
|
+
).deep.equal({
|
|
104
|
+
source: { kind: 'inline', text: '1\n00:00:00,000 --> 00:00:01,000\nHi' },
|
|
105
|
+
alignment: 'top',
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
expect(
|
|
109
|
+
getSubtitleRenderSpec({
|
|
110
|
+
outVideo: { subtitles: { path: 'media/sub.srt' } }
|
|
111
|
+
} as Config)
|
|
112
|
+
).deep.equal({
|
|
113
|
+
source: { kind: 'file', path: path.resolve('media/sub.srt') },
|
|
114
|
+
alignment: 'bottom',
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
expect(
|
|
118
|
+
getSubtitleRenderSpec({ outVideo: { subtitles: {} } } as Config)
|
|
119
|
+
).equal(undefined);
|
|
120
|
+
|
|
121
|
+
expect(
|
|
122
|
+
getSubtitleRenderSpec.bind(undefined, {
|
|
123
|
+
outVideo: { subtitles: '' }
|
|
124
|
+
} as unknown as Config)
|
|
125
|
+
).to.throw('Invalid outVideo.subtitles: expected non-empty string content');
|
|
126
|
+
|
|
127
|
+
expect(
|
|
128
|
+
getSubtitleRenderSpec.bind(undefined, {
|
|
129
|
+
outVideo: {
|
|
130
|
+
subtitles: { path: 'a.lrc', rawContent: 'x' }
|
|
131
|
+
}
|
|
132
|
+
} as Config)
|
|
133
|
+
).to.throw(
|
|
134
|
+
'Invalid outVideo.subtitles: specify only one of "path" or "rawContent", not both.',
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
expect(
|
|
138
|
+
getSubtitleRenderSpec.bind(undefined, {
|
|
139
|
+
outVideo: { subtitles: { alignment: 'center' as any } }
|
|
140
|
+
} as Config)
|
|
141
|
+
).to.throw('Invalid outVideo.subtitles.alignment');
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it('subtitleAlignmentToAss', function() {
|
|
145
|
+
expect(subtitleAlignmentToAss('bottom')).equal(2);
|
|
146
|
+
expect(subtitleAlignmentToAss('middle')).equal(10);
|
|
147
|
+
expect(subtitleAlignmentToAss('top')).equal(6);
|
|
148
|
+
});
|
|
149
|
+
|
|
81
150
|
it('getFPS', function() {
|
|
82
151
|
const result1 = getFPS({
|
|
83
152
|
outVideo: {}
|