refactor(deps): migrate to nuxt v4

This commit is contained in:
2026-02-10 00:31:04 +08:00
parent f1b9cea060
commit 880b85f75d
88 changed files with 80 additions and 60 deletions

View File

@@ -0,0 +1,81 @@
import {
Combinator,
EmbedSubtitlesClip,
MP4Clip,
OffscreenSprite,
} from '@webav/av-cliper'
export interface SubtitleEmbeddingOptions {
color?: string
textBgColor?: string | null
type?: 'srt'
fontFamily?: string
fontSize?: number
letterSpacing?: string | null
bottomOffset?: number
strokeStyle?: string
lineWidth?: number | null
lineCap?: CanvasLineCap | null
lineJoin?: CanvasLineJoin | null
textShadow?: {
offsetX: number
offsetY: number
blur: number
color: string
}
videoWidth?: number
videoHeight?: number
}
export const useVideoSubtitleEmbedding = async (
videoUrl: string,
srtUrl: string,
options?: SubtitleEmbeddingOptions
) => {
if (!options) {
options = {
videoWidth: 1920,
videoHeight: 1080,
}
}
console.log(`video clip: ${videoUrl}`)
const videoClip = new MP4Clip((await fetch(videoUrl)).body!)
const videoSprite = new OffscreenSprite(videoClip)
videoSprite.time = { duration: videoClip.meta.duration, offset: 0 }
await videoSprite.ready
const srtSprite = new OffscreenSprite(
new EmbedSubtitlesClip(await (await fetch(srtUrl)).text(), {
videoWidth: 1920,
videoHeight: 1080,
fontSize: 36,
fontFamily: 'Noto Sans SC',
strokeStyle: 'none',
textShadow: {
offsetX: 2,
offsetY: 2,
blur: 6,
color: 'rgba(0, 0, 0, 0.35)',
},
...options,
})
)
await srtSprite.ready
srtSprite.time = { duration: videoClip.meta.duration, offset: 0 }
const combinator = new Combinator({
width: 1920,
height: 1080,
})
await combinator.addSprite(videoSprite)
await combinator.addSprite(srtSprite)
const srcBlob = URL.createObjectURL(
await new Response(combinator.output()).blob()
)
return srcBlob
}