使用Cloudflare Stream从视频中提取音频
Cloudflare Stream热爱视频处理。但我们知道并非每个工作流程都需要完整的视频内容,播客的流行凸显了独立音频的吸引力。对开发者而言,仅为了获取音频而处理视频既缓慢、昂贵又复杂。
为何需要音频提取
视频文件是由高分辨率图像按时间顺序堆叠而成的密集容器,包含每秒帧数、分辨率、编解码器等高维数据。相比之下,音频文件简单得多——如果是单声道,仅定义为单一波形,技术特征由采样率(每秒音频样本数)和位深度(每个样本精度)决定。
随着计算密集型AI推理管道的兴起,许多客户希望执行仅需分析音频的下游工作流程,例如:
- 增强AI和机器学习:除了翻译和转录,还可将音频输入语音转文本模型进行语音识别、分析或AI驱动的摘要生成
- 改进内容审核:分析视频中的音频以确保内容安全合规
在这些场景中使用视频数据既昂贵又不必要。
两种灵活的音频提取方法
1. 通过媒体转换实现实时音频提取
媒体转换非常适合处理存储在任意位置的短视频(如社交媒体剪辑)。它通过直接从源获取媒体、在边缘优化并高效交付来工作。我们扩展了此工作流程以支持音频提取——只需在转换URL中添加mode=audio参数,即可从任意位置的视频文件中实时提取音频。
为域名启用媒体转换后,您可以从任何源视频提取音频,甚至可通过指定时间和持续时间来剪辑特定片段。
例如:
|
|
上述请求从源视频的5秒标记处开始生成10秒的M4A音频剪辑。
2. 音频下载
现在您可以直接为Stream中管理的任何内容下载音轨。除了生成可下载的MP4以供离线观看外,现在还可以创建并存储持久的M4A音频文件。
Workers AI演示
以下示例代码演示了如何将媒体转换与Cloudflare的Workers AI结合使用,创建两步流程:首先将视频音频转录为英语,然后翻译成西班牙语。
|
|
运行后,worker返回简洁的JSON响应,包含转录和翻译结果。
技术细节
作为Stream团队的暑期实习生,我负责交付这个期待已久的功能。第一步是理解Stream媒体管道的复杂架构。
当视频被Stream处理时,可能遵循两条路径之一:第一条是视频点播(VOD)管道,处理直接上传到Stream的视频,生成并存储一组编码视频段用于自适应比特率流媒体,可通过HLS/DASH流式传输;另一条是实时编码(OTFE)管道,驱动Stream Live和媒体转换服务,不预处理和存储文件,而是从客户自己的网站获取媒体并在边缘执行转换。
我的项目涉及扩展这两个管道以支持音频提取。
OTFE管道
OTFE管道专为实时操作设计。现有流程是为视觉任务设计的。当启用媒体转换的客户在其网站上发出请求时,该请求被路由到我们的边缘服务器(作为入口点),然后验证请求,并根据用户请求,OTFE将获取视频并生成调整大小版本或静态缩略图。
为了支持仅音频提取,我在现有工作流程基础上添加了新模式,涉及:
- 扩展验证逻辑:特别是对于音频,关键验证步骤是在尝试提取前验证源视频包含音轨
- 构建新的转换处理器:在OTFE平台内构建专门丢弃视觉轨道的新处理器,以提供高质量的M4A文件
VOD管道
与OTFE工作类似,此项目涉及将当前MP4下载工作流程扩展到仅音频的M4A下载,这带来了一系列有趣的技术决策。
创建视频下载的典型流程从向主API层发出POST请求开始,该层处理身份验证和验证,并创建相应的数据库记录,然后在异步队列中排队作业,由工作进程执行处理任务。
为启用VOD的音频下载,我引入了新的类型特定API端点(POST /downloads/{type}),同时保留传统的POST /downloads路由作为创建默认(或视频)下载类型的别名,确保完全向后兼容。
创建下载的核心工作由我们的异步队列执行,包括:
- 向消费者添加检测新音频下载类型的逻辑
- 拉取我们在API层定义的ffmpeg模板,以正确将音频流编码为高质量的M4A容器
通过扩展此管道的每个组件——从API路由到媒体处理命令——我能够交付一个备受期待的新功能,为客户解锁以音频为中心的工作流程!
仪表板截图
我们很高兴地宣布此功能也可在Stream仪表板中使用。只需导航到任何视频,您就会找到下载视频或仅下载音频的选项。
下载准备就绪后,您将看到文件的URL以及禁用的选项。
总结
这个项目解决了长期存在的客户需求,提供了更简单的方式来处理视频中的音频。我衷心感谢这整个旅程——从理解问题到交付解决方案,特别感谢团队在此过程中给予的指导和帮助。我们期待看到开发者如何使用这一新功能在Cloudflare Stream上构建更高效、更令人兴奋的应用程序。
您可以通过上传视频到Stream或使用API来尝试音频提取功能!如果您有兴趣亲自应对这类技术挑战,请探索我们的实习和早期人才计划,开始您自己的旅程。