离线生成双语字幕基于AI大模型ModelScope

2024-01-29 19:12

本文主要是介绍离线生成双语字幕基于AI大模型ModelScope,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

制作双语字幕的方案网上有很多,林林总总,不一而足。制作双语字幕的原理也极其简单,无非就是人声背景音分离、语音转文字、文字翻译,最后就是字幕文件的合并,但美中不足之处这些环节中需要接口api的参与,比如翻译字幕,那么有没有一种彻底离线的解决方案?让普通人也能一键制作双语字幕,成就一个人的字幕组?

人声背景音分离

如果视频不存在嘈杂的背景音,那么大多数情况下是不需要做人声和背景音分离的,但考虑到背景音可能会影响语音转文字的准确率,那么人声和背景音分离还是非常必要的,关于人声抽离,我们首先想到的解决方案当然是spleeter,但其实,阿里通义实验室开源的大模型完全不逊色于spleeter,它就是FRCRN语音降噪-单麦-16k,模型官方地址:

https://modelscope.cn/models/iic/speech_frcrn_ans_cirm_16k/summary

FRCRN语音降噪模型是基于频率循环 CRN (FRCRN) 新框架开发出来的。该框架是在卷积编-解码(Convolutional Encoder-Decoder)架构的基础上,通过进一步增加循环层获得的卷积循环编-解码(Convolutional Recurrent Encoder-Decoder)新型架构,可以明显改善卷积核的视野局限性,提升降噪模型对频率维度的特征表达,尤其是在频率长距离相关性表达上获得提升,可以在消除噪声的同时,对语音进行更针对性的辨识和保护。

需要注意的是该模型再Pytorch1.12上有bug,所以最好指定版本运行:

pip install pytorch==1.11 torchaudio torchvision -c pytorch

运行方式也很简单,通过pipeline调用即可:

from modelscope.pipelines import pipeline  
from modelscope.utils.constant import Tasks  ans = pipeline(  Tasks.acoustic_noise_suppression,  model='damo/speech_frcrn_ans_cirm_16k')  
result = ans(  'test.wav',  output_path='output.wav')

语音转文字 faster-whisper

成功分离出人声,接着要做的就是语音转文字,这里选择faster-whisper,faster-whisper 是 OpenAI Whisper 模型的重新实现,使用了 CTranslate2,这是一个用于 Transformer 模型的快速推理引擎。相比于 openai/whisper,faster-whisper 的实现速度提高了 4 倍,同时内存占用更少。此外,faster-whisper 还支持在 CPU 和 GPU 上进行 8 位量化,进一步提高了效率。

pip install faster-whisper

随后编写转写代码:

def convert_seconds_to_hms(seconds):  hours, remainder = divmod(seconds, 3600)  minutes, seconds = divmod(remainder, 60)  milliseconds = math.floor((seconds % 1) * 1000)  output = f"{int(hours):02}:{int(minutes):02}:{int(seconds):02},{milliseconds:03}"  return output  # 制作字幕文件  
def make_srt(file_path,model_name="small"):  device = "cuda" if torch.cuda.is_available() else "cpu"  if device == "cuda":  model = WhisperModel(model_name, device="cuda", compute_type="float16",download_root="./model_from_whisper",local_files_only=False)  else:  model = WhisperModel(model_name, device="cpu", compute_type="int8",download_root="./model_from_whisper",local_files_only=False)  # or run on GPU with INT8  # model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")  segments, info = model.transcribe(file_path, beam_size=5)  print("Detected language '%s' with probability %f" % (info.language, info.language_probability))  count = 0  with open('./video.srt', 'w') as f:  # Open file for writing  for segment in segments:  count +=1  duration = f"{convert_seconds_to_hms(segment.start)} --> {convert_seconds_to_hms(segment.end)}\n"  text = f"{segment.text.lstrip()}\n\n"  f.write(f"{count}\n{duration}{text}")  # Write formatted string to the file  print(f"{duration}{text}",end='')  with open("./video.srt", 'r',encoding="utf-8") as file:  srt_data = file.read()  return "转写完毕"

这里通过convert_seconds_to_hms方法来把时间戳格式化为标准字幕时间轴。

大模型翻译字幕

这里字幕翻译我们依然使用大模型,依然是阿里通义实验室的CSANMT连续语义增强机器翻译-英中-通用领域-large,模型官方地址:

https://modelscope.cn/models/iic/nlp_csanmt_translation_en2zh/summary

该模型基于连续语义增强的神经机器翻译模型,由编码器、解码器以及语义编码器三者构成。其中,语义编码器以大规模多语言预训练模型为基底,结合自适应对比学习,构建跨语言连续语义表征空间。此外,设计混合高斯循环采样策略,融合拒绝采样机制和马尔可夫链,提升采样效率的同时兼顾自然语言句子在离散空间中固有的分布特性。最后,结合邻域风险最小化策略优化翻译模型,能够有效提升数据的利用效率,显著改善模型的泛化能力和鲁棒性。

依然是通过pipeline进行调用:

# 翻译字幕  
def make_tran():  pipeline_ins = pipeline(task=Tasks.translation, model=model_dir_ins)  with open("./video.srt", 'r',encoding="utf-8") as file:  gweight_data = file.read()  result = gweight_data.split("\n\n")  if os.path.exists("./two.srt"):  os.remove("./two.srt")  for res in result:  line_srt = res.split("\n")  try:  outputs = pipeline_ins(input=line_srt[2])  except Exception as e:  print(str(e))  break  print(outputs['translation'])  with open("./two.srt","a",encoding="utf-8")as f:f.write(f"{line_srt[0]}\n{line_srt[1]}\n{line_srt[2]}\n{outputs['translation']}\n\n")  return "翻译完毕"

合并字幕

虽然字幕已经完全可以导入剪辑软件进行使用了,但是依然可以通过技术手段来自动化合并字幕,这里使用ffmpeg:

# 合并字幕  
def merge_sub(video_path,srt_path):  if os.path.exists("./test_srt.mp4"):  os.remove("./test_srt.mp4")  ffmpeg.input(video_path).output("./test_srt.mp4", vf="subtitles=" + srt_path).run()  return "./test_srt.mp4"

这篇关于离线生成双语字幕基于AI大模型ModelScope的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/657908

相关文章

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

nginx生成自签名SSL证书配置HTTPS的实现

《nginx生成自签名SSL证书配置HTTPS的实现》本文主要介绍在Nginx中生成自签名SSL证书并配置HTTPS,包括安装Nginx、创建证书、配置证书以及测试访问,具有一定的参考价值,感兴趣的可... 目录一、安装nginx二、创建证书三、配置证书并验证四、测试一、安装nginxnginx必须有"-

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

SpringBoot整合DeepSeek实现AI对话功能

《SpringBoot整合DeepSeek实现AI对话功能》本文介绍了如何在SpringBoot项目中整合DeepSeekAPI和本地私有化部署DeepSeekR1模型,通过SpringAI框架简化了... 目录Spring AI版本依赖整合DeepSeek API key整合本地化部署的DeepSeek