使用 OpenAI Whisper 提取字幕,并用 FFmpeg 添加字幕到视频
在这篇博客中,我将分享一个完整的流程: 如何使用 OpenAI 的 Whisper 从视频中提取字幕,并使用 FFmpeg 将字幕添加回视频中。
起因是每次在 X、油管上下载的视频,都是没有字幕的,想要分享给别人看或者自己看的时候不太方便。
今天重新鼓捣了一下 python 环境,吃瘪了 1 小时,最后重新开了个 conda 的新环境,python 和 pytorch 全部重装就好了…
另外结点也要换来换去找最快的结点,保证下载速度。
前置条件
在开始之前,请阅读 whisper 的官方 github,并确保已安装以下工具:
- Python(建议版本 3.8-3.11 )
- FFmpeg(选一个你喜欢的 package manager 装)
- Whisper(安装在你的 Python 环境中)
- 视频文件(例如:
example.mp4
)
步骤 1:安装必要的库
首先,我们需要安装 Whisper 和其他相关依赖:
1
2
3
4
5
6
pip install -U openai-whisper
# 或者
pip install git+https://github.com/openai/whisper.git
# on Windows using Chocolatey (https://chocolatey.org/)
choco install ffmpeg
确保你的环境中已经安装好 Whisper 和 ffmpeg:
1
2
whisper --help
ffmpeg -version
步骤 2:使用 Whisper 提取字幕(命令行版)
硬字幕与软字幕
视频上的字幕可分为 硬字幕 或 软字幕 。
硬字幕是硬编码到视频中的字幕,只要支持视频格式,就可以在任何媒体播放器上显示。这些字幕会刻录到视频中,一旦添加就无法删除。
软字幕不会刻录到视频中,是放到视频播放器里的。它们可以在视频播放过程中启用或禁用。这为用户提供了更大的灵活性,并让他们可以更好地控制如何观看视频。
在这里,仅介绍硬字幕的方法。
tips:如果你的视频文件较大,可能需要提取音频之后,对音频生成字幕文件。
生成 SRT 字幕文件
运行以下命令,将音频或视频直接转为字幕文件:
1
whisper input_video.mp4 --model base --language English --output_format srt
参数说明: input_video.mp4
:输入的视频文件。 --model base
:指定使用的模型(tiny, base, small, medium, large,模型越大效果越好,但需要更多资源)。 --language English
:input 视频语言为英语。 --output_format srt
:输出 .srt 格式的字幕文件。
这些参数的更多信息,可以查阅官方 GitHub。
完成后,你会在当前目录下得到一个名为 output.srt
的字幕文件。
文件内容类似:
1
2
3
4
5
6
7
8
9
1
00:00:00,000 --> 00:00:04,840
As we're in already a festive mood, I'd love to like get the visual intelligence part
2
00:00:04,840 --> 00:00:06,640
of this rolling.
步骤 3:用 FFmpeg 添加字幕到视频
使用 FFmpeg 将生成的字幕文件嵌入到视频中。
1
ffmpeg -i imput.mp4 -vf subtitles=output.srt output_video_subtitles.mp4
imput.mp4
和output_video_subtitles.mp4
分别代表要加字幕的视频和加好字幕的输出视频,可以替换成具体的文件路径。
subtitles=output.srt
这一块,我试了很多次路径,都会报错。好在上一步生成的字幕文件,也是在同一目录,直接拿来就可以用。这个有待后续研究。
可选参数
srt 字幕文件风格较少,ass 较丰富,具体可查阅这个博客。
步骤 4:检查结果
播放 output_with_subtitles.mp4
,确认字幕已正确显示并同步。
如果字幕显示有问题,请确保:
- 字幕文件编码为 UTF-8。
- 视频和字幕的时间戳匹配。
结束
这样就好了,模型是开源的好像也不记次数吧,加字幕啥的挺方便,不用再去剪影里面一个个点了。