日文音声识别

程序功能:将指定文件下的所有音频文件(日语音声)识别成文字,翻译并制作歌词文件。

旧版打包程序地址
新版打包地址

新版不支持断点续传,反向升级了属于是。

使用阿里云对象存储OSS,智能语音交互,机器翻译完成

2023-01-04 悲报,我把源码格式化了……这可能就是最后一个版本了。

2022-9-5

2023-01-20-13-53-03.webp

目前支持:

  • 递归扫描指定地址下的所有mp3格式、wav格式音频
  • 支持将wav、mp3转码成阿里云支持的最高采样率
  • 可以无人值守
  • 将请求结果进行记录

    • 对返回识别成功但没有文本的音频进行记录。
    • 对返回识别错误的音频进行记录(带错误码)
  • 支持提交请求后关闭程序,过一段时间再询问结果

下一步:

  • 解码,上传,请求,轮询,同步进行
  • 对代码进行进行重构

注意,注意,注意更新后的亲自已经不支持“提交请求后关闭程序,过一段时间再询问结果”

一直忘了说了

2022-11-30

补发教程,我自己做的,有问题的话请来这找我。

补发教程

Video SRT Pro的教程

对于某些有台本的公司

像Whisp公司与RaRo公司(我不清楚字母关系)可以直接翻译台本。

不过这些台本很多是Shift JIS格式,需要转格式

有以下功能:

  1. 使用腾讯云机器翻译,同时进行了简单的处理,每月5百万免费字符,仅支持日文。
  2. 可以递归搜索txt格式文件,可以在统计字数与翻译模式中二选一。
  3. 翻译作品加上-cn.txt,对于已经翻译过的作品不会再次统计

缺点:

  1. 无法识别中文台本,
  2. 无法识别非台本

不过问题不大,因为中文音声本来就少,中文台本就更少。就那么几个。

虽然程序差了点但能用,会写程序的人也不需要我这个垃圾程序,就这样吧,复制粘贴大法好。

腾讯云翻译服务开通/设置

记得在下方配置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
2023-01-20-13-53-49.webp
2023-01-20-13-53-56.webp

点击+号下载如图所示的包
2023-01-20-13-54-18.webp

记得修改这个choice调整功能。
2023-01-20-13-54-32.webp

或shift + f10

支持win11 ctrl + shift + c直接复制的地址,单个文件地址或文件夹地址,使用绝对地址
2023-01-20-13-54-46.webp

腾讯云500万免费字符很多了。

问:为什么不整合到音声识别的程序中?

答:存音声识别代码的电脑,现在不在我身边,我也只有成品程序。

有问题请来b站找我。

经过好心人提醒腾讯云每月有10小时免费语音识别额度

我没有验证,不过他的意思是这样就只可以用videosrt了

不过我还是不太喜欢video srt, 我试过翻译质量其实不比我的小软件差多少(本来大家都是调用别人的引擎),速度也不比我这个快(不如说我觉得更慢),而且价格还比这个贵,那我就继续用我的小垃圾程序,又不是不能用,效果是一样的。

不过video srt用来翻译生肉H片不错。

最后修改:2023 年 02 月 02 日
如果觉得我的文章对你有用,留个言就可以了