做网站都需要什么软件,五金网站建设制作,厦门 建网站,网站建设优化文档离线生成双语字幕整合包,一键生成中英双语字幕,基于AI大模型 制作双语字幕的方案网上有很多#xff0c;林林总总#xff0c;不一而足。制作双语字幕的原理也极其简单#xff0c;无非就是人声背景音分离、语音转文字、文字翻译#xff0c;最后就是字幕文件的合并#xff0c… 离线生成双语字幕整合包,一键生成中英双语字幕,基于AI大模型 制作双语字幕的方案网上有很多林林总总不一而足。制作双语字幕的原理也极其简单无非就是人声背景音分离、语音转文字、文字翻译最后就是字幕文件的合并但美中不足之处这些环节中需要接口api的参与比如翻译字幕那么有没有一种彻底离线的解决方案让普通人也能一键制作双语字幕成就一个人的字幕组
人声背景音分离
如果视频不存在嘈杂的背景音那么大多数情况下是不需要做人声和背景音分离的但考虑到背景音可能会影响语音转文字的准确率那么人声和背景音分离还是非常必要的关于人声抽离我们首先想到的解决方案当然是spleeter但其实阿里通义实验室开源的大模型完全不逊色于spleeter它就是FRCRN语音降噪-单麦-16k模型官方地址
https://modelscope.cn/models/iic/speech_frcrn_ans_cirm_16k/summaryFRCRN语音降噪模型是基于频率循环 CRN (FRCRN) 新框架开发出来的。该框架是在卷积编-解码(Convolutional Encoder-Decoder)架构的基础上通过进一步增加循环层获得的卷积循环编-解码(Convolutional Recurrent Encoder-Decoder)新型架构可以明显改善卷积核的视野局限性提升降噪模型对频率维度的特征表达尤其是在频率长距离相关性表达上获得提升可以在消除噪声的同时对语音进行更针对性的辨识和保护。
需要注意的是该模型再Pytorch1.12上有bug所以最好指定版本运行
pip install pytorch1.11 torchaudio torchvision -c pytorch运行方式也很简单通过pipeline调用即可:
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks ans pipeline( Tasks.acoustic_noise_suppression, modeldamo/speech_frcrn_ans_cirm_16k)
result ans( test.wav, output_pathoutput.wav)语音转文字 faster-whisper
成功分离出人声接着要做的就是语音转文字这里选择faster-whisperfaster-whisper 是 OpenAI Whisper 模型的重新实现使用了 CTranslate2这是一个用于 Transformer 模型的快速推理引擎。相比于 openai/whisperfaster-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_namesmall): device cuda if torch.cuda.is_available() else cpu if device cuda: model WhisperModel(model_name, devicecuda, compute_typefloat16,download_root./model_from_whisper,local_files_onlyFalse) else: model WhisperModel(model_name, devicecpu, compute_typeint8,download_root./model_from_whisper,local_files_onlyFalse) # or run on GPU with INT8 # model WhisperModel(model_size, devicecuda, compute_typeint8_float16) segments, info model.transcribe(file_path, beam_size5) 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,encodingutf-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(taskTasks.translation, modelmodel_dir_ins) with open(./video.srt, r,encodingutf-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(inputline_srt[2]) except Exception as e: print(str(e)) break print(outputs[translation]) with open(./two.srt,a,encodingutf-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, vfsubtitles srt_path).run() return ./test_srt.mp4结语
笔者已经将上面提到的技术集成到了一个完整的项目之中项目地址
https://github.com/v3ucn/Modelscope_Faster_Whisper_Multi_Subtitle操作简单无须思考 生成的双语字幕效果 这也许是首个让普通人也能无脑操作的完全离线双语字幕制作方案。最后奉上整合包以与众乡亲同飨
https://pan.quark.cn/s/55248dcadfb6