当前位置:   article > 正文

利用Python与Whisper革新视频翻译:打造高精度字幕翻译流程。_uvr5python调用

uvr5python调用

实现流程需要使用以下的工具。

1.python,需要自行安装,

2.python的音视频处理库moviepy安装

pip install moviepy

3.Whisper语音识别,在我之前的文章中有:Whisper语音识别安装教程

4.文字翻译,我这里使用百度翻译。

步骤一,提取视频中的音频。

首先,需要从视频中提取音频。使用python的moviepy库。

  1. from moviepy.editor import AudioFileClip
  2. video = "video.mp4"#假如有一个视频文件
  3. audio = "audio.mp3"#分离出来的音频文件
  4. # 提取音频
  5. clip = AudioFileClip(video)
  6. clip.write_audiofile(audio)
  7. clip.close()

需要注意,分离出来的音频可能会存在背景音,没有背景音的可以直接识别音频。

这里可以使用UVR5人声伴奏分离,分离出人声。

UVR5百度网盘下载链接:链接:https://pan.baidu.com/s/1jBcTr3MTyZt12QIU4JryKg?pwd=znuu 提取码:znuu

UVR5的b站使用教程:最强伴奏人声提取工具 - 开源免费,一键安装,直接使用!| Ultimate Vocal Remover | UVR5_哔哩哔哩_bilibili

我这里使用GPT-SoVITS的api来实现人声伴奏分离

  1. import requests
  2. response = requests.post("http://localhost:9873/run/uvr_convert", json={
  3.   "data": [
  4.     "HP2_all_vocals",
  5.     "E:/视频翻译添加字幕/mp3",#输入待处理音频文件夹路径
  6.     "E:/视频翻译添加字幕/mp3",#定输出主人声文件夹
  7.     {"name":"zip.zip","data":"data:@file/octet-stream;base64,UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA=="},#也可批量输入音频文件, 二选一, 优先读文件夹
  8.     "E:/视频翻译添加字幕/mp3",#指定输出非主人声文件夹
  9.     10,#人声提取激进程度
  10.     "mp3",#导出文件格式
  11. ]}).json()
  12. data = response["data"]
  13. print(data)#输出返回的内容

GPT-SoVITS是花儿不哭大佬研发的低成本AI音色克隆软件。目前只有TTS(文字转语音)功能。

这是一个声音克隆,文字转语音的软件。

GPT-SoVITS的中文教程文档:GPT-SoVITS指南 · 语雀

只是刚好有人声伴奏分离这个api就拿来用一下了。

步骤二,处理好音频后就是直接使用Whisper来实现语音转文字的效果。

可以直接到音频目录文件中的cmd窗口中执行以下命令。

whisper  audio.mp3 --model medium

medium是模型,需要根据电脑的显存来进行选择。

python代码。

为了让python可以执行命令行中的命令,可以使用subprocess库

pip install subprocess

  1. import subprocess
  2. # 要执行的命令
  3. command = "whisper audio.mp3 --model medium"  # 这里使用的是 Windows 的 dir 命令,可以替换为其他命令
  4. # 打开命令行并执行命令
  5. process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  6. # 获取命令执行结果
  7. output, error = process.communicate()
  8. # 打印结果
  9. print("Output:")
  10. print(output.decode())  # 将字节转换为字符串并打印输出
  11. if error:
  12.     print("Error:")
  13.     print(error.decode())  # 将字节转换为字符串并打印错误信息

在执行这个代码后,会得到下面的几个文件。

其中的.srt就是视频字幕文件,它的格式是这样的,有编号,有时间。

1

00:00:00,000 --> 00:00:04,000

This is unlimited money, and the next person to buy a Feastables bar at my local Walmart,

2

00:00:04,000 --> 00:00:05,800

we're going to kidnap and give this money to.

3

00:00:05,800 --> 00:00:07,200

Her hand is on the Feastables.

4

00:00:07,200 --> 00:00:08,200

It's literally touching my back.

5

00:00:08,200 --> 00:00:09,200

She's walking away.

步骤三,翻译字幕文件,这里使用百度翻译。

  1. from langdetect import detect   # 使用 langdetect 库来检测文本语言
  2. import requests
  3. import json
  4. def tokens():
  5.     url = "https://aip.baidubce.com/oauth/2.0/token?client_id=请填写自己的API Key&client_secret=请填写自己的Secret Key&grant_type=client_credentials"
  6.     payload = json.dumps("")
  7.     headers = {
  8.         'Content-Type': 'application/json',
  9.         'Accept': 'application/json'
  10.     }
  11.    
  12.     response = requests.request("POST", url, headers=headers, data=payload)
  13.     json_data = json.loads(response.text)
  14.     return json_data['access_token']
  15. token = tokens()
  16. url = 'https://aip.baidubce.com/rpc/2.0/mt/texttrans/v1?access_token=' + token
  17. # 读取文本文件的每一行并保存到数组中
  18. lines = []
  19. with open("audio.srt", "r", encoding="utf-8") as file:
  20.     for line in file:
  21.         lines.append(line.strip())  # 打开字幕文件,添加每一行到数组中,同时去除行末尾的换行符
  22. # 循环数组,判断文本是否有某种语言。
  23. for index, line in enumerate(lines):
  24.     # 检测文本语言
  25.     try:
  26.         lang = detect(line)#检测语言
  27.         # For list of language codes, please refer to `https://ai.baidu.com/ai-doc/MT/4kqryjku9#语种列表`
  28.         #需要翻译成什么语言。
  29.         from_lang = "en" #原语言,en是英文
  30.         to_lang = 'zh' # 目标语言,zh是中文
  31.         term_ids = '' # 术语库id,多个逗号隔开
  32.         # Build request
  33.         headers = {'Content-Type': 'application/json'}
  34.         payload = {'q': line, 'from': from_lang, 'to': to_lang, 'termIds' : term_ids}
  35.         # Send request
  36.         r = requests.post(url, params=payload, headers=headers)
  37.         result = r.json()
  38.         #修改语言
  39.         lines[index] =result['result']['trans_result'][0]['dst']
  40.     except:
  41.         lang = "unknown"
  42. # 重新保存字幕文件
  43. with open("audios.srt", "w", encoding="utf-8") as file:
  44.     for line in lines:
  45.         file.write(line + '\n')

上面只是实现了翻译的流程,并没有处理其他的问题。

翻译的结果:

1

00:00:00,000 --> 00:00:04,000

这是无限的钱,下一个在我当地的沃尔玛买盛宴酒吧的人,

2

00:00:04,000 --> 00:00:05,800

我们要绑架并把这些钱交给。

3

00:00:05,800 --> 00:00:07,200

她的手放在宴会桌上。

4

00:00:07,200 --> 00:00:08,200

它真的在摸我的背。

5

00:00:08,200 --> 00:00:09,200

她要走了。

最后一步是给视频添加字幕。

  1. from moviepy.editor import concatenate_audioclips,concatenate_videoclips
  2. import ffmpeg
  3. #给视频添加字幕
  4. try:
  5.     (
  6.         ffmpeg
  7.         .input('video.mp4')
  8.         .output('videos.mp4', vf='subtitles=audios.srt')
  9.         .run()
  10.     )
  11. except ffmpeg.Error as e:
  12.     print('ffmpeg error:', e)

以上就是实现了给视频翻译并添加字幕的流程。

总结:

1.对于个人讲解的教程类视频翻译非常的完美,准确度非常高。

2.对于唱歌类的视频翻译效果很差。

当然了,还可以实现更多的功能。

比如添加GPT-SoVITS的声音克隆,文本转语音功能,让原本说英文的视频,让他直接说中文也是可以实现的,就是感觉会很麻烦。

我的个人博客地址:https://luguode.top/archives/2024_5_6/66384ce92215b.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/754532
推荐阅读
相关标签
  

闽ICP备14008679号