首页 → 博客 → 把 YouTube 视频转成文字的三种办法
把 YouTube 视频转成文字的三种办法
把一段 YouTube 视频变成文字有三条路,它们在质量和你能拿它做什么上差别巨大。选错路的典型下场,就是得到一大团没有标点、没有时间轴的词。
方案一:YouTube 已经生成好的字幕
热门视频基本都已经有自动字幕。展开视频下方的文字稿面板,复制走,完事——不用写代码,也不花钱。
它在哪里失效:
- 质量参差。自动字幕是上传时一次性生成的,模型偏向覆盖面而非准确度。专业术语、人名和数字最先遭殃。
- 很多语种没有标点。你拿到的是一串词,用来检索还行,用来阅读没法看。
- 不具备规模。手工复制适合一个视频,不适合一个频道的存量。
- 可能压根没有。小频道或冷门语种常常就是没有字幕轨。
只想读一遍某个视频,到此为止就好——免费,十秒钟。要做成可重复的流程,继续往下看。
方案二:自己转录音轨
当文字本身重要时选这条路:自己的视频、研究素材、准备发布的内容。提取音频、送去识别,拿回带标点和时间轴的文本。
从你已经有的文件里提取音轨:
ffmpeg -i video.mp4 -vn -ac 1 -ar 16000 -b:a 48k audio.mp3
然后一个请求:
from openai import OpenAI
client = OpenAI(base_url="https://voicesscribe.com/v1", api_key="your key")
with open("audio.mp3", "rb") as f:
r = client.audio.transcriptions.create(
model="whisper-1", file=f, response_format="verbose_json",
)
print(r.text)
和自动字幕的差别立刻可见:有标点、大小写正确,还有精确到秒的分段——可以直接做成章节或字幕。
关于下载别人的视频
从 YouTube 下载视频受其服务条款限制,内容本身通常也是他人的版权作品。转录自己上传的视频,或者你拥有权利的素材,没有任何问题。除此之外,站得住脚的选项是内置文字稿面板,或者直接问作者要。
这不是法律意见,各国规则也不一样——但「工具让它变得很容易」从来不是抗辩理由,在搭流水线之前先弄清自己站在线的哪一边,是值得的。
方案三:整个频道存量的批量处理
面对自己的历史内容,要做的就是批量模式:一个文件夹、一个工作队列、以及从磁盘上已有结果推导出的进度。
import pathlib
from openai import OpenAI
client = OpenAI(base_url="https://voicesscribe.com/v1", api_key="your key")
OUT = pathlib.Path("transcripts"); OUT.mkdir(exist_ok=True)
for video in pathlib.Path("videos").glob("*.mp4"):
out = OUT / (video.stem + ".txt")
if out.exists():
continue # 已经做过——不要付两次钱
audio = video.with_suffix(".mp3")
# ffmpeg -i video.mp4 -vn -ac 1 -ar 16000 -b:a 48k audio.mp3
with audio.open("rb") as f:
out.write_text(client.audio.transcriptions.create(
model="whisper-1", file=f).text, encoding="utf-8")
一小时视频转成单声道音频约 25 MB,正好一个请求装得下。更长的录音需要切分——单次请求上限是 25 MB。
要字幕而不是纯文本
如果目标是把字幕挂回视频而不是阅读文字,直接请求字幕格式,省掉中间的转换步骤:
srt = client.audio.transcriptions.create(
model="whisper-1", file=f, response_format="srt",
)
open("video.srt", "w", encoding="utf-8").write(srt)
得到的 SRT 文件可以在视频的字幕设置里上传,替换掉自动生成的那一轨。对多数频道来说,仅这一步就是肉眼可见的质量跃升——你的字幕有了标点,人名也拼对了。
让文字值得发布
- 把词表喂进去。频道名、嘉宾名、产品名和反复出现的行话放进
prompt参数——识别错误正是集中在这些词上。 - 视频是单一语种就注明语种:
language="zh"能消除开头的语种误判。 - 保留时间轴。
verbose_json返回带起止时间的分段,是章节、切片和跳转链接的原料。 - 发布前通读一遍。十分钟修人名、分段落,决定了这是一篇有人读的页面还是一堵墙。
该选哪一种
| 情况 | 最佳选项 |
|---|---|
| 一个视频,现在就想知道讲了什么 | 内置文字稿面板 |
| 自己的视频,文字要发布出去 | 自己转录音轨 |
| 整个频道的存量 | 对音频做批量流水线 |
| 需要给视频配字幕 | 自己转录,response_format=srt |
| 别人的视频 | 文字稿面板,或者问作者 |
用你自己的录音试一试。 注册只需一分钟,免费额度足够判断识别质量。
免费获取 API 密钥常见问题
直接复制 YouTube 的文字稿可以吗?
单个视频完全可以——文字稿面板免费而且即时。但它是自动生成的,标点和专有名词不可靠,而且手工复制没法扩展到整个存量。
必须下载视频才能转录吗?
只需要音轨,而且只针对你拥有权利的视频。音频比视频小几十倍,画面在识别中根本不会被用到。
一小时的视频要处理多久?
几分钟:处理速度快于实时。用 ffmpeg 提取音轨通常比转录本身还慢一点。
能拿到时间戳吗?
可以。response_format=verbose_json 返回带精确起止时间的分段,srt 或 vtt 则直接给你一个现成的字幕文件。
自己转录比 YouTube 自动字幕更好吗?
同一段音频,专门跑一次转录会有标点、正确的大小写,人名和术语的处理也好得多——尤其是把词表通过 prompt 参数传进去之后。
相关阅读
- 从视频和网络研讨会自动生成 SRT 与 VTT 字幕 — 如何从录播视频或网络研讨会得到带时间轴的现成字幕:提取音轨、SRT 与 VTT 的区别、代码示例,以及常见问题的解决办法。
- 如何为音频存档搭建批量转录流水线 — 转录上万条录音而不丢失任何一条:任务队列、并发控制、重试策略、崩溃后续跑,以及如何把账单控制在预期之内。
- 如何提高语音识别准确率:八个实用方法 — 真正能改善转录质量的八件事:音频预处理、指定语种、prompt 词表、切分策略、响应格式,以及如何测量字错率。