最近好奇抖音上的“录音转文字翻转视频”是如何实现的。
背景
研究了一下,发现常见的做法是使用剪映的一键生成功能:
它会先对录音进行语音转文字,得到字幕文件,然后根据字幕渲染出文字翻转的动态效果。
不过我尝试后觉得效果并不理想:
- 这是付费功能;
- 可定制性较差,生成效果比较随机;
- 难以满足一些定制化需求。
当然,也有 AE 的 Typemonkey 插件(或类似插件)可以生成翻转大字动画。流程是:
- 将语音先转成字幕文字;
- 导入 AE 插件生成动画;
- 手动调整字幕在时间轴上的位置;
但这种方式在长文本时生成非常慢,渲染过程冗长,无法快速预览,对效率不太友好,所以也放弃了。
我的思路
于是我想到:直接用 Whisper 语音识别生成字幕+时间戳,再利用 HTML Canvas 做动画渲染。
HTML 动画部分基本靠 AI 辅助实现,不算难,重点放在本地部署 Whisper 上。
Whisper 部署
1. Python 版本 Whisper
最先尝试的是 Python 版 Whisper(openai/whisper):
- 踩坑点:CUDA、PyTorch、显卡驱动以及 Whisper 版本兼容性。
- 小模型:识别速度快,但准确率低;
- 大模型(如
large
):准确率高,但显存占用极大(10G+),速度非常慢。
举例:10 多分钟的音频需要几十分钟才能识别。
➡️ 体验不佳,最终放弃。
2. C++ 版本 Whisper(推荐)
后来发现了 Whisper.cpp(ggml-org/whisper.cpp),支持 GPU 编译,效率提升显著。
实测:10 分钟的音频只需 2 分钟以内 就能完成识别。
安装步骤(以 Windows + NVIDIA 显卡为例):
- 安装 CUDA Toolkit(需勾选 Visual Studio 集成)。
- 安装 Visual Studio 2022(Community 版即可,需含 C++ 桌面开发工具)。
- 克隆仓库:
git clone https://github.com/ggml-org/whisper.cpp cd whisper.cpp
- 使用 CMake + Visual Studio 编译 GPU 版本:
cmake -B build -DGGML_CUDA=1 cmake --build build --config Release
- 下载 Whisper 模型(如
ggml-medium.bin
或ggml-large-v3.bin
): - 运行测试:
会生成带有时间戳的.\build\bin\Release\main.exe -m models\ggml-medium.bin -f test.wav --output-srt
.srt
字幕文件。
踩坑提示
- 如果 CUDA 安装时没勾选 VS 集成,CMake 编译会一直失败,提示找不到CUDA,哪怕他在路径中;
- Linux 下编译相对顺畅,Windows 环境更容易遇坑。