訂閱以接收新文章的通知:

隆重推出由 Workers AI 提供支援的 Stream 產生字幕

2024-06-20

閱讀時間:1 分鐘
本貼文還提供以下語言版本:English日本語한국어简体中文

使用 Stream 的最新功能,客戶現在只需按一下滑鼠即可輕鬆產生影片字幕:隨選影片和直播錄製影片的 AI 產生字幕。作為 Cloudflare 幫助構建更好的網際網路使命的一部分,此功能可供所有 Stream 客戶免費使用。

此解決方案旨在簡化流程,消除對第三方轉錄服務和複雜工作流程的需求。對於缺少字幕等協助工具的影片,手動轉錄可能非常耗時且不切實際,對於大型影片庫而言則尤為如此。傳統上,它需要專業服務,有時甚至是專門的團隊來轉錄音訊並將文字與影片一起交付,以便在播放期間顯示。由於各種原因(包括道德義務、法律合規性和不斷變化的觀眾偏好),字幕變得越來越普遍,我們希望減輕這種負擔。

藉助 Stream 的整合式解決方案,字幕產生過程可以無縫整合到您現有的影片管理工作流程中,從而節省時間和資源。無論您何時上傳影片,都可以輕鬆新增自動字幕以增強可存取性。現在可以在 Cloudflare 儀表板中或透過 API 請求產生字幕,所有這些都在熟悉且統一的 Stream 平台中完成。

此功能在設計時充分考慮了隱私和資料保護。與其他可能與外部實體分享內容的第三方轉錄服務不同,您的資料在整個字幕產生過程中都安全地保留在 Cloudflare 的生態系統中。Cloudflare 不會將您的內容用於模型訓練目的。有關資料保護的更多資訊,請檢閱您的資料和 Workers AI

開始使用

從 2024 年 6 月 20 日開始,此測試版可供所有 Stream 客戶以及專業和商業方案的訂閱者使用,其中包括 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 回應進行排序,並重新排序時間戳記以獲得最終準確的轉錄。

最終結果是能夠快速、高效且大規模地為更長的影片產生字幕。

立即嘗試

今天,我們為所有訂閱者以及 Pro 方案商業方案客戶提供此功能的公開測試版,我們對此感到非常興奮!如要開始使用,請先將影片上傳到 Stream。查看我們的文件以瞭解教程和當前測試版的限制。接下來,我們將著重於新增更多語言並支援更長的影片。

我們保護整個企業網路,協助客戶有效地建置網際網路規模的應用程式,加速任何網站或網際網路應用程式抵禦 DDoS 攻擊,阻止駭客入侵,並且可以協助您實現 Zero Trust

從任何裝置造訪 1.1.1.1,即可開始使用我們的免費應用程式,讓您的網際網路更快速、更安全。

若要進一步瞭解我們協助打造更好的網際網路的使命,請從這裡開始。如果您正在尋找新的職業方向,請查看我們的職缺
Developer PlatformDevelopersWorkers AIAI產品新聞Cloudflare Stream

在 X 上進行關注

Cloudflare|@cloudflare

相關貼文

2024年9月12日 下午2: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....