第一步: 准备短视频素材
第二步: 利用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 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
可以看出 英文字幕 与 原视频自带的中文字幕 分离开来 :
达到我们最终想要的效果, 完美~
参考文档 今天给大家分享一个利用 whisper +Qwen1.5_110B+FFmpeg 来给视频 生成双 语字幕 的项目,干货满满;可以看出whisper模型语音识别的效果非常惊艳!
!
从此再也不用担心视频没有字幕了~
AI只是一个工具,如何利用好它来提高我们的效率,这个才是最重要的