Last active
April 19, 2023 16:26
-
-
Save shenjackyuanjie/b9c466c8f2b854ea22944e23d5a68d59 to your computer and use it in GitHub Desktop.
whisper.cpp python CLI
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
目前还是一个硬编码玩意,等以后再完善