文档结构说明

# 初始目录结构
├── data # 存放数据
│   ├── vad_vedio # 存放切割后的wav数据
│   └── vedio # 存放mp4需要添加字幕的文件
|   └── wav_vedio # 转换wav格式的数据
├── decoder# 识别模块
├── model # 模型
│   ├── 20210618_u2pp_conformer_exp # 识别模型
│   │   ├── final.pt
│   │   ├── global_cmvn
│   │   ├── train.yaml
│   │   └── words.txt
│   └── vad_model # 切割模型
├── result # 字幕文件位置
└── run.sh # 整体脚本
└── vad # vad模块├── __init__.py├── utils│   ├── __init__.py│   ├── __pycache__│   │   ├── __init__.cpython-38.pyc│   │   └── utils_vad.cpython-38.pyc│   └── utils_vad.py└── vad.py# 结束文档结构
├── Readme.md
├── data
│   ├── vad_vedio
│   │   ├── cs_106187.5_ms_112031.25_ms_.wav
│   │   ├── cs_114062.5_ms_127125.0_ms_.wav
│   │   ...
│   ├── vedio
│   │   └── cs.mp4
│   └── wav_vedio
│       └── cs.wav
├── decoder
│   ├── data_list
│   │   └── cs_data.list
│   ├── data_list.sh
│   ├── decoder.sh
│   ├── mkass.py
│   ├── recognize.py
│   ├── text
│   │   ├── cs_ass_text
│   │   └── cs_text
│   └── wenet -> /mnt/f/data/wenet/wenet/
├── model
│   ├── 20210618_u2pp_conformer_exp
│   │   ├── final.pt
│   │   ├── global_cmvn
│   │   ├── train.yaml
│   │   └── words.txt
│   └── vad_model
│       └── model.jit
├── result
│   └── cs.ass
├── run.sh
└── vad├── __init__.py├── utils│   ├── __init__.py│   ├── __pycache__│   │   ├── __init__.cpython-38.pyc│   │   └── utils_vad.cpython-38.pyc│   └── utils_vad.py└── vad.py

wenet环境配置

获取视频并转音频

安装处理视频工具

安装ffmpeg:https://blog.csdn.net/zhouyj6516/article/details/107416209

ffmpeg参数:https://www.cnblogs.com/mwl523/p/10856633.html

mp4转wav脚本

ffmpeg -i cs.mp4 -vn -ar 16000 -ac 1 -ab 192 -f wav cs.wav

脚本

#!/usr/bin/bash# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/root/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; theneval "$__conda_setup"
elseif [ -f "/root/miniconda3/etc/profile.d/conda.sh" ]; then. "/root/miniconda3/etc/profile.d/conda.sh"elseexport PATH="/root/miniconda3/bin:$PATH"fi
fi
unset __conda_setup
# <<< conda initialize <<<conda activate base# 批量转wav
mp4_dir=/root/data/aizm/result/mp4
step=0;
for item in `ls $mp4_dir` ; do# 截取字符串名字# filename=`echo $item | awk -F "." '{print $1}'`filename=${item%.*}echo $filenameffmpeg -i ${mp4_dir}/$item -vn -ar 16000 -ac 1 -ab 192 -f wav ./wavdata/$filename.wavecho "$item ok"file_wav=$filename.wavpython3 vad.py ./wavdata/$file_wav $filenamestep=`expr $step + 1`
done
echo "success all!,总共处理${step}个视频"

注意脚本运行必须在base环境下

通过vad切割音频

使用的github上的silero-vad

需要文件

model.jit
utils_vad.py

代码

from utils.utils_vad import *
import torchaudio
import sysif len(sys.argv)==1:print("USage:python3 {} 0001.wav 0001".format(sys.argv[0]))print("arguments requires at least 1,get 0")assert False
model_path = "./model/vad_model/model.jit"
wav_path = sys.argv[1]
file_pre_name = ""
if len(sys.argv) == 3:file_pre_name = sys.argv[2]print("处理文件",file_pre_name)# 加载视频
wav,sr = torchaudio.load(wav_path)
model = init_jit_model(model_path=model_path)
# trig_sum=0.1,neg_trig_sum=0.07
speeches = get_speech_ts(wav[0],model,trig_sum=0.1,neg_trig_sum=0.07,min_speech_samples=500,min_silence_samples=400)
# speeches = get_speech_timestamps(wav, model)save_path = "./data/vad_vedio/%s"%(file_pre_name)
for i,item in enumerate(speeches):start = item['start']end = item['end']start_time = start / 16end_time = end / 16 torchaudio.save(save_path+"/"+file_pre_name+"_"+str(start_time)+"_ms_"+str(end_time)+"_ms_"+".wav", wav[0][start:end].unsqueeze(0), sr)pass

采用自适应VAD

from utils.utils_vad import *
import torchaudio
import sysif len(sys.argv)==1:print("USage:python3 {} 0001.wav 0001".format(sys.argv[0]))print("arguments requires at least 1,get 0")assert False
model_path = "./model/vad_model/model.jit"
wav_path = sys.argv[1]
file_pre_name = ""
if len(sys.argv) == 3:file_pre_name = sys.argv[2]print("处理文件",file_pre_name)# 加载视频
wav,sr = torchaudio.load(wav_path)
model = init_jit_model(model_path=model_path)
# trig_sum=0.1,neg_trig_sum=0.07
speeches = get_speech_ts_adaptive(wav[0],model,batch_size=200,step=500,num_samples_per_window=4000,min_speech_samples=10000,min_silence_samples=2000)
# speeches = get_speech_timestamps(wav, model)save_path = "./data/vad_vedio/%s"%(file_pre_name)
for i,item in enumerate(speeches):start = item['start']end = item['end']start_time = start / 16end_time = end / 16 torchaudio.save(save_path+"/"+file_pre_name+"_"+str(start_time)+"_ms_"+str(end_time)+"_ms_"+".wav", wav[0][start:end].unsqueeze(0), sr)pass

参数调整

from utils.utils_vad import *
import torchaudio
import sysif len(sys.argv)==1:print("USage:python3 {} 0001.wav 0001".format(sys.argv[0]))print("arguments requires at least 1,get 0")assert False
model_path = "./model/vad_model/model.jit"
wav_path = sys.argv[1]
file_pre_name = ""
if len(sys.argv) == 3:file_pre_name = sys.argv[2]print("处理文件",file_pre_name)# 加载视频
wav,sr = torchaudio.load(wav_path)
model = init_jit_model(model_path=model_path)
# trig_sum=0.1,neg_trig_sum=0.07
# speeches = get_speech_ts(wav[0],model,trig_sum=0.1,neg_trig_sum=0.07,min_speech_samples=500,min_silence_samples=400)
speeches = get_speech_ts_adaptive(wav[0],model,batch_size=200,step=200,num_samples_per_window=2000,min_speech_samples=500,min_silence_samples=400)
'''
speeches = get_speech_ts_adaptive(wav[0],model,batch_size=200,step=200,num_samples_per_window=4000,min_speech_samples=10000,min_silence_samples=2000)
'''
save_path = "./data/vad_vedio/%s"%(file_pre_name)
for i,item in enumerate(speeches):start = item['start']end = item['end']start_time = start / 16end_time = end / 16 torchaudio.save(save_path+"/"+file_pre_name+"_"+str(start_time)+"_ms_"+str(end_time)+"_ms_"+".wav", wav[0][start:end].unsqueeze(0), sr)pass

保存视频格式:start-time_ms_end-time_ms.wav

再次处理音频

ffmpeg -i x.wav -vn -ar 16000 -ac 1 -ab 192 -f wav text.wav

通过wenet解码

├── data_list
│   └── cs_data.list
├── data_list.sh
├── decoder.sh
├── mkass.py
├── recognize.py
├── text
│   └── cs_ass_text
└── wenet -> /home/asr/data/wenet/wenet # wenet工具的软连接

制作data.list

{"key": "BAC009S0764W0121", "wav": "/BAC009S0764W0121.wav", "txt": "甚至出现交的情况"}
filename=$1
wav=/mnt/f/data/AIzimu/data/vad_vedio/$filename
# 对内容按数字大小排序
wav_list=`ls $wav | sort -t "_" -k 2  -n`
# echo $wav_list
# exit 1
for item in $wav_list;doecho "{\"key\":\"${item%.*}\",\"wav\":\"${wav}/${item}\",\"txt\":\"\"}"
done

通过预训练模型解码

需要文件

# words.txt
<blank> 0
<unk> 1
' 2
( 3
) 4
A 5
												

基于WENET制作AI字幕相关推荐

  1. 中秋佳节,基于华为云AI制作属于自己的月亮!

    中秋佳节,基于华为云AI制作属于自己的月亮! 一.前言 二.结果展示 三.模型简介 四.实验环境 五.实验步骤 1.导入依赖包 2.参数设置 3.调用视频和图片 4.定义SkyFilter类 5.处理 ...

  2. 云端炼丹,算力白嫖,基于云端GPU(Colab)使用So-vits库制作AI特朗普演唱《国际歌》

    人工智能AI技术早已深入到人们生活的每一个角落,君不见AI孙燕姿的歌声此起彼伏,不绝于耳,但并不是每个人都拥有一块N卡,没有GPU的日子总是不好过的,但是没关系,山人有妙计,本次我们基于Google的 ...

  3. c# 分类 机器学习_C#也能做机器学习?基于.NET的AI智能应用市场还是一片“处女地”...

    作者 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 导读:.NET 框架是由微软开发,致力于敏捷软件开发.快速应用开发.具平台无关性和网络透明化的软件框架,目前全球有 620 万开发 ...

  4. C#也能做机器学习?基于.NET的AI智能应用市场还是一片“处女地”

    作者 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 导读:.NET 框架是由微软开发,致力于敏捷软件开发.快速应用开发.具平台无关性和网络透明化的软件框架,目前全球有 620 万开发 ...

  5. 基于Autoware制作高精地图(一)

    基于Autoware制作高精地图(一) ​开始进入正题,也是最近在忙的一件事,制作高精地图. 高精地图的制作大概分为以下四个流程(不一定完全正确): 1.构建点云地图: 2.点云地图标注: 3.制作O ...

  6. 小白浏览器无障碍AI字幕的提取方法 超级简单

    现在小视频越来越红火,各种需要翻译并且制作字幕的视频也变得多了起来,小白浏览器的无障碍AI字幕翻译效果也非常棒,可惜之前并没有找到方法提取到字幕,不过就在近日,某论坛出现了破解提取方法,现在给大家归结 ...

  7. CHATGPT制作AI绘画

    CHATGPT是一种基于机器学习和自然语言处理技术的人工智能应用.它可以生成自然语言文本,并且可以通过训练来学习各种不同的技能. 其中,CHATGPT制作AI绘画指的是将CHATGPT应用于绘画领域, ...

  8. Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统

    基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现,文章末尾附有本毕业设计的 ...

  9. 基于Autoware制作高精地图(四)

    基于Autoware制作高精地图(四) 来了来了!它来了!肯定有小伙伴遇到过,当用Autoware导入自己制作的高精地图(也就是.csv文件)的时候会出现带有方向的车道线lane不显示的情况,或者显示 ...

最新文章

  1. python 画图_用python解九宫格以及画图
  2. 报错 之 ModuleNotFoundError: No module named ‘setproctitle‘
  3. Java性能调优之让程序“飞”起来-Java 代码优化
  4. 【随】WCF传输大数据的设置
  5. 学习笔记 - 002
  6. python开发游戏脚本_Python开发游戏开服脚本
  7. 手把手教你免费申请支持通配符的 SSL 证书
  8. 关于ACM竞赛的题型分析
  9. 爬虫——Scrapy框架案例一:手机APP抓包
  10. 大学计算机基础教程excel实验报告,大学计算机基础教程excel实验报告.doc
  11. 移动APP性能测试指标
  12. 论文翻译-Clicks can be Cheating: Counterfactual Recommendation for Mitigating Clickbait Issue
  13. 对数字化转型的部分认知(一)
  14. 1790D Matryoshkas
  15. Jenkins --- 三种安装方式
  16. 我爱你用计算机怎么表示,特殊密码表示我爱你
  17. 在一次班会课上的讲话
  18. 【更新中…】Origin软件教程
  19. crc32 算法与实现
  20. [读书笔记]软件架构师职业导读

热门文章

  1. python 基于xgboost预测波士顿房价
  2. BLE学习笔记3:GAP初始化
  3. 重庆顶香味分析快手春竹笋的制作方法
  4. 前端应届生如何做一个职业规划?已拿offer附真题解析
  5. Unreal Engine 4 UE4 CAVE VR 立体 Stereo nDisplay 多通道
  6. xxl-job——简介
  7. xx:xx,xx:xx规则的字符串怎么解析呢
  8. 谭浩强C++ 第七章
  9. fwr310虚拟服务器设置,fast迅捷FWR310无线路由器设置图文教程
  10. 2021年研究生入学考试总结和复试冲刺复习计划