OpenAI Whisper:在终端中免费转录
由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!
写日记有很多好处——有助于记忆、处理信息、维护心理健康等等!
我一直渴望成为一名“日记作者”,但作为一名开发者,我有一些偏好:
- 音频输入:我更喜欢说话来处理信息,而且速度更快,所以我更喜欢音频优先。
- 文本输出:我永远不会听自己说话的录音,所以我需要将音频转录成文本。
- 数字存储:易于访问、便于移动、可搜索、可备份——还需要我多说吗?
更喜欢视频版本?
问题及解决方法
我开始使用电脑内置的语音输入功能,但发现自己把所有时间都花在了纠正错误上——我根本控制不住自己!
最近,我偶然发现了 Whisper AI——一款由 OpenAI 开发的免费机器学习转录工具。玩转 AI,花 6 个小时实现自动化?!👋 赶紧报名!
本文将向您展示如何:
- 在您的终端中录制音频(!)。
- 将其誊写成日记。
- 将条目推送到Gitub进行备份。
这是极客们梦寐以求的日记体验。而且它是免费的。
(对于 macOS 用户,我们将设置 macOS 原生通知来确认日志条目。)
步骤 1:录制音频
首先,我们需要安装FFmpeg,这是一个集音频和视频处理于一体的工具。我们将使用它来录制音频,而 Whisper AI 将使用它来生成转录文本。
安装 ffmpeg
虽然可以通过多种方式安装,但最简单的方法是使用软件包管理器,例如macOS 上的Homebrew或Windows 上的Chocolatey。
自制啤酒brew install ffmpeg
巧克力味choco install ffmpeg
注意:在使用这些命令之前,您需要安装 brew(macOS 系统)或 cholcolatey(Windows 系统)。
找到您的输入框
FFmpeg 可以列出您计算机上的所有输入文件。由于它使用基于您操作系统的本地工具,因此您需要输入适用于您计算机的正确命令。
macOS
ffmpeg -f avfoundation -list_devices true -i ""
视窗
ffmpeg -f dshow -list_devices true -i dummy
Linux
ffmpeg -f alsa -list_devices true -i ""
上述命令将返回一个输入列表——包括视频和音频。请记下输出结果,并记下您需要的音频输入的确切名称。
根据此输出结果,我将选择“MacBook Pro 麦克风”:
AVFoundation audio devices:
[AVFoundation indev @ 0x14b004460] [0] MacBook Pro Microphone
[AVFoundation indev @ 0x14b004460] [2] Chris phone Microphone
录制音频
通过指定所需输入设备的名称,您可以指示 FFmpeg 录制音频。我们还会添加一些其他实用功能:
- 计时:该
-t标志位设置要录制的秒数。我将其设置为60录制一分钟。 - 文件名:您可以根据今天的日期设置输出文件名,
$(date +'%Y%m%d').mp3生成名为 YYYYmmdd.mp3 的 mp3 文件(即,根据录制日期)。 - 位置:设置输出文件的完整路径,使命令可以从任何目录执行。
目前我们掌握的情况如下:
macOS
ffmpeg -f avfoundation -i ":MacBook Pro Microphone" -t 60 "/Users/chris.pennington/journal/$(date +'%Y%m%d').mp3"
视窗
ffmpeg -f dshow -i ":Windows Microphone" -t 60 "/Users/chris.pennington/journal/$(date +'%Y%m%d').mp3"
Linux
ffmpeg -f alsa -i ":Linux Microphone" -t 60 "/Users/chris.pennington/journal/$(date +'%Y%m%d').mp3"
步骤二:转录
你已经有了录音,现在是时候把它转录成文字了。
安装 Whisper AI
这里的关键工具是 Whisper AI Python 库,所以你需要三样东西:
1. 安装 Python 3.8–3.11
您可以使用以下命令检查您的 Python 版本python3 -V。如果您没有此命令,或者您的版本不是 3.8–3.11,请前往python.org下载最新的 3.11 版本。
下载完成后,像安装其他程序一样安装 Python。Windows 和 macOS 都需要额外一个步骤:
- Windows:如果您使用的是 Windows 系统,请确保在安装过程中选中“将 Python.exe 添加到 PATH”。
- macOS:在 macOS 系统上,您还需要安装 Python 的安全命令以允许安全网络请求。Finder 应该会自动打开,显示您计算机上与 Python 关联的文件。将“安装证书”文件拖到终端,然后按 Enter 键Return运行安装命令。
2. 安装 pip
您还需要 Python 的包管理器 pip,因为我们将使用它来安装 Whisper AI。
它应该随 Python 一起安装,但你可以用以下命令再次确认python3 -m pip --version。
如果没有 pip,请运行以下命令进行安装:python3 -m pip install --upgrade pip
3. 安装 Whisper AI
最后,是点睛之笔——Whisper AI。这条命令会安装 Whisper AI 及其运行所需的依赖项。
pip install -U openai-whisper
将你的音频转录成文字
Whisper 让音频转录变得轻而易举。只需输入whisper文件名,即可自动将音频转录成多种格式。就是这么简单!
不过,您还可以向 Whisper AI 提供更多指令。以下是一些补充说明:
- 语言:默认情况下,Whisper 会检测您的语言,但您可以通过
--language标志指定语言(支持数十种语言!)。 - 模型: Whisper 提供多种转录质量级别。默认情况下,它使用较小的模型,但您可以通过设置
--model medium标志获得稍好一些(虽然速度较慢)的结果(对于英语使用者,我推荐这样做--model medium.en)。 - 文件类型:虽然 Whisper 可以输出多种文件类型(例如 srt、json 等),但对于日志记录,我需要一个 txt 文件,所以我将添加该
--outout_format txt标志。
最终结果如下:
whisper "/Users/chris.pennington/journal/$(date +'%Y%m%d').mp3" --model medium.en --language English --output_format txt
注意:我的 MacBook Pro 无法进行推理,所以我还添加了该--fp16 FALSE标志,以避免 Whisper AI 尝试推理的麻烦。
把它们组合起来
完整的命令将执行以下操作:1)录制音频;2)转录音频;3)删除音频文件。由于这三个命令都使用相同的文件路径,我们可以将其提取到一个单独的变量中,并在每个命令中引用该变量,从而稍微简化代码。
AUDIO_FILE="/Users/chris.pennington/journal/$(date +'%Y%m%d').mp3"
ffmpeg -f avfoundation -i ":MacBook Pro Microphone" -t 60 "$AUDIO_FILE"
whisper "$AUDIO_FILE" --model medium.en --language English --fp16 False --output_format txt
rm "$AUDIO_FILE"
注意:如果您使用的是 Windows 或 Linux 机器,请记得修改 FFmpeg 的第一个命令。
除非你想每天都输入这些命令,否则我建议你创建一个别名。我用的是Warp,所以我会右键点击命令,选择“另存为工作流”来保存我的脚本。Warp AI 甚至还能帮我自动填充标题和描述,并检测变量。
注意:您也可以为 shell 添加一个别名,指向此 shell 脚本。
步骤 3:备份到 GitHub
接下来,让我们将这些文件自动推送到在线仓库以保存您的日志。创建一个本地仓库(git init)并提交当前文件。
接下来,创建远程仓库并推送文件。
然后将以下内容添加到您的脚本中。
git add -A
git commit -m "$(date +'%Y%m%d') journal entry"
git push
步骤 4:macOS 通知
在 macOS 上,您可以使用 AppleScript 显示通知。我将在脚本末尾添加以下代码:
osascript -e 'display notification "Transcription Complete!" with title "Whisper AI"'
最终代码
这是我在 macOS 上的最终代码。由于我已经创建了一个代码仓库,需要cd进入相应的目录才能提交更改,所以我将修改脚本,使其首先切换到正确的目录。如果您使用的是 Windows 或 Linux 系统,请记得修改音频录制命令。
TODAY=$(date +'%Y%m%d')
cd /Users/chris.pennington/journal
ffmpeg -f avfoundation -i ":MacBook Pro Microphone" -t 60 "./$TODAY.mp3"
whisper "./$TODAY.mp3" --model medium.en --language English --output_format txt
rm "./$TODAY.mp3"
osascript -e 'display notification "Transcription Complete!" with title "Whisper AI"'
git add -A
git commit -m "$TODAY journal entry"
git push

