日文音声识别
程序功能:将指定文件下的所有音频文件(日语音声)识别成文字,翻译并制作歌词文件。
新版不支持断点续传,反向升级了属于是。
使用阿里云对象存储OSS,智能语音交互,机器翻译完成
2023-01-04 悲报,我把源码格式化了……这可能就是最后一个版本了。
2022-9-5
目前支持:
- 递归扫描指定地址下的所有mp3格式、wav格式音频
- 支持将wav、mp3转码成阿里云支持的最高采样率
- 可以无人值守
将请求结果进行记录
- 对返回识别成功但没有文本的音频进行记录。
- 对返回识别错误的音频进行记录(带错误码)
- 支持提交请求后关闭程序,过一段时间再询问结果
下一步:
- 解码,上传,请求,轮询,同步进行
- 对代码进行进行重构
注意,注意,注意更新后的亲自已经不支持“提交请求后关闭程序,过一段时间再询问结果”
一直忘了说了
2022-11-30
补发教程,我自己做的,有问题的话请来这找我。
对于某些有台本的公司
像Whisp公司与RaRo公司(我不清楚字母关系)可以直接翻译台本。
不过这些台本很多是Shift JIS格式,需要转格式
有以下功能:
- 使用腾讯云机器翻译,同时进行了简单的处理,每月5百万免费字符,仅支持日文。
- 可以递归搜索txt格式文件,可以在统计字数与翻译模式中二选一。
- 翻译作品加上-cn.txt,对于已经翻译过的作品不会再次统计
缺点:
- 无法识别中文台本,
- 无法识别非台本
不过问题不大,因为中文音声本来就少,中文台本就更少。就那么几个。
虽然程序差了点但能用,会写程序的人也不需要我这个垃圾程序,就这样吧,复制粘贴大法好。
记得在下方配置Secret ID, Secret KEY,开通教程在上访链接
以下直接把代码贴出来:
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
点击+号下载如图所示的包
记得修改这个choice调整功能。
或shift + f10
支持win11 ctrl + shift + c直接复制的地址,单个文件地址或文件夹地址,使用绝对地址
腾讯云500万免费字符很多了。
问:为什么不整合到音声识别的程序中?
答:存音声识别代码的电脑,现在不在我身边,我也只有成品程序。
有问题请来b站找我。
经过好心人提醒腾讯云每月有10小时免费语音识别额度
我没有验证,不过他的意思是这样就只可以用videosrt了
不过我还是不太喜欢video srt, 我试过翻译质量其实不比我的小软件差多少(本来大家都是调用别人的引擎),速度也不比我这个快(不如说我觉得更慢),而且价格还比这个贵,那我就继续用我的小垃圾程序,又不是不能用,效果是一样的。
不过video srt用来翻译生肉H片不错。
2 条评论
门槛还是高,没有详细的教程,根本看不懂
补发了b站教程.