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

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

    正在检查是否收录...

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

1.python,需要自行安装,

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

pip install moviepy

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

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

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

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

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

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

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

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

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

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

import requests response = requests.post("http://localhost:9873/run/uvr_convert", json={   "data": [     "HP2_all_vocals",     "E:/视频翻译添加字幕/mp3",#输入待处理音频文件夹路径     "E:/视频翻译添加字幕/mp3",#定输出主人声文件夹     {"name":"zip.zip","data":"data:@file/octet-stream;base64,UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA=="},#也可批量输入音频文件, 二选一, 优先读文件夹     "E:/视频翻译添加字幕/mp3",#指定输出非主人声文件夹     10,#人声提取激进程度     "mp3",#导出文件格式 ]}).json() data = response["data"] 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

import subprocess # 要执行的命令 command = "whisper audio.mp3 --model medium"  # 这里使用的是 Windows 的 dir 命令,可以替换为其他命令 # 打开命令行并执行命令 process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # 获取命令执行结果 output, error = process.communicate() # 打印结果 print("Output:") print(output.decode())  # 将字节转换为字符串并打印输出 if error:     print("Error:")     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.

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

from langdetect import detect   # 使用 langdetect 库来检测文本语言 import requests import json def tokens():     url = "https://aip.baidubce.com/oauth/2.0/token?client_id=请填写自己的API Key&client_secret=请填写自己的Secret Key&grant_type=client_credentials"     payload = json.dumps("")     headers = {         'Content-Type': 'application/json',         'Accept': 'application/json'     }         response = requests.request("POST", url, headers=headers, data=payload)     json_data = json.loads(response.text)     return json_data['access_token'] token = tokens() url = 'https://aip.baidubce.com/rpc/2.0/mt/texttrans/v1?access_token=' + token # 读取文本文件的每一行并保存到数组中 lines = [] with open("audio.srt", "r", encoding="utf-8") as file:     for line in file:         lines.append(line.strip())  # 打开字幕文件,添加每一行到数组中,同时去除行末尾的换行符 # 循环数组,判断文本是否有某种语言。 for index, line in enumerate(lines):     # 检测文本语言     try:         lang = detect(line)#检测语言         # For list of language codes, please refer to `https://ai.baidu.com/ai-doc/MT/4kqryjku9#语种列表`         #需要翻译成什么语言。         from_lang = "en" #原语言,en是英文         to_lang = 'zh' # 目标语言,zh是中文         term_ids = '' # 术语库id,多个逗号隔开         # Build request         headers = {'Content-Type': 'application/json'}         payload = {'q': line, 'from': from_lang, 'to': to_lang, 'termIds' : term_ids}         # Send request         r = requests.post(url, params=payload, headers=headers)         result = r.json()         #修改语言         lines[index] =result['result']['trans_result'][0]['dst']     except:         lang = "unknown" # 重新保存字幕文件 with open("audios.srt", "w", encoding="utf-8") as file:     for line in lines:         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

她要走了。

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

from moviepy.editor import concatenate_audioclips,concatenate_videoclips import ffmpeg #给视频添加字幕 try:     (         ffmpeg         .input('video.mp4')         .output('videos.mp4', vf='subtitles=audios.srt')         .run()     ) except ffmpeg.Error as e:     print('ffmpeg error:', e)

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

总结:

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

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

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

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

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

jsonclitokenclipmp3视频翻译idepythonwhispergpturltpuapp文件夹baidumedium伴奏分离codeapi声音克隆
  • 本文作者:李琛
  • 本文链接: https://wapzz.net/post-16839.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
本站部分内容来源于网络转载,仅供学习交流使用。如涉及版权问题,请及时联系我们,我们将第一时间处理。
文章很赞!支持一下吧 还没有人为TA充电
为TA充电
还没有人为TA充电
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
2.3W+
5
0
1
WAP站长官方

AI从来不是少数人的无限游戏

上一篇

Runway正式发布全新Gen3模型,AI视频的王,它回来了。

下一篇
  • 复制图片
按住ctrl可打开默认菜单