订阅以接收新文章的通知:

隆重推出由 Workers AI 提供支持的 Stream 生成字幕

2024-06-20

1 分钟阅读时间
这篇博文也有 English日本語한국어繁體中文版本。

使用 Stream 的最新功能,客户现在只需单击一下即可轻松生成视频字幕:AI 生成的点播视频和直播录制字幕。作为 Cloudflare 帮助构建更好的互联网使命的一部分,此功能可供所有 Stream 客户免费使用。

此解决方案旨在简化流程,消除对第三方转录服务和复杂工作流程的需求。对于缺少字幕等辅助功能的视频,手动转录可能非常耗时且不切实际,对于大型视频库而言则尤为如此。传统上,它需要专业服务,有时甚至是专门的团队来转录音频并将文本与视频一起交付,以便在播放期间显示。由于各种原因(包括道德义务、法律合规性和不断变化的观众偏好),字幕变得越来越普遍,我们希望减轻这种负担。

借助 Stream 的集成解决方案,字幕生成过程可以无缝集成到您现有的视频管理工作流程中,从而节省时间和资源。无论您何时上传视频,都可以轻松添加自动字幕以增强可访问性。现在可以在 Cloudflare 仪表板中或通过 API 请求生成字幕,所有这些都在熟悉且统一的 Stream 平台中完成。

此功能在设计时充分考虑了隐私和数据保护。与其他可能与外部实体共享内容的第三方转录服务不同,您的数据在整个字幕生成过程中都安全地保留在 Cloudflare 的生态系统中。Cloudflare 不会将您的内容用于模型训练目的。有关数据保护的更多信息,请查看您的数据和 Workers AI

开始使用

从 2024 年 6 月 20 日开始,此测试版可供所有 Stream 客户以及 Professional 和 Business 计划的订阅者使用,其中包括 100 分钟的视频存储。

要开始使用,请先将视频上传到 Stream(从 Cloudflare 仪表板或通过 API)。

接下来,导航到视频上的“字幕”选项卡,点击“添加字幕”,然后选择语言和“使用 AI 生成字幕”。最后,点击保存,几分钟后,新字幕就会显示在字幕管理器中,并自动在播放器中可用。也可以通过 API 生成字幕。

字幕通常在几分钟内生成。字幕准备好后,Stream 播放器将自动更新以将其提供给用户。HLS 和 DASH 清单也会更新,以便支持文本轨道的第三方播放器也可以显示它们。

支持点播视频和直播录制,无论它们是何时创建的。在测试版中,只能生成英文字幕,且视频时长不得超过 2 小时。语音清晰且背景噪音最小的视频转录质量最好。

我们对 AI 模型在测试中转录不同类型内容的效果感到满意。不过,有时结果并不完美,另一种方法可能更适合某些用例。请务必检查所生成字幕的准确性是否适合您的需求。

技术细节

使用 Workers AI 构建

Stream 工程团队使用 Workers AI 构建了这项新功能,使我们能够通过单个 API 调用访问 Whisper 模型(一种开源自动语音识别模型)。使用 Workers AI,通过开箱即用的解决方案从根本上简化了 AI 模型的部署、集成和扩展。我们的团队不再需要处理基础设施的复杂性,从而能够专注于构建自动字幕功能。

编写利用 AI 模型的软件可能涉及多个挑战。首先,难以配置适当的硬件基础设施。AI 模型需要大量计算资源才能高效运行,并且需要 GPU 等专用硬件,而这些硬件可能成本高昂且难以管理。大规模部署 AI 模型也是一项艰巨的任务,涉及平衡工作负载分配、最小化延迟、优化吞吐量和保持高可用性等复杂性。Workers AI 不仅解决了管理底层基础设施的难题,还可以根据需要自动扩展。

使用 Workers AI 将一项艰巨的任务转变为只需不到 30 行代码即可转录音频文件的 Worker。

快速且大规模地为视频添加字幕

import { Ai } from '@cloudflare/ai'


export interface Env {
 AI: any
}


export type AiVTTOutput = {
 vtt?: string
}


export default {
 async fetch(request: Request, env: Env) {
   const blob = await request.arrayBuffer()


   const ai = new Ai(env.AI)
   const input = {
     audio: [...new Uint8Array(blob)],
   }


   try {
     const response: AiVTTOutput = (await ai.run(
       '@cf/openai/whisper-tiny-en',
       input
     )) as any
     return Response.json({ vtt: response.vtt })
   } catch (e) {
     const errMsg =
       e instanceof Error
         ? `${e.name}\n${e.message}\n${e.stack}`
         : 'unknown error type'
     return new Response(`${errMsg}`, {
       status: 500,
       statusText: 'Internal error',
     })
   }
 },
}

Stream 团队希望确保此功能在大规模运行时能够快速且高性能,这需要工程工作来处理大量视频,无论时长如何。

首先,我们的团队需要在运行 AI 推理之前对音频进行预处理,以确保输入与 Whisper 的输入格式和要求兼容。

视频内容千差万别,从用手机拍摄的短小粗糙的视频,到长达数小时的高质量好莱坞电影,应有尽有。视频可能无声,也可能包含动作驱动的杂音。此外,Stream 的点播视频包括直播录制,这些录制的打包方式与作为完整文件上传的视频不同。由于存在这种多样性,音频输入存储在一系列不同的容器格式中,具有不同的持续时间和不同的文件大小。我们确保我们的音频文件格式正确,符合 Whisper 的要求。

预处理的一个方面是确保文件具有合理的时长,以优化推理。Whisper 的音频文件转录时长“最佳点”是 30 秒。正如他们在 Github 讨论中指出的那样:“如果太短,会缺乏周围的背景。你会更频繁地删减句子。很多句子会变得毫无意义。如果太长,你需要越来越大的模型,来容纳你希望模型跟踪的含义的复杂性。”幸运的是,Stream 已经将视频分割成更小的片段,以确保在 Web 上播放时快速交付。我们编写了功能,在发送给 Workers AI 之前将这些小片段连接成 30 秒的批次。

为了优化处理速度,我们的团队尽可能多地并行化操作。通过同时创建 30 秒的音频批次并向 Workers AI 发送请求,我们充分利用了 Workers AI 平台的可扩展性。这样做大大减少了生成字幕所需的时间,但增加了一些额外的复杂性。由于我们并行向 Workers AI 发送请求,因此转录响应可能会无序到达。例如,如果视频时长为一分钟,则生成视频后 30 秒字幕的请求可能会在生成视频前 30 秒字幕的请求之前完成。字幕需要按顺序排列才能与视频对齐,因此我们的团队必须保持对音频批次顺序的理解,以确保我们最终组合的 WebVTT 字幕文件与视频正确同步。我们对传入的 Workers AI 响应进行排序,并重新排序时间戳以获得最终准确的转录。

最终结果是能够快速、高效且大规模地为较长视频生成字幕。

马上试试吧

今天,我们为所有订阅者以及 ProBusiness 计划客户提供此功能的公开测试版,我们对此感到非常兴奋!如要开始使用,请先将视频上传到 Stream。查看我们的文档以了解教程和当前测试版的限制。接下来,我们将着重于添加更多语言并支持更长的视频。

我们保护整个企业网络,帮助客户高效构建互联网规模的应用程序,加速任何网站或互联网应用程序抵御 DDoS 攻击,防止黑客入侵,并能协助您实现 Zero Trust 的过程

从任何设备访问 1.1.1.1,以开始使用我们的免费应用程序,帮助您更快、更安全地访问互联网。要进一步了解我们帮助构建更美好互联网的使命,请从这里开始。如果您正在寻找新的职业方向,请查看我们的空缺职位
Developer Platform开发人员Workers AIAI产品新闻Cloudflare Stream

在 X 上关注

Cloudflare|@cloudflare

相关帖子

2024年9月12日 14:15

Protecting APIs from abuse using sequence learning and variable order Markov chains

At Cloudflare, we protect customer APIs from abuse. This is no easy task, as abusive traffic can take different forms, from giant DDoS attacks to low-and-slow credential stuffing campaigns. We now address this challenge in a new way: by looking outside typical volumetric measures and using statistical machine learning to find important API client request sequences....