Skip to content

Instantly share code, notes, and snippets.

@shenjackyuanjie
Last active April 19, 2023 16:26
Show Gist options
  • Save shenjackyuanjie/b9c466c8f2b854ea22944e23d5a68d59 to your computer and use it in GitHub Desktop.
Save shenjackyuanjie/b9c466c8f2b854ea22944e23d5a68d59 to your computer and use it in GitHub Desktop.
whisper.cpp python CLI
import os
import sys
import subprocess
from pathlib import Path
LARGE_MODEL_PATH = Path("model/ggml-large.bin")
SMALL_MODEL_PATH = Path("model/ggml-small.bin")
CHECK_DIRS = ["result", "sample"]
HELP_MESSAGE = """
参数列表:
-lm --large_model: 是否使用大模型
-sm --small_model: 是否使用小模型
(默认使用小模型)
-f --ffmpeg: 使用ffmpeg进行音频转换
-nf --no-ffmpeg: 不使用ffmpeg进行音频转换
(默认使用ffmpeg进行音频转换)
-i --input <file> : 输入文件路径
-l --lang <lang> : 语言 (zh, en, ja, ko, auto)
(默认使用auto)
"""
FFMPEG_CMD_TEMPLATE = ["bin/ffmpeg.exe", "-i", "{src}", "-ar", "16000", "-ac", "1", "-c:a", "pcm_s16le", "{dst}"]
WHISPER_CMD_TEMPLATE = [
"bin/main.exe", "-m", "{model}", "-f", "{sample}", "-t", "12", "-ocsv", "-of", "{dst}", "-l", "{lang}", "-pp", "-pc"
]
if __name__ == "__main__":
if len(sys.argv) < 2:
print("参数错误")
print(HELP_MESSAGE)
exit(1)
model_path = SMALL_MODEL_PATH
use_ffmpeg = True
lang = "auto"
for i in range(1, len(sys.argv)):
if sys.argv[i] == "-lm" or sys.argv[i] == "--large_model":
model_path = LARGE_MODEL_PATH
elif sys.argv[i] == "-sm" or sys.argv[i] == "--small_model":
model_path = SMALL_MODEL_PATH
elif sys.argv[i] == "-i" or sys.argv[i] == "--input":
input_file = Path(sys.argv[i + 1])
elif sys.argv[i] == "-f" or sys.argv[i] == "--ffmpeg":
use_ffmpeg = True
elif sys.argv[i] == "-nf" or sys.argv[i] == "--no-ffmpeg":
use_ffmpeg = False
elif sys.argv[i] == "-l" or sys.argv[i] == "--lang":
lang = sys.argv[i + 1]
for dir in CHECK_DIRS:
Path(dir).mkdir(exist_ok=True)
sample_file = input_file
result_file = f"result/{input_file.stem}-{model_path.stem}-lang-{lang}"
if use_ffmpeg:
sample_file = Path("sample") / (input_file.stem + ".wav")
if use_ffmpeg:
cmd_list = FFMPEG_CMD_TEMPLATE.copy()
cmd_list[2] = input_file
cmd_list[-1] = sample_file
subprocess.call(cmd_list)
print("===" * 20)
print(f"输入文件路径: {input_file}")
print(f"采样文件路径: {sample_file}")
print(f"结果保存路径: {result_file}")
print(f"模型路径: {model_path}")
print(f"是否使用 ffmpeg 进行音频转换: {use_ffmpeg}")
print(f"语言: {lang}")
print("===" * 20)
cmd_list = WHISPER_CMD_TEMPLATE.copy()
cmd_list[2] = model_path
cmd_list[3] = sample_file
cmd_list[-5] = result_file
cmd_list[-3] = lang
subprocess.call(cmd_list)
@shenjackyuanjie
Copy link
Author

目前还是一个硬编码玩意,等以后再完善

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment