Loading... <!-- 日文音声识别 --> # 日文音声识别 程序功能:将指定文件下的所有音频文件(日语音声)识别成文字,翻译并制作歌词文件。 [旧版打包程序地址](https://lolisis.com/usr/uploads/2023/01/1956743321.rar) [新版打包地址](https://lolisis.com/usr/uploads/2023/01/1221706331.rar) **新版不支持断点续传**,反向升级了属于是。 使用阿里云对象存储OSS,智能语音交互,机器翻译完成 > 2023-01-04 悲报,我把源码格式化了……这可能就是最后一个版本了。 ## 2022-9-5 ![2023-01-20-13-53-03.webp](https://lolisis.com/usr/uploads/2023/01/2056249800.webp) 目前支持: * 递归扫描指定地址下的所有mp3格式、wav格式音频 * 支持将wav、mp3转码成阿里云支持的最高采样率 * 可以无人值守 * 将请求结果进行记录 * 对返回识别成功但没有文本的音频进行记录。 * 对返回识别错误的音频进行记录(带错误码) * 支持提交请求后关闭程序,过一段时间再询问结果 下一步: * 解码,上传,请求,轮询,同步进行 * 对代码进行进行重构 **注意,注意,注意**更新后的亲自已经不支持“提交请求后关闭程序,过一段时间再询问结果” 一直忘了说了 ## 2022-11-30 补发教程,我自己做的,有问题的话请来这找我。 [补发教程](https://www.bilibili.com/video/BV1tY4y1M7PA) [Video SRT Pro的教程](https://www.yuque.com/viggo-t7cdi/videosrt-pro) ### 对于某些有台本的公司 像Whisp公司与RaRo公司(我不清楚字母关系)可以直接翻译台本。 不过这些台本很多是Shift JIS格式,需要转格式 有以下功能: 1. 使用腾讯云机器翻译,同时进行了简单的处理,每月5百万免费字符,仅支持日文。 2. 可以递归搜索txt格式文件,可以在统计字数与翻译模式中二选一。 3. 翻译作品加上-cn.txt,对于已经翻译过的作品不会再次统计 缺点: 1. 无法识别中文台本, 2. 无法识别非台本 不过问题不大,因为中文音声本来就少,中文台本就更少。就那么几个。 虽然程序差了点但能用,会写程序的人也不需要我这个垃圾程序,就这样吧,复制粘贴大法好。 [腾讯云翻译服务开通/设置](https://www.yuque.com/viggo-t7cdi/videosrt-pro/kccm3d) 记得在下方配置Secret ID, Secret KEY,开通教程在上访链接 以下直接把代码贴出来: ```python import json import time import oss2 import os import urllib.request from tencentcloud.common import credential from tencentcloud.common.profile.client_profile import ClientProfile from tencentcloud.common.profile.http_profile import HttpProfile from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException from tencentcloud.tmt.v20180321 import tmt_client, models filepath_middle = "" filepath_output = "" txtlist = [] errorlist = [] def count_words(filepath: str): a = readtext(filepath) if not a: return 0 a = preprocesstext(a) return len(a) def trans_2_request(c): text = "" try: # 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密 # 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取 cred = credential.Credential("Your Secret ID", "Your Secret KEY") # 实例化一个http选项,可选的,没有特殊需求可以跳过 httpProfile = HttpProfile() httpProfile.endpoint = "tmt.tencentcloudapi.com" # 实例化一个client选项,可选的,没有特殊需求可以跳过 clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile # 实例化要请求产品的client对象,clientProfile是可选的 client = tmt_client.TmtClient(cred, "ap-shanghai", clientProfile) # 实例化一个请求对象,每个接口都会对应一个request对象 req = models.TextTranslateRequest() params = { "SourceText": c, "Source": "ja", "Target": "zh", "ProjectId": 0 } req.from_json_string(json.dumps(params)) # 返回的resp是一个TextTranslateResponse的实例,与请求对象对应 resp = client.TextTranslate(req) # 输出json格式的字符串回包 # print(resp.to_json_string()) ab = json.loads(resp.to_json_string()) text = ab["TargetText"] except TencentCloudSDKException as err: print(err) return text def preprocesstext(a): a = a.replace("//", "* ") a = a.replace("\n;", "\n* ") a = a.replace(";", "> ") return a def postprocesstext(d): for i in range(1, 5): d = d.replace("\n\n\n", "\n\n") d = d.replace("*", "* ") d = d.replace(">", "> ") d = d.replace("“”", "”") d = d.replace("“……”", "“……") d = d.replace("“\n", "”\n") d = d.replace("“♪”", "♪”") return d def readtext(filepath: str): try: with open(filepath, encoding="Shift JIS") as f: a = f.read() print("Shift JIS\t" + filepath) return a except UnicodeDecodeError as e1: pass try: with open(filepath, encoding="utf-8") as f: print("utf-8\t\t" + filepath) a = f.read() return a except UnicodeDecodeError as e2: pass # 都不成功 print("不识别\t\t" + filepath) errorlist.append(filepath) return "" def ja_trans_2(filepath: str): """每月500万免费,更加便宜""" a = readtext(filepath) if not a: return a = preprocesstext(a) alist = a.split("\n") c = "" text = "" for key in alist: c = c + key + "\n" if len(c) > 1500: text = text + trans_2_request(c) c = "" if c: text = text + trans_2_request(c) text = postprocesstext(text) filepath_output = filepath[:-4] + "-cn.txt" with open(filepath_output, "a", encoding="utf-8") as f: f.write(text) return # translated ready translating def readtxt(path, txtlist): if os.path.isdir(path): filelist = os.listdir(path) for key in filelist: readtxt(path + "\\" + key, txtlist) elif path[-7:].lower() == "-cn.txt": pass elif path[-3:].lower() == "txt": output = path[:-4] + "-cn.txt" if os.path.exists(output): pass else: txtlist.append(path) if __name__ == '__main__': choice = 2 """ 2代表文本翻译,按字符计费,每月免费500万字符,超出后更加便宜\n 3只统计总字符数""" if choice == 2: print("文本翻译,按字符计费,每月免费100万字符,超出后更加便宜") elif choice == 3: print("统计总字符数") else: print("选项错误") exit() count = 0 path = input("输入文件(夹)路径:\n") path = path.replace('"', '') readtxt(path, txtlist) for key in txtlist: if choice == 2: ja_trans_2(key) elif choice == 3: count += count_words(key) if choice == 3: print(count) if errorlist: print("以下文件出现错误") with open("test/log.txt", "r", encoding="utf-8") as f: errlog = f.readlines() f = open("test/log.txt", "a", encoding="utf-8") for key in errorlist: print(key) if key + "\n" not in errlog: f.write(key + "\n") f.close() ``` 使用方法: 照教程搞到Secret ID, Secret KEY并记下来 下载pycharm,打开并新建项目 把代码复制进去,修改Secret ID, Secret KEY ![2023-01-20-13-53-49.webp](https://lolisis.com/usr/uploads/2023/01/10021257.webp) ![2023-01-20-13-53-56.webp](https://lolisis.com/usr/uploads/2023/01/2806659323.webp) 点击+号下载如图所示的包 ![2023-01-20-13-54-18.webp](https://lolisis.com/usr/uploads/2023/01/4105109963.webp) 记得修改这个choice调整功能。 ![2023-01-20-13-54-32.webp](https://lolisis.com/usr/uploads/2023/01/3158699872.webp) 或shift + f10 支持win11 ctrl + shift + c直接复制的地址,单个文件地址或文件夹地址,使用绝对地址 ![2023-01-20-13-54-46.webp](https://lolisis.com/usr/uploads/2023/01/820934011.webp) 腾讯云500万免费字符很多了。 问:为什么不整合到音声识别的程序中? 答:存音声识别代码的电脑,现在不在我身边,我也只有成品程序。 有问题请来b站找我。 ### 经过好心人提醒腾讯云每月有10小时免费语音识别额度 我没有验证,不过他的意思是这样就只可以用videosrt了 不过我还是不太喜欢video srt, 我试过翻译质量其实不比我的小软件差多少(本来大家都是调用别人的引擎),速度也不比我这个快(不如说我觉得更慢),而且价格还比这个贵,那我就继续用我的小垃圾程序,又不是不能用,效果是一样的。 不过video srt用来翻译生肉H片不错。 Last modification:February 2, 2023 © Allow specification reprint Like 6 如果觉得我的文章对你有用,请留下评论。
3 comments
门槛还是高,没有详细的教程,根本看不懂
1
补发了b站教程.