首页 » 技术资讯 » 【生成视频双语字幕-项目实战】手把手教你利用(字幕视频模型利用英文)

【生成视频双语字幕-项目实战】手把手教你利用(字幕视频模型利用英文)

乖囧猫 2024-07-24 00:40:14 技术资讯 0

扫一扫用手机浏览

文章目录 [+]
小编
本文目录

第一步: 准备短视频素材

第二步: 利用whisper来对电影的声音提取对应的字幕

whisper 网络结构介绍

【生成视频双语字幕-项目实战】手把手教你利用(字幕视频模型利用英文) 【生成视频双语字幕-项目实战】手把手教你利用(字幕视频模型利用英文) 技术资讯
(图片来自网络侵删)

whisper 命令行用法介绍

利用whisper的large模型来识别素材视频中的中文语言

【生成视频双语字幕-项目实战】手把手教你利用(字幕视频模型利用英文) 【生成视频双语字幕-项目实战】手把手教你利用(字幕视频模型利用英文) 技术资讯
(图片来自网络侵删)

利用whisper的large模型来翻译素材视频中的中文语言为英文

第三步: 利用大模型来进行翻译添加其他语音字幕

Qwen1.5_110B大模型来扮演翻译官

之前whisper的large模型识别出的中文的内容

搭建Qwen1.5_110B来扮演翻译官进行推理测试

第四步: 解析字幕文件中的中文翻译成英文

第五步: 利用FFmpeg来将新生成的字幕合并到视频中

给原视频添加字幕

调整英文字幕显示的位置

参考文档

第一步: 准备短视频素材

首先我们需要随便找一个短视频作为素材(我在B站上随便找了一个),进行下载:

!you-get --format=dash-flv480-AVC https://www.bilibili.com/video/BV1Js411a75q/!cp .mp4 ./demo.mp4

原始的视频是对<九人禁闭室>电影进行中文二次解说: 为了便于效果展示,利用ffmpeg来剪切前30秒的视频;

!ffmpeg -i demo.mp4  -ss 0 -to 30 -c copy output.mp4

最终输出的剪切后的视频用于展示(只有前30秒):

可以看出原视频是中文解说视频,只有中文字幕 ;我现在想添加 对应的英文字幕 该怎么办呢~,当然你也可以用各大平台软件来手动操作, 今天给大家利用whisper+qwen系列大模型来实现这一过程~

第二步: 利用whisper来对电影的声音提取对应的字幕 whisper 网络结构介绍

Whisper架构是 一种简单的端到端方法,实现为编码器-解码器变换器(Transformer),如图。
输入的音频被分割成30秒的块,转换成对数Mel频谱图,然后传递给编码器。
解码器被训练用来预测相应的文本标题,其中夹杂着特殊标记,这些标记指导单一模型执行诸如语言识别、短语级时间戳、多语种语音转录以及英语语音翻译等任务。

whisper 命令行用法介绍

之前给大家介绍过whisper利用权重加载的方式来进行语音识别 【3.26M次下载,2.7k次点赞】OpenAI开源Whisper-large-v3语音识别模型权重,错误率大幅下降,效果惊艳!

今天介绍另外一种模式 whisper 使用命令行模式 来处理语音和视频数据,其底层模型调用跟上文提供的权重模型参数是一致的。

whisper 支持的模型版本

下面是whisper各个模型版本的参数信息以及支持语言的能力。
模型参数量越大,模型的效果越好,但是占用的内存也是越多。

安装whisper相关的包和环境配置

!pip install -U openai-whisper setuptools-rust!sudo apt update  sudo apt install ffmpeg -y whisper最终整体命令行运行常见参数如下:

!whisper  your_audio.mp3 -- 输入你的音频和视频-task  transcribe # 指定转录方式,默认使用 transcribe 转录模式, translate 则为 翻译模式,目前只支持翻译成英文。
--model large # 指定使用模型,默认使用 --model small--language zh# 指定转录语言,默认会截取 30 秒来判断语种;https://github.com/openai/whisper/blob/main/whisper/tokenizer.py--output_format srt #指定字幕文件的生成格式,txt,vtt,srt,tsv,json,all-- output_dir ./audio_asr # 指定字幕文件的输出目录,不设置默认输出到当前目录下。

下面我给大家实操一下,自动语音识别样本视频中的中文输出对应的字幕;为了更好的展示效果,我这里采用 whisper的large模型 来进行测试。

利用whisper的large模型来识别素材视频中的中文语言

!whisper output.mp4  --model large --output_format srt

可以看出whisper的large模型识别素材视频的中文, 生成的中文字幕结果几乎完全正确。
效果非常惊艳!

利用whisper的large模型来翻译素材视频中的中文语言为英文

!whisper output.mp4  --model large --output_format srt --task translate --output_dir ./audio_asr

嗯,可以看出在将 中文翻译成英文这块 ,whisper的large模型版本 效果还是不够好 ,其中 对应的时间戳和英文翻译都不太对应的上 。

第三步: 利用大模型来进行翻译添加其他语音字幕

由于whisper的large模型在语音翻译成英文这块效果不好,因为我决定用 大模型来对识别出来的中文字幕进行翻译成英文 。

Qwen1.5_110B大模型来扮演翻译官

Qwen系列的大模型,之前给大家分享过 Qwen2、Qwen-Agent重磅开源!

实操部署Qwen2-7B模型推理效果展示语音展示,不愧是大厂出品!

当然你可以用最新开源的Qwen2_7B大模型来进行推理实现翻译, 需要本地部署,下载权重推理 ,可以参考上面的文章;

由于 更好的体验效果 ,我决定 给大家展示Qwen1.5_110B的大模型来扮演翻译官进行推理预测 ;

之前whisper的large模型识别出的中文的内容

!cat output.srt 搭建qwen1.5_110B来扮演翻译官进行推理测试

system_prompt= """你是一名翻译专家,特别擅长将中文翻译成地道的英文表达,我将给出中文的语句,你直接输出对应的英文地道翻译。
不需要输出其他无关的语言。
"""response = client.chat.completions.create(    model="QWEN/QWEN1.5-110B-CHAT",    messages=[ {"role": "system", "content": system_prompt},              {"role": "user", "content": "你是谁?你能干什么"}],)print(response.choices[0].message.content)

输出的结果:

Who are you and what can you do?

可以看出测试,没有问题~

第四步: 解析字幕文件中的中文翻译成英文

上面我们测试通利用 qwen1.5_110B 来实现中文翻译成英文,下面我们只需要编写一个脚本将字幕送进大模型中进行依次翻译,但是需要保存格式一致,对应的部分代码如下:

with open("output.srt", "r") as f:    result = f.read()result = result.split("\n")total_size = len(result)from tqdm import tqdmimport timefor index in tqdm(range( int(total_size/4))):    tmp= result[2+4index]    response = client.chat.completions.create(        model="QWEN/QWEN1.5-110B-CHAT",        messages=[ {"role": "system", "content": system_prompt},                  {"role": "user", "content":tmp}],    )    output = response.choices[0].message.content    result[2+4index]=  output    time.sleep(1)with open("finally_ast.srt","w") as f:    f.write("\n".join(result))!cat finally_ast.srt

运行的效果展示: 生成的英文字幕

第五步: 利用ffmpeg来将新生成的字幕合并到视频中 给原视频添加字幕

!ffmpeg -i output.mp4 -vf "subtitles=finally_ast.srt" \    -c:a copy release_with_srt.mp4 -y

运行发现出现错误:

Too many packets buffered for output stream 0:1.Conversion failed!

经过排查发现是,该 异常抛出的原因是部分视频数据有问题,导致视频处理过快,容器封装时队列溢出 。
添加该参数后再次执行对应的ffmpeg命令:

!ffmpeg -i output.mp4 -vf "subtitles=finally_ast.srt" -max_muxing_queue_size 1024   -c:a copy release_with_srt.mp4 -y

最终输出的视频效果如下: 达到我们的效果,在播放视频的同时显示中英文字幕,但是 唯一美中不足的是 ,原视频中的 中文字幕和新添加的英文字幕出现重叠 ,下面我将调节英文字幕的位置。

调整英文字幕显示的位置

# Alignment=2:底部居中# MarginV=2:离底部的距离!ffmpeg -i output.mp4 \    -vf "subtitles=./finally_ast.srt:force_style='Alignment=2,MarginV=2'" \    -max_muxing_queue_size 1024 \    finally_output.mp4 -y

可以看出 英文字幕 与 原视频自带的中文字幕 分离开来 :

达到我们最终想要的效果, 完美~

参考文档
https://api.together.xyz
https://github.com/openai/whisper
https://openai.com/index/whisper/
素材视频:https://www.bilibili.com/video/BV1Js411a75q/
z先生说

今天给大家分享一个利用 whisper +Qwen1.5_110B+FFmpeg 来给视频 生成双 语字幕 的项目,干货满满;可以看出whisper模型语音识别的效果非常惊艳!

从此再也不用担心视频没有字幕了~

AI只是一个工具,如何利用好它来提高我们的效率,这个才是最重要的

标签:

相关文章