mirror of
https://github.com/OpenCut-app/OpenCut.git
synced 2026-07-13 21:52:53 +02:00
chore: normalize line endings
This commit is contained in:
@@ -1,49 +1,49 @@
|
||||
import type { TranscriptionSegment, CaptionChunk } from "@/lib/transcription/types";
|
||||
import {
|
||||
DEFAULT_WORDS_PER_CAPTION,
|
||||
MIN_CAPTION_DURATION_SECONDS,
|
||||
} from "@/constants/transcription-constants";
|
||||
|
||||
export function buildCaptionChunks({
|
||||
segments,
|
||||
wordsPerChunk = DEFAULT_WORDS_PER_CAPTION,
|
||||
minDuration = MIN_CAPTION_DURATION_SECONDS,
|
||||
}: {
|
||||
segments: TranscriptionSegment[];
|
||||
wordsPerChunk?: number;
|
||||
minDuration?: number;
|
||||
}): CaptionChunk[] {
|
||||
const captions: CaptionChunk[] = [];
|
||||
let globalEndTime = 0;
|
||||
|
||||
for (const segment of segments) {
|
||||
const words = segment.text.trim().split(/\s+/);
|
||||
if (words.length === 0 || (words.length === 1 && words[0] === "")) continue;
|
||||
|
||||
const segmentDuration = segment.end - segment.start;
|
||||
const wordsPerSecond = words.length / segmentDuration;
|
||||
|
||||
const chunks: string[] = [];
|
||||
for (let i = 0; i < words.length; i += wordsPerChunk) {
|
||||
chunks.push(words.slice(i, i + wordsPerChunk).join(" "));
|
||||
}
|
||||
|
||||
let chunkStartTime = segment.start;
|
||||
for (const chunk of chunks) {
|
||||
const chunkWords = chunk.split(/\s+/).length;
|
||||
const chunkDuration = Math.max(minDuration, chunkWords / wordsPerSecond);
|
||||
const adjustedStartTime = Math.max(chunkStartTime, globalEndTime);
|
||||
|
||||
captions.push({
|
||||
text: chunk,
|
||||
startTime: adjustedStartTime,
|
||||
duration: chunkDuration,
|
||||
});
|
||||
|
||||
globalEndTime = adjustedStartTime + chunkDuration;
|
||||
chunkStartTime += chunkDuration;
|
||||
}
|
||||
}
|
||||
|
||||
return captions;
|
||||
}
|
||||
import type { TranscriptionSegment, CaptionChunk } from "@/lib/transcription/types";
|
||||
import {
|
||||
DEFAULT_WORDS_PER_CAPTION,
|
||||
MIN_CAPTION_DURATION_SECONDS,
|
||||
} from "@/constants/transcription-constants";
|
||||
|
||||
export function buildCaptionChunks({
|
||||
segments,
|
||||
wordsPerChunk = DEFAULT_WORDS_PER_CAPTION,
|
||||
minDuration = MIN_CAPTION_DURATION_SECONDS,
|
||||
}: {
|
||||
segments: TranscriptionSegment[];
|
||||
wordsPerChunk?: number;
|
||||
minDuration?: number;
|
||||
}): CaptionChunk[] {
|
||||
const captions: CaptionChunk[] = [];
|
||||
let globalEndTime = 0;
|
||||
|
||||
for (const segment of segments) {
|
||||
const words = segment.text.trim().split(/\s+/);
|
||||
if (words.length === 0 || (words.length === 1 && words[0] === "")) continue;
|
||||
|
||||
const segmentDuration = segment.end - segment.start;
|
||||
const wordsPerSecond = words.length / segmentDuration;
|
||||
|
||||
const chunks: string[] = [];
|
||||
for (let i = 0; i < words.length; i += wordsPerChunk) {
|
||||
chunks.push(words.slice(i, i + wordsPerChunk).join(" "));
|
||||
}
|
||||
|
||||
let chunkStartTime = segment.start;
|
||||
for (const chunk of chunks) {
|
||||
const chunkWords = chunk.split(/\s+/).length;
|
||||
const chunkDuration = Math.max(minDuration, chunkWords / wordsPerSecond);
|
||||
const adjustedStartTime = Math.max(chunkStartTime, globalEndTime);
|
||||
|
||||
captions.push({
|
||||
text: chunk,
|
||||
startTime: adjustedStartTime,
|
||||
duration: chunkDuration,
|
||||
});
|
||||
|
||||
globalEndTime = adjustedStartTime + chunkDuration;
|
||||
chunkStartTime += chunkDuration;
|
||||
}
|
||||
}
|
||||
|
||||
return captions;
|
||||
}
|
||||
|
||||
@@ -1,47 +1,47 @@
|
||||
import type { LanguageCode } from "@/constants/language-constants";
|
||||
|
||||
export type TranscriptionLanguage = LanguageCode | "auto";
|
||||
|
||||
export interface TranscriptionSegment {
|
||||
text: string;
|
||||
start: number;
|
||||
end: number;
|
||||
}
|
||||
|
||||
export interface TranscriptionResult {
|
||||
text: string;
|
||||
segments: TranscriptionSegment[];
|
||||
language: string;
|
||||
}
|
||||
|
||||
export type TranscriptionStatus =
|
||||
| "idle"
|
||||
| "loading-model"
|
||||
| "transcribing"
|
||||
| "complete"
|
||||
| "error";
|
||||
|
||||
export interface TranscriptionProgress {
|
||||
status: TranscriptionStatus;
|
||||
progress: number;
|
||||
message?: string;
|
||||
}
|
||||
|
||||
export type TranscriptionModelId =
|
||||
| "whisper-tiny"
|
||||
| "whisper-small"
|
||||
| "whisper-medium"
|
||||
| "whisper-large-v3-turbo";
|
||||
|
||||
export interface TranscriptionModel {
|
||||
id: TranscriptionModelId;
|
||||
name: string;
|
||||
huggingFaceId: string;
|
||||
description: string;
|
||||
}
|
||||
|
||||
export interface CaptionChunk {
|
||||
text: string;
|
||||
startTime: number;
|
||||
duration: number;
|
||||
}
|
||||
import type { LanguageCode } from "@/constants/language-constants";
|
||||
|
||||
export type TranscriptionLanguage = LanguageCode | "auto";
|
||||
|
||||
export interface TranscriptionSegment {
|
||||
text: string;
|
||||
start: number;
|
||||
end: number;
|
||||
}
|
||||
|
||||
export interface TranscriptionResult {
|
||||
text: string;
|
||||
segments: TranscriptionSegment[];
|
||||
language: string;
|
||||
}
|
||||
|
||||
export type TranscriptionStatus =
|
||||
| "idle"
|
||||
| "loading-model"
|
||||
| "transcribing"
|
||||
| "complete"
|
||||
| "error";
|
||||
|
||||
export interface TranscriptionProgress {
|
||||
status: TranscriptionStatus;
|
||||
progress: number;
|
||||
message?: string;
|
||||
}
|
||||
|
||||
export type TranscriptionModelId =
|
||||
| "whisper-tiny"
|
||||
| "whisper-small"
|
||||
| "whisper-medium"
|
||||
| "whisper-large-v3-turbo";
|
||||
|
||||
export interface TranscriptionModel {
|
||||
id: TranscriptionModelId;
|
||||
name: string;
|
||||
huggingFaceId: string;
|
||||
description: string;
|
||||
}
|
||||
|
||||
export interface CaptionChunk {
|
||||
text: string;
|
||||
startTime: number;
|
||||
duration: number;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user