node-av-light 0.0.0 → 7.1.0-beta.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/LICENSE.md +22 -0
- package/README.md +711 -0
- package/dist/api/audio-frame-buffer.d.ts +636 -0
- package/dist/api/audio-frame-buffer.js +1027 -0
- package/dist/api/audio-frame-buffer.js.map +1 -0
- package/dist/api/bitstream-filter.d.ts +938 -0
- package/dist/api/bitstream-filter.js +1427 -0
- package/dist/api/bitstream-filter.js.map +1 -0
- package/dist/api/constants.d.ts +44 -0
- package/dist/api/constants.js +45 -0
- package/dist/api/constants.js.map +1 -0
- package/dist/api/data/test_av1.ivf +0 -0
- package/dist/api/data/test_h264.h264 +0 -0
- package/dist/api/data/test_hevc.h265 +0 -0
- package/dist/api/data/test_mjpeg.mjpeg +0 -0
- package/dist/api/data/test_vp8.ivf +0 -0
- package/dist/api/data/test_vp9.ivf +0 -0
- package/dist/api/decoder.d.ts +1413 -0
- package/dist/api/decoder.js +2367 -0
- package/dist/api/decoder.js.map +1 -0
- package/dist/api/demuxer.d.ts +1295 -0
- package/dist/api/demuxer.js +2344 -0
- package/dist/api/demuxer.js.map +1 -0
- package/dist/api/device.d.ts +589 -0
- package/dist/api/device.js +964 -0
- package/dist/api/device.js.map +1 -0
- package/dist/api/encoder-pool.d.ts +262 -0
- package/dist/api/encoder-pool.js +397 -0
- package/dist/api/encoder-pool.js.map +1 -0
- package/dist/api/encoder.d.ts +1509 -0
- package/dist/api/encoder.js +2619 -0
- package/dist/api/encoder.js.map +1 -0
- package/dist/api/filter-complex.d.ts +828 -0
- package/dist/api/filter-complex.js +1661 -0
- package/dist/api/filter-complex.js.map +1 -0
- package/dist/api/filter-presets.d.ts +800 -0
- package/dist/api/filter-presets.js +1554 -0
- package/dist/api/filter-presets.js.map +1 -0
- package/dist/api/filter.d.ts +1339 -0
- package/dist/api/filter.js +2075 -0
- package/dist/api/filter.js.map +1 -0
- package/dist/api/fmp4-stream.d.ts +797 -0
- package/dist/api/fmp4-stream.js +1428 -0
- package/dist/api/fmp4-stream.js.map +1 -0
- package/dist/api/hardware.d.ts +677 -0
- package/dist/api/hardware.js +1300 -0
- package/dist/api/hardware.js.map +1 -0
- package/dist/api/index.d.ts +21 -0
- package/dist/api/index.js +38 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/io-stream.d.ts +308 -0
- package/dist/api/io-stream.js +358 -0
- package/dist/api/io-stream.js.map +1 -0
- package/dist/api/muxer.d.ts +1311 -0
- package/dist/api/muxer.js +2672 -0
- package/dist/api/muxer.js.map +1 -0
- package/dist/api/pipeline.d.ts +801 -0
- package/dist/api/pipeline.js +1344 -0
- package/dist/api/pipeline.js.map +1 -0
- package/dist/api/probe.d.ts +128 -0
- package/dist/api/probe.js +227 -0
- package/dist/api/probe.js.map +1 -0
- package/dist/api/rtp-stream.d.ts +497 -0
- package/dist/api/rtp-stream.js +1131 -0
- package/dist/api/rtp-stream.js.map +1 -0
- package/dist/api/scaler.d.ts +561 -0
- package/dist/api/scaler.js +918 -0
- package/dist/api/scaler.js.map +1 -0
- package/dist/api/types.d.ts +17 -0
- package/dist/api/types.js +2 -0
- package/dist/api/types.js.map +1 -0
- package/dist/api/utilities/async-queue.d.ts +149 -0
- package/dist/api/utilities/async-queue.js +254 -0
- package/dist/api/utilities/async-queue.js.map +1 -0
- package/dist/api/utilities/audio-sample.d.ts +117 -0
- package/dist/api/utilities/audio-sample.js +112 -0
- package/dist/api/utilities/audio-sample.js.map +1 -0
- package/dist/api/utilities/audio-transcode.d.ts +20 -0
- package/dist/api/utilities/audio-transcode.js +27 -0
- package/dist/api/utilities/audio-transcode.js.map +1 -0
- package/dist/api/utilities/channel-layout.d.ts +76 -0
- package/dist/api/utilities/channel-layout.js +80 -0
- package/dist/api/utilities/channel-layout.js.map +1 -0
- package/dist/api/utilities/codec-format.d.ts +87 -0
- package/dist/api/utilities/codec-format.js +117 -0
- package/dist/api/utilities/codec-format.js.map +1 -0
- package/dist/api/utilities/context-options.d.ts +25 -0
- package/dist/api/utilities/context-options.js +23 -0
- package/dist/api/utilities/context-options.js.map +1 -0
- package/dist/api/utilities/electron-shared-texture.d.ts +368 -0
- package/dist/api/utilities/electron-shared-texture.js +540 -0
- package/dist/api/utilities/electron-shared-texture.js.map +1 -0
- package/dist/api/utilities/image.d.ts +207 -0
- package/dist/api/utilities/image.js +213 -0
- package/dist/api/utilities/image.js.map +1 -0
- package/dist/api/utilities/index.d.ts +14 -0
- package/dist/api/utilities/index.js +27 -0
- package/dist/api/utilities/index.js.map +1 -0
- package/dist/api/utilities/live-decoding.d.ts +15 -0
- package/dist/api/utilities/live-decoding.js +32 -0
- package/dist/api/utilities/live-decoding.js.map +1 -0
- package/dist/api/utilities/media-type.d.ts +49 -0
- package/dist/api/utilities/media-type.js +53 -0
- package/dist/api/utilities/media-type.js.map +1 -0
- package/dist/api/utilities/packet-age-watchdog.d.ts +198 -0
- package/dist/api/utilities/packet-age-watchdog.js +594 -0
- package/dist/api/utilities/packet-age-watchdog.js.map +1 -0
- package/dist/api/utilities/pixel-format.d.ts +89 -0
- package/dist/api/utilities/pixel-format.js +97 -0
- package/dist/api/utilities/pixel-format.js.map +1 -0
- package/dist/api/utilities/sample-format.d.ts +129 -0
- package/dist/api/utilities/sample-format.js +141 -0
- package/dist/api/utilities/sample-format.js.map +1 -0
- package/dist/api/utilities/scale-size.d.ts +51 -0
- package/dist/api/utilities/scale-size.js +55 -0
- package/dist/api/utilities/scale-size.js.map +1 -0
- package/dist/api/utilities/scheduler.d.ts +138 -0
- package/dist/api/utilities/scheduler.js +98 -0
- package/dist/api/utilities/scheduler.js.map +1 -0
- package/dist/api/utilities/streaming.d.ts +186 -0
- package/dist/api/utilities/streaming.js +309 -0
- package/dist/api/utilities/streaming.js.map +1 -0
- package/dist/api/utilities/timestamp.d.ts +193 -0
- package/dist/api/utilities/timestamp.js +206 -0
- package/dist/api/utilities/timestamp.js.map +1 -0
- package/dist/api/utilities/video-transcode.d.ts +218 -0
- package/dist/api/utilities/video-transcode.js +624 -0
- package/dist/api/utilities/video-transcode.js.map +1 -0
- package/dist/api/utilities/whisper-model.d.ts +330 -0
- package/dist/api/utilities/whisper-model.js +587 -0
- package/dist/api/utilities/whisper-model.js.map +1 -0
- package/dist/api/utils.d.ts +19 -0
- package/dist/api/utils.js +39 -0
- package/dist/api/utils.js.map +1 -0
- package/dist/api/webrtc-stream.d.ts +294 -0
- package/dist/api/webrtc-stream.js +546 -0
- package/dist/api/webrtc-stream.js.map +1 -0
- package/dist/api/whisper.d.ts +326 -0
- package/dist/api/whisper.js +402 -0
- package/dist/api/whisper.js.map +1 -0
- package/dist/constants/bsf-options.d.ts +364 -0
- package/dist/constants/bsf-options.js +7 -0
- package/dist/constants/bsf-options.js.map +1 -0
- package/dist/constants/channel-layouts.d.ts +53 -0
- package/dist/constants/channel-layouts.js +57 -0
- package/dist/constants/channel-layouts.js.map +1 -0
- package/dist/constants/constants.d.ts +2435 -0
- package/dist/constants/constants.js +1989 -0
- package/dist/constants/constants.js.map +1 -0
- package/dist/constants/decoders.d.ts +651 -0
- package/dist/constants/decoders.js +641 -0
- package/dist/constants/decoders.js.map +1 -0
- package/dist/constants/encoders.d.ts +314 -0
- package/dist/constants/encoders.js +309 -0
- package/dist/constants/encoders.js.map +1 -0
- package/dist/constants/filter-options.d.ts +12099 -0
- package/dist/constants/filter-options.js +7 -0
- package/dist/constants/filter-options.js.map +1 -0
- package/dist/constants/format-options.d.ts +4319 -0
- package/dist/constants/format-options.js +7 -0
- package/dist/constants/format-options.js.map +1 -0
- package/dist/constants/formats.d.ts +18 -0
- package/dist/constants/formats.js +7 -0
- package/dist/constants/formats.js.map +1 -0
- package/dist/constants/hardware.d.ts +26 -0
- package/dist/constants/hardware.js +27 -0
- package/dist/constants/hardware.js.map +1 -0
- package/dist/constants/index.d.ts +10 -0
- package/dist/constants/index.js +6 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/options.d.ts +6217 -0
- package/dist/constants/options.js +7 -0
- package/dist/constants/options.js.map +1 -0
- package/dist/ffmpeg/index.d.ts +101 -0
- package/dist/ffmpeg/index.js +161 -0
- package/dist/ffmpeg/index.js.map +1 -0
- package/dist/ffmpeg/version.d.ts +6 -0
- package/dist/ffmpeg/version.js +7 -0
- package/dist/ffmpeg/version.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/audio-fifo.d.ts +399 -0
- package/dist/lib/audio-fifo.js +431 -0
- package/dist/lib/audio-fifo.js.map +1 -0
- package/dist/lib/binding.d.ts +242 -0
- package/dist/lib/binding.js +102 -0
- package/dist/lib/binding.js.map +1 -0
- package/dist/lib/bitstream-filter-context.d.ts +381 -0
- package/dist/lib/bitstream-filter-context.js +443 -0
- package/dist/lib/bitstream-filter-context.js.map +1 -0
- package/dist/lib/bitstream-filter.d.ts +140 -0
- package/dist/lib/bitstream-filter.js +154 -0
- package/dist/lib/bitstream-filter.js.map +1 -0
- package/dist/lib/codec-context.d.ts +1069 -0
- package/dist/lib/codec-context.js +1336 -0
- package/dist/lib/codec-context.js.map +1 -0
- package/dist/lib/codec-parameters.d.ts +664 -0
- package/dist/lib/codec-parameters.js +813 -0
- package/dist/lib/codec-parameters.js.map +1 -0
- package/dist/lib/codec-parser.d.ts +201 -0
- package/dist/lib/codec-parser.js +213 -0
- package/dist/lib/codec-parser.js.map +1 -0
- package/dist/lib/codec.d.ts +617 -0
- package/dist/lib/codec.js +746 -0
- package/dist/lib/codec.js.map +1 -0
- package/dist/lib/device.d.ts +294 -0
- package/dist/lib/device.js +326 -0
- package/dist/lib/device.js.map +1 -0
- package/dist/lib/dictionary.d.ts +333 -0
- package/dist/lib/dictionary.js +372 -0
- package/dist/lib/dictionary.js.map +1 -0
- package/dist/lib/error.d.ts +311 -0
- package/dist/lib/error.js +395 -0
- package/dist/lib/error.js.map +1 -0
- package/dist/lib/fifo.d.ts +416 -0
- package/dist/lib/fifo.js +453 -0
- package/dist/lib/fifo.js.map +1 -0
- package/dist/lib/filter-context.d.ts +714 -0
- package/dist/lib/filter-context.js +783 -0
- package/dist/lib/filter-context.js.map +1 -0
- package/dist/lib/filter-graph-segment.d.ts +161 -0
- package/dist/lib/filter-graph-segment.js +172 -0
- package/dist/lib/filter-graph-segment.js.map +1 -0
- package/dist/lib/filter-graph.d.ts +641 -0
- package/dist/lib/filter-graph.js +704 -0
- package/dist/lib/filter-graph.js.map +1 -0
- package/dist/lib/filter-inout.d.ts +202 -0
- package/dist/lib/filter-inout.js +261 -0
- package/dist/lib/filter-inout.js.map +1 -0
- package/dist/lib/filter.d.ts +243 -0
- package/dist/lib/filter.js +272 -0
- package/dist/lib/filter.js.map +1 -0
- package/dist/lib/format-context.d.ts +1335 -0
- package/dist/lib/format-context.js +1455 -0
- package/dist/lib/format-context.js.map +1 -0
- package/dist/lib/frame-utils.d.ts +116 -0
- package/dist/lib/frame-utils.js +98 -0
- package/dist/lib/frame-utils.js.map +1 -0
- package/dist/lib/frame.d.ts +1315 -0
- package/dist/lib/frame.js +1535 -0
- package/dist/lib/frame.js.map +1 -0
- package/dist/lib/hardware-device-context.d.ts +362 -0
- package/dist/lib/hardware-device-context.js +383 -0
- package/dist/lib/hardware-device-context.js.map +1 -0
- package/dist/lib/hardware-frames-context.d.ts +418 -0
- package/dist/lib/hardware-frames-context.js +471 -0
- package/dist/lib/hardware-frames-context.js.map +1 -0
- package/dist/lib/index.d.ts +35 -0
- package/dist/lib/index.js +60 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/input-format.d.ts +249 -0
- package/dist/lib/input-format.js +306 -0
- package/dist/lib/input-format.js.map +1 -0
- package/dist/lib/io-context.d.ts +698 -0
- package/dist/lib/io-context.js +771 -0
- package/dist/lib/io-context.js.map +1 -0
- package/dist/lib/log.d.ts +174 -0
- package/dist/lib/log.js +184 -0
- package/dist/lib/log.js.map +1 -0
- package/dist/lib/native-types.d.ts +1024 -0
- package/dist/lib/native-types.js +2 -0
- package/dist/lib/native-types.js.map +1 -0
- package/dist/lib/option.d.ts +953 -0
- package/dist/lib/option.js +1607 -0
- package/dist/lib/option.js.map +1 -0
- package/dist/lib/output-format.d.ts +222 -0
- package/dist/lib/output-format.js +259 -0
- package/dist/lib/output-format.js.map +1 -0
- package/dist/lib/packet.d.ts +521 -0
- package/dist/lib/packet.js +613 -0
- package/dist/lib/packet.js.map +1 -0
- package/dist/lib/rational.d.ts +251 -0
- package/dist/lib/rational.js +278 -0
- package/dist/lib/rational.js.map +1 -0
- package/dist/lib/software-resample-context.d.ts +552 -0
- package/dist/lib/software-resample-context.js +592 -0
- package/dist/lib/software-resample-context.js.map +1 -0
- package/dist/lib/software-scale-context.d.ts +344 -0
- package/dist/lib/software-scale-context.js +366 -0
- package/dist/lib/software-scale-context.js.map +1 -0
- package/dist/lib/stream.d.ts +383 -0
- package/dist/lib/stream.js +524 -0
- package/dist/lib/stream.js.map +1 -0
- package/dist/lib/sync-queue.d.ts +179 -0
- package/dist/lib/sync-queue.js +197 -0
- package/dist/lib/sync-queue.js.map +1 -0
- package/dist/lib/types.d.ts +34 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utilities.d.ts +1198 -0
- package/dist/lib/utilities.js +1302 -0
- package/dist/lib/utilities.js.map +1 -0
- package/dist/utils/electron.d.ts +49 -0
- package/dist/utils/electron.js +63 -0
- package/dist/utils/electron.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/libc.d.ts +11 -0
- package/dist/utils/libc.js +35 -0
- package/dist/utils/libc.js.map +1 -0
- package/dist/utils/variant.d.ts +26 -0
- package/dist/utils/variant.js +31 -0
- package/dist/utils/variant.js.map +1 -0
- package/dist/webrtc/index.d.ts +4 -0
- package/dist/webrtc/index.js +7 -0
- package/dist/webrtc/index.js.map +1 -0
- package/install/check.js +124 -0
- package/install/ffmpeg.js +66 -0
- package/package.json +165 -3
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import type { Frame } from '../lib/frame.js';
|
|
2
|
+
import type { WhisperModelName, WhisperVADModelName } from './utilities/whisper-model.js';
|
|
3
|
+
/**
|
|
4
|
+
* Transcribed audio segment from Whisper.
|
|
5
|
+
*
|
|
6
|
+
* Represents a single transcribed segment with timing information.
|
|
7
|
+
* Start and end times are in milliseconds from the beginning of the audio.
|
|
8
|
+
*/
|
|
9
|
+
export interface WhisperSegment {
|
|
10
|
+
/**
|
|
11
|
+
* Start time of the segment in milliseconds.
|
|
12
|
+
*/
|
|
13
|
+
start: number;
|
|
14
|
+
/**
|
|
15
|
+
* End time of the segment in milliseconds.
|
|
16
|
+
*/
|
|
17
|
+
end: number;
|
|
18
|
+
/**
|
|
19
|
+
* Transcribed text content.
|
|
20
|
+
*/
|
|
21
|
+
text: string;
|
|
22
|
+
/**
|
|
23
|
+
* Indicates if this segment represents a speaker turn.
|
|
24
|
+
* Only available when VAD (Voice Activity Detection) is enabled.
|
|
25
|
+
*/
|
|
26
|
+
turn?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Options for configuring Whisper transcriber.
|
|
30
|
+
*
|
|
31
|
+
* Controls model selection, language, GPU acceleration, VAD, and output behavior.
|
|
32
|
+
*/
|
|
33
|
+
export interface WhisperTranscriberOptions {
|
|
34
|
+
/**
|
|
35
|
+
* Path to whisper.cpp GGML model file.
|
|
36
|
+
*
|
|
37
|
+
* Required. Download models using {@link WhisperDownloader}.
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
model: WhisperModelName;
|
|
41
|
+
/**
|
|
42
|
+
* Path to VAD (Voice Activity Detection) model file.
|
|
43
|
+
*
|
|
44
|
+
* Optional. Enables better audio segmentation using Silero VAD.
|
|
45
|
+
* Download VAD models using {@link WhisperDownloader.downloadVADModel}.
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
vadModel?: WhisperVADModelName;
|
|
49
|
+
/**
|
|
50
|
+
* Directory where models will be downloaded if not already present.
|
|
51
|
+
*
|
|
52
|
+
* @default '<PROJECT_DIR>/models'
|
|
53
|
+
*/
|
|
54
|
+
modelDir?: string;
|
|
55
|
+
/**
|
|
56
|
+
* Language code for transcription.
|
|
57
|
+
*
|
|
58
|
+
* Use 'auto' for automatic language detection.
|
|
59
|
+
*
|
|
60
|
+
* @default 'auto'
|
|
61
|
+
*/
|
|
62
|
+
language?: string;
|
|
63
|
+
/**
|
|
64
|
+
* Audio queue size in seconds.
|
|
65
|
+
*
|
|
66
|
+
* Maximum duration of audio buffered before processing.
|
|
67
|
+
* Increase when using VAD for better segmentation.
|
|
68
|
+
*
|
|
69
|
+
* @default 3
|
|
70
|
+
*/
|
|
71
|
+
queue?: number;
|
|
72
|
+
/**
|
|
73
|
+
* Enable GPU acceleration for processing.
|
|
74
|
+
*
|
|
75
|
+
* Requires whisper.cpp built with GPU support (CUDA/Vulkan/Metal).
|
|
76
|
+
*
|
|
77
|
+
* @default true
|
|
78
|
+
*/
|
|
79
|
+
useGpu?: boolean;
|
|
80
|
+
/**
|
|
81
|
+
* GPU device index to use.
|
|
82
|
+
*
|
|
83
|
+
* Only relevant when multiple GPUs are available.
|
|
84
|
+
*
|
|
85
|
+
* @default 0
|
|
86
|
+
*/
|
|
87
|
+
gpuDevice?: number;
|
|
88
|
+
/**
|
|
89
|
+
* VAD threshold for voice activity detection.
|
|
90
|
+
*
|
|
91
|
+
* Higher values are more conservative (less likely to detect speech).
|
|
92
|
+
* Range: 0.0 to 1.0
|
|
93
|
+
*
|
|
94
|
+
* @default 0.5
|
|
95
|
+
*/
|
|
96
|
+
vadThreshold?: number;
|
|
97
|
+
/**
|
|
98
|
+
* Minimum speech duration for VAD in seconds.
|
|
99
|
+
*
|
|
100
|
+
* Audio chunks shorter than this will be filtered out.
|
|
101
|
+
*
|
|
102
|
+
* @default 0.1
|
|
103
|
+
*/
|
|
104
|
+
vadMinSpeechDuration?: number;
|
|
105
|
+
/**
|
|
106
|
+
* Minimum silence duration for VAD in seconds.
|
|
107
|
+
*
|
|
108
|
+
* Silence shorter than this won't trigger segment boundaries.
|
|
109
|
+
*
|
|
110
|
+
* @default 0.5
|
|
111
|
+
*/
|
|
112
|
+
vadMinSilenceDuration?: number;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* High-level Whisper transcriber for automatic speech recognition.
|
|
116
|
+
*
|
|
117
|
+
* Provides streaming audio transcription using OpenAI's Whisper model via whisper.cpp.
|
|
118
|
+
* Supports GPU acceleration, VAD (Voice Activity Detection), and real-time processing.
|
|
119
|
+
* Built on FFmpeg's whisper filter with automatic frame metadata extraction.
|
|
120
|
+
*
|
|
121
|
+
* Features:
|
|
122
|
+
* - Real-time streaming transcription
|
|
123
|
+
* - GPU acceleration (CUDA/Vulkan/Metal)
|
|
124
|
+
* - Voice Activity Detection for better segmentation
|
|
125
|
+
* - Automatic language detection
|
|
126
|
+
* - Type-safe transcription segments
|
|
127
|
+
* - Frame-based API for flexible integration
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```typescript
|
|
131
|
+
* import { Demuxer, Decoder, WhisperTranscriber } from 'node-av/api';
|
|
132
|
+
* import { WhisperDownloader } from 'node-av/api/utilities/whisper-model';
|
|
133
|
+
*
|
|
134
|
+
* // Download model
|
|
135
|
+
* const modelPath = await WhisperDownloader.downloadModel({
|
|
136
|
+
* model: 'base.en',
|
|
137
|
+
* outputPath: './models'
|
|
138
|
+
* });
|
|
139
|
+
*
|
|
140
|
+
* // Open audio and create decoder
|
|
141
|
+
* await using input = await Demuxer.open('podcast.mp3');
|
|
142
|
+
* using decoder = await Decoder.create(input.audio());
|
|
143
|
+
*
|
|
144
|
+
* // Create transcriber
|
|
145
|
+
* await using transcriber = await WhisperTranscriber.create({
|
|
146
|
+
* model: modelPath,
|
|
147
|
+
* language: 'en'
|
|
148
|
+
* });
|
|
149
|
+
*
|
|
150
|
+
* // Transcribe using decoded frames
|
|
151
|
+
* for await (const segment of transcriber.transcribe(decoder.frames(input.packets()))) {
|
|
152
|
+
* const timestamp = `[${(segment.start / 1000).toFixed(1)}s - ${(segment.end / 1000).toFixed(1)}s]`;
|
|
153
|
+
* console.log(`${timestamp}: ${segment.text}`);
|
|
154
|
+
* }
|
|
155
|
+
* ```
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```typescript
|
|
159
|
+
* // Real-time microphone transcription with VAD
|
|
160
|
+
* import { Demuxer, Decoder, WhisperTranscriber } from 'node-av/api';
|
|
161
|
+
* import { WhisperDownloader } from 'node-av/api/utilities/whisper-model';
|
|
162
|
+
*
|
|
163
|
+
* // Download VAD model
|
|
164
|
+
* const vadPath = await WhisperDownloader.downloadVADModel('silero-v5.1.2', './models');
|
|
165
|
+
*
|
|
166
|
+
* // Setup transcriber with VAD
|
|
167
|
+
* await using transcriber = await WhisperTranscriber.create({
|
|
168
|
+
* model: './models/ggml-medium.bin',
|
|
169
|
+
* language: 'en',
|
|
170
|
+
* queue: 10,
|
|
171
|
+
* vadModel: vadPath,
|
|
172
|
+
* vadThreshold: 0.5
|
|
173
|
+
* });
|
|
174
|
+
*
|
|
175
|
+
* // Live transcription from decoded audio frames
|
|
176
|
+
* using decoder = await Decoder.create(microphoneStream);
|
|
177
|
+
* for await (const segment of transcriber.transcribe(decoder.frames(microphonePackets))) {
|
|
178
|
+
* if (segment.turn) {
|
|
179
|
+
* console.log('\n--- New speaker turn ---');
|
|
180
|
+
* }
|
|
181
|
+
* console.log(segment.text);
|
|
182
|
+
* }
|
|
183
|
+
* ```
|
|
184
|
+
*
|
|
185
|
+
* @see {@link WhisperDownloader} For downloading Whisper and VAD models
|
|
186
|
+
* @see {@link Decoder} For audio decoding
|
|
187
|
+
* @see {@link Demuxer} For reading media files
|
|
188
|
+
*/
|
|
189
|
+
export declare class WhisperTranscriber implements Disposable {
|
|
190
|
+
private options;
|
|
191
|
+
private isClosed;
|
|
192
|
+
/**
|
|
193
|
+
* @param options - Transcriber configuration
|
|
194
|
+
*
|
|
195
|
+
* Use {@link create} factory method instead
|
|
196
|
+
*
|
|
197
|
+
* @internal
|
|
198
|
+
*/
|
|
199
|
+
private constructor();
|
|
200
|
+
/**
|
|
201
|
+
* Create a Whisper transcriber instance.
|
|
202
|
+
*
|
|
203
|
+
* Initializes the transcriber with the specified model and configuration.
|
|
204
|
+
* The transcriber can then process audio frames from any source.
|
|
205
|
+
*
|
|
206
|
+
* @param options - Transcriber configuration
|
|
207
|
+
*
|
|
208
|
+
* @returns Configured transcriber instance
|
|
209
|
+
*
|
|
210
|
+
* @throws {Error} If model file does not exist
|
|
211
|
+
*
|
|
212
|
+
* @throws {Error} If VAD model file does not exist (when vadModel specified)
|
|
213
|
+
*
|
|
214
|
+
* @example
|
|
215
|
+
* ```typescript
|
|
216
|
+
* import { WhisperTranscriber } from 'node-av/api';
|
|
217
|
+
*
|
|
218
|
+
* // Create transcriber with basic options
|
|
219
|
+
* await using transcriber = await WhisperTranscriber.create({
|
|
220
|
+
* model: './models/ggml-base.en.bin',
|
|
221
|
+
* language: 'en'
|
|
222
|
+
* });
|
|
223
|
+
* ```
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```typescript
|
|
227
|
+
* // Create transcriber with GPU and VAD support
|
|
228
|
+
* await using transcriber = await WhisperTranscriber.create({
|
|
229
|
+
* model: './models/ggml-base.bin',
|
|
230
|
+
* language: 'auto',
|
|
231
|
+
* useGpu: true,
|
|
232
|
+
* gpuDevice: 0,
|
|
233
|
+
* vadModel: './models/ggml-silero-v5.1.2.bin',
|
|
234
|
+
* vadThreshold: 0.5,
|
|
235
|
+
* queue: 10
|
|
236
|
+
* });
|
|
237
|
+
* ```
|
|
238
|
+
*/
|
|
239
|
+
static create(options: WhisperTranscriberOptions): Promise<WhisperTranscriber>;
|
|
240
|
+
/**
|
|
241
|
+
* Transcribe audio frames to text segments.
|
|
242
|
+
*
|
|
243
|
+
* Processes audio frames through the Whisper filter and yields transcribed segments.
|
|
244
|
+
* Each segment contains start/end timestamps and the transcribed text.
|
|
245
|
+
* Reads metadata directly from frame metadata tags (lavfi.whisper.text, lavfi.whisper.duration).
|
|
246
|
+
*
|
|
247
|
+
* The generator continues until the input stream ends or close() is called.
|
|
248
|
+
* When the input ends, the filter is flushed so audio still buffered in the
|
|
249
|
+
* whisper queue is transcribed before the generator finishes.
|
|
250
|
+
* Always use with `for await...of` to properly handle async iteration.
|
|
251
|
+
*
|
|
252
|
+
* @param frames - Audio frames (from Decoder.frames()) or single frame to transcribe
|
|
253
|
+
*
|
|
254
|
+
* @yields {WhisperSegment} Transcribed audio segments with timing and text
|
|
255
|
+
*
|
|
256
|
+
* @throws {FFmpegError} If filter initialization fails
|
|
257
|
+
*
|
|
258
|
+
* @example
|
|
259
|
+
* ```typescript
|
|
260
|
+
* import { Demuxer, Decoder, WhisperTranscriber } from 'node-av/api';
|
|
261
|
+
*
|
|
262
|
+
* await using input = await Demuxer.open('podcast.mp3');
|
|
263
|
+
* using decoder = await Decoder.create(input.audio());
|
|
264
|
+
* await using transcriber = await WhisperTranscriber.create({
|
|
265
|
+
* model: './models/ggml-base.en.bin',
|
|
266
|
+
* language: 'en'
|
|
267
|
+
* });
|
|
268
|
+
*
|
|
269
|
+
* // Transcribe decoded frames
|
|
270
|
+
* for await (const segment of transcriber.transcribe(decoder.frames(input.packets()))) {
|
|
271
|
+
* console.log(`[${segment.start}ms]: ${segment.text}`);
|
|
272
|
+
* }
|
|
273
|
+
* ```
|
|
274
|
+
*
|
|
275
|
+
* @example
|
|
276
|
+
* ```typescript
|
|
277
|
+
* // With custom timing format
|
|
278
|
+
* const audioFrames = decoder.frames(input.packets());
|
|
279
|
+
* for await (const segment of transcriber.transcribe(audioFrames)) {
|
|
280
|
+
* const startSec = (segment.start / 1000).toFixed(2);
|
|
281
|
+
* const endSec = (segment.end / 1000).toFixed(2);
|
|
282
|
+
* console.log(`[${startSec}s - ${endSec}s]: ${segment.text}`);
|
|
283
|
+
* }
|
|
284
|
+
* ```
|
|
285
|
+
*
|
|
286
|
+
* @example
|
|
287
|
+
* ```typescript
|
|
288
|
+
* // Process single frame
|
|
289
|
+
* using frame = decoder.decodeSync(packet);
|
|
290
|
+
* for await (const segment of transcriber.transcribe(frame)) {
|
|
291
|
+
* console.log(`Transcribed: ${segment.text}`);
|
|
292
|
+
* }
|
|
293
|
+
* ```
|
|
294
|
+
*/
|
|
295
|
+
transcribe(frames: AsyncIterable<Frame | null> | Frame | null): AsyncGenerator<WhisperSegment, void, unknown>;
|
|
296
|
+
/**
|
|
297
|
+
* Close transcriber and clean up resources.
|
|
298
|
+
*
|
|
299
|
+
* Releases filter graph and stops frame processing.
|
|
300
|
+
* Called automatically when using `await using` syntax.
|
|
301
|
+
*
|
|
302
|
+
* @example
|
|
303
|
+
* ```typescript
|
|
304
|
+
* // Automatic cleanup
|
|
305
|
+
* {
|
|
306
|
+
* await using transcriber = await WhisperTranscriber.create(options);
|
|
307
|
+
* // Use transcriber
|
|
308
|
+
* } // Automatically calls close()
|
|
309
|
+
*
|
|
310
|
+
* // Manual cleanup
|
|
311
|
+
* const transcriber = await WhisperTranscriber.create(options);
|
|
312
|
+
* try {
|
|
313
|
+
* // Use transcriber
|
|
314
|
+
* } finally {
|
|
315
|
+
* await transcriber.close();
|
|
316
|
+
* }
|
|
317
|
+
* ```
|
|
318
|
+
*/
|
|
319
|
+
close(): void;
|
|
320
|
+
/**
|
|
321
|
+
* Symbol.asyncDispose implementation for `await using` syntax.
|
|
322
|
+
*
|
|
323
|
+
* @internal
|
|
324
|
+
*/
|
|
325
|
+
[Symbol.dispose](): void;
|
|
326
|
+
}
|