@deepgram/captions
Version:
Node implementation of Deepgram's WebVTT and SRT formatting. Given a transcription, this package can return a valid string to store as WebVTT or SRT caption files.
221 lines (151 loc) • 4.92 kB
Markdown
# Deepgram Captions
This package is the JavaScript implementation of Deepgram's WebVTT and SRT formatting. Given a transcription, this package can return a valid string to store as WebVTT or SRT caption files.
> Works with ANY transcription format.
## Installation
```bash
npm install @deepgram/captions
# - or -
# yarn add @deepgram/captions
```
## WebVTT from Deepgram Transcriptions
```ts
import { webvtt } from "@deepgram/captions";
const result = webvtt(deepgram_transcription_result);
```
## SRT from Deepgram Transcriptions
```ts
import { srt } from "@deepgram/captions";
const result = srt(deepgram_transcription_result);
```
## Converters
This package has been built to convert any transcription format. You only need to provide a `converter` class to provide the formatters with the correct data.
### Example Converter
A generic converter would look like this:
```ts
import { chunkArray, WordBase, IConverter } from "@deepgram/captions";
export class GenericConverter implements IConverter {
constructor(public transcriptionData: any) {}
getLines(lineLength: number = 8): WordBase[][] {
const results = this.transcriptionData;
let content: WordBase[][] = [];
results.paragraphs.forEach((paragraph) => {
if (paragraph.words.length > lineLength) {
content.push(...chunkArray(paragraph.words, lineLength));
} else {
content.push(paragraph.words);
}
});
return content;
}
}
```
It requires that `getLines` return the following data structure:
```ts
// const transcriptionData: WordBase[][] = [
const transcriptionData = [
[
{
word: string;
start: number;
end: number;
punctuated_word: string; // optional
}
]
]
```
Using your converter will look like this:
```ts
import { srt } from "@deepgram/captions";
const result = srt(new GenericConverter(transcription_result));
```
### Included Converters
#### Assembly AI
```ts
import { webvtt, AssemblyAiConverter } from "@deepgram/captions";
const result = webvtt(new AssemblyAiConverter(assembly_result));
```
## Output WebVTT
When transcribing https://dpgr.am/spacewalk.wav, and running it through our library, this is the WebVTT output.
```ts
import { webvtt } from "@deepgram/captions";
const result = webvtt(deepgram_transcription_result);
console.log(result);
```
This is the result:
```text
WEBVTT
NOTE
Transcription provided by Deepgram
Request Id: 686278aa-d315-4aeb-b2a9-713615544366
Created: 2023-10-27T15:35:56.637Z
Duration: 25.933313
Channels: 1
00:00:00.080 --> 00:00:03.220
Yeah. As as much as, it's worth celebrating,
00:00:04.400 --> 00:00:05.779
the first, spacewalk,
00:00:06.319 --> 00:00:07.859
with an all female team,
00:00:08.475 --> 00:00:10.715
I think many of us are looking forward
00:00:10.715 --> 00:00:13.215
to it just being normal and
00:00:13.835 --> 00:00:16.480
I think if it signifies anything, It is
00:00:16.779 --> 00:00:18.700
to honor the the women who came before
00:00:18.700 --> 00:00:21.680
us who, were skilled and qualified,
00:00:22.300 --> 00:00:24.779
and didn't get the same opportunities that we
00:00:24.779 --> 00:00:25.439
have today.
```
## Output SRT
When transcribing https://dpgr.am/spacewalk.wav, and running it through our library, this is the SRT output.
```ts
import { srt } from "@deepgram/captions";
const result = srt(deepgram_transcription_result);
console.log(result);
```
This is the result:
```text
1
00:00:00,080 --> 00:00:03,220
Yeah. As as much as, it's worth celebrating,
2
00:00:04,400 --> 00:00:07,859
the first, spacewalk, with an all female team,
3
00:00:08,475 --> 00:00:10,715
I think many of us are looking forward
4
00:00:10,715 --> 00:00:14,235
to it just being normal and I think
5
00:00:14,235 --> 00:00:17,340
if it signifies anything, It is to honor
6
00:00:17,340 --> 00:00:19,820
the the women who came before us who,
7
00:00:20,140 --> 00:00:23,580
were skilled and qualified, and didn't get the
8
00:00:23,580 --> 00:00:25,439
same opportunities that we have today.
```
## Documentation
You can learn more about the Deepgram API at [developers.deepgram.com](https://developers.deepgram.com/docs).
## Development and Contributing
Interested in contributing? We ❤️ pull requests!
To make sure our community is safe for all, be sure to review and agree to our
[Code of Conduct](./.github/CODE_OF_CONDUCT.md). Then see the
[Contribution](./.github/CONTRIBUTING.md) guidelines for more information.
## Getting Help
We love to hear from you so if you have questions, comments or find a bug in the
project, let us know! You can either:
- [Open an issue in this repository](https://github.com/deepgram/[reponame]/issues/new)
- [Join the Deepgram Github Discussions Community](https://github.com/orgs/deepgram/discussions)
- [Join the Deepgram Discord Community](https://discord.gg/xWRaCDBtW4)
[license]: LICENSE.txt