我正在尝试编写一个脚本,将 OpenAI 的 Whisper 用作语音转文本。基本思路是,我按下某个组合键,它开始录制到某个音频文件,我停止它,它分析音频并从中获取文本,然后将所有这些文本直接粘贴到我所使用的任何程序中的光标上。我不知道最后一部分该怎么做 - 我可以将其输出到剪贴板,但仍然需要额外按下几个键才能粘贴,我希望它尽可能流畅。有办法做我想做的事吗?
编辑:这是完整的脚本,您可以根据需要进行修改。
#!/bin/bash
gunchislas() (
echo $BASHPID > [scripts path]/pid.txt
arecord -f cd -D "default" --file-type raw | lame -r - "[scripts path]/.stt.mp3"
)
waiting() {
zenity --info --text="Taking speech to text input now."
}
gunchislas & waiting & wait -n
pkill -P $(cat [scripts path]/pid.txt) --signal 9
aplay "[scripts path]/clock.wav"
whisper "[scripts path]/.stt.mp3" --language en --model tiny | cut -c 28- | awk NF=NF RS= OFS=" " | xclip
rm "[scripts path]/.stt.mp3"
rm "[scripts path]/pid.txt"
aplay "[scripts path]/recorded.wav" & xdotool type "$(xclip -o)"
clock.wav 和 record.wav 只是我制作的小通知声音,这样你就可以知道它在做什么
要以编程方式在光标处输出文本,可以使用键盘模拟工具。这些工具将按键发送到应用程序。
xdotool type "$(xclip -o)"
看起来确实可以解决这个问题。但是:它只能在 Xorg 上运行,而不能在现代 Ubuntu 系统的默认系统 Wayland 上运行。
当要输入的文本变得更长时,它将被证明是不可靠的:有可能会出现按键丢失的情况。
要解决问题一,您可以使用
ydotool
或dotool
。这些工具适用于 Xorg 和 Wayland。要在 Wayland 上操作剪贴板,wl-clipboard
可以使用。为了解决第二个问题,请考虑粘贴剪贴板文本而不是键入。为此,请模拟快捷键Ctrl+V或Shift+ Insert。这样不仅可以可靠地粘贴所有文本,而且速度也会快得多。
在您的脚本中,文本已在剪贴板中。因此,粘贴而不是键入内容是显而易见的:您只需用 替换 即可
xdotool type "$(xclip -o)
。xdotool key ctrl+v
使用dotool
,命令将是:echo key ctrl+v | dotoolc
使用 ydotool,它变成
ydotool key 29:1 47:1 47:0 29:0