convertToCaptions()v4.0.131
warning
此 API 假定 Whisper.cpp 的版本比稳定版本更新,以支持 tokenLevelTimestamps
。不过,这个版本可能会意外崩溃。
如果您 更喜欢使用稳定版本的 Whisper.cpp 并放弃 tokenLevelTimeStamps
支持,请使用旧版本的 Whisper.cpp(1.0.54 或更早版本)。
主观化函数,将 transcribe()
的输出转换为易于理解的字幕。
还可以将时间戳接近的单词组合在一起。
适用于 TikTok/Reel 类型的视频,逐字逐句地显示字幕。
transcribe.mjstsx
importpath from "path";import {transcribe ,convertToCaptions } from "@remotion/install-whisper-cpp";const {transcription } = awaittranscribe ({inputPath : "/path/to/audio.wav",whisperPath :path .join (process .cwd (), "whisper.cpp"),model : "medium.en",tokenLevelTimestamps : true,});const {captions } =convertToCaptions ({transcription ,combineTokensWithinMilliseconds : 200,});for (constline ofcaptions ) {console .log (line .text ,line .startInSeconds );}
transcribe.mjstsx
importpath from "path";import {transcribe ,convertToCaptions } from "@remotion/install-whisper-cpp";const {transcription } = awaittranscribe ({inputPath : "/path/to/audio.wav",whisperPath :path .join (process .cwd (), "whisper.cpp"),model : "medium.en",tokenLevelTimestamps : true,});const {captions } =convertToCaptions ({transcription ,combineTokensWithinMilliseconds : 200,});for (constline ofcaptions ) {console .log (line .text ,line .startInSeconds );}
选项
transcription
从 transcribe()
检索到的 transcription
对象。
必须将 tokenLevelTimestamps
选项设置为 true
。
combineTokensWithinMilliseconds
将接近的单词组合在一起。
如果不组合单词,如果正在使用逐字逐句的字幕,它们可能会显示很短的时间。
通过设置 0
来禁用组合。
建议值:200
。
返回值
以下形状的对象对象:
ts
typeCaption = {text : string;startInSeconds : number;};typeReturnValue = {captions :Caption [];};
ts
typeCaption = {text : string;startInSeconds : number;};typeReturnValue = {captions :Caption [];};
建议用法
这显示了如何在 Remotion 项目中呈现由 convertToCaptions()
生成的数据结构的逐字逐句字幕。
查看我们的 TikTok 模板 以获取完整的参考实现。
note
@remotion/install-whisper-cpp
无法在前端导入,它是一个 Node.js API。
此示例中仅导入 TypeScript 类型。
tsx
import type {Caption } from "@remotion/install-whisper-cpp";import {Sequence ,useVideoConfig } from "remotion";constCaptions :React .FC <{subtitles :Caption [];}> = ({subtitles }) => {const {fps } =useVideoConfig ();return (<>{subtitles .map ((subtitle ,index ) => {constnextSubtitle =subtitles [index + 1] ?? null;constsubtitleStartFrame =subtitle .startInSeconds *fps ;constsubtitleEndFrame =Math .min (nextSubtitle ?nextSubtitle .startInSeconds *fps :Infinity ,subtitleStartFrame +fps ,);return (<Sequence from ={subtitleStartFrame }durationInFrames ={subtitleEndFrame -subtitleStartFrame }><Subtitle key ={index }text ={subtitle .text } />;</Sequence >);})}</>);};
tsx
import type {Caption } from "@remotion/install-whisper-cpp";import {Sequence ,useVideoConfig } from "remotion";constCaptions :React .FC <{subtitles :Caption [];}> = ({subtitles }) => {const {fps } =useVideoConfig ();return (<>{subtitles .map ((subtitle ,index ) => {constnextSubtitle =subtitles [index + 1] ?? null;constsubtitleStartFrame =subtitle .startInSeconds *fps ;constsubtitleEndFrame =Math .min (nextSubtitle ?nextSubtitle .startInSeconds *fps :Infinity ,subtitleStartFrame +fps ,);return (<Sequence from ={subtitleStartFrame }durationInFrames ={subtitleEndFrame -subtitleStartFrame }><Subtitle key ={index }text ={subtitle .text } />;</Sequence >);})}</>);};
另请参阅
Please paste the Markdown content you would like me to translate into Chinese.