我这里使用vosk生成文字

https://blog.csdn.net/qq_22071421/article/details/124224582?spm=1001.2014.3001.5502

这在electron下,创建一个js文件

import fs from "fs"
const cp = require("child_process");
import subtitle from "./subtitle";
import operUtil from "./operUtil";
export default {async createAss(that,dir){let word=that.wordawait fs.readFile('static/temp/subtitle.temp', function (err, data) {if (err) {return console.error(err);}let res=data.toString()res=subtitle.wordHandle(that,res)fs.writeFile(dir+'.ass',res,  function(err) {if (err) {return console.error(err);}let ass=operUtil.dirFormat(dir)+'.ass'subtitle.insertAssByVideo(that,ass,dir)});});},}

dir是文件路径,提前把ass头部写入一个.temp文件中

[Script Info]
; Script generated by Aegisub 3.2.2
; http://www.aegisub.org/
Title: Default Aegisub file
ScriptType: v4.00+
WrapStyle: 0
ScaledBorderAndShadow: yes
YCbCr Matrix: TV.601
PlayResX: 1960
PlayResY: 1080[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
#Style: Default,微软雅黑,50,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,50,1

ass文本拼凑

 wordHandle(that,data){let res=data//放置文本formatres+="\n\r[Events]" +"Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\n"let nowTime=0let nowLen=0let leftTime=nulllet isEmpty=falsefor(let i=0;i<that.word.length;i++){let left=that.word[i].size*that.duration/that.fileSizeif(!that.word[i].word){if(!isEmpty){leftTime=operUtil.minToTimeer(nowTime)isEmpty=true}else{//TODO}}else{res+='Dialogue: 0,'+leftTime+','+operUtil.minToTimeer(nowTime+left)+',*Default,,0,0,0,,'+that.word[i].word+'\n'isEmpty=false}nowTime=nowTime+leftnowLen+=that.word[i].size}return res}
duration是音频总时长,fileSize是音频文件总大小,
    minToTimeer(timeCount){let hour = Math.floor(timeCount / 3600) < 10 ? '0' + Math.floor(timeCount / 3600) : Math.floor(timeCount / 3600) < 10;let minute = Math.floor((timeCount - hour * 3600) / 60) < 10? '0' + Math.floor((timeCount - hour * 3600) / 60): Math.floor((timeCount - hour * 3600) / 60);let second = timeCount - hour * 3600 - minute * 60 < 10? '0' + (timeCount - hour * 3600 - minute * 60): timeCount - hour * 3600 - minute * 60;let timeCountStr=new Number(hour).toFixed(0) + ':' + new Number(minute).toFixed(0) + ':' + new Number(second).toFixed(2)return timeCountStr},
minToTimeer是根据时间转化为00:00:00,

node.js使用ass生成视频字幕(上)相关推荐

  1. node.js使用ass生成视频字幕(下)

    接上篇 const cp = require("child_process");async insertAssByVideo(that,assd,output){cp.exec(t ...

  2. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 路由koa-router

    路由koa-router--MVC 中重要的环节:Url 处理器 ?? iKcamp 制作团队 原创作者:大哼.阿干.三三.小虎.胖子.小哈.DDU.可木.晃晃 文案校对:李益.大力萌.Au.DDU. ...

  3. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 记录日志

    为什么80%的码农都做不了架构师?>>>    沪江CCtalk视频地址:https://www.cctalk.com/v/15114923883523 log 日志中间件 最困难的 ...

  4. Node.js b站教学视频汇总笔记(完)CommonJS模块规范、 require、npm、Express(中间件)、MongoDB、MySQL

    文章目录 Node.js b站教学视频汇总笔记(完)CommonJS模块规范. require.npm.Express(中间件).MongoDB.MySQL 1. Node介绍 为什么要学习Node. ...

  5. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 处理静态资源

    视频地址:www.cctalk.com/v/151149238- 处理静态资源 无非花开花落,静静. 指定静态资源目录 这里我们使用第三方中间件: koa-static 安装并使用 安装 koa-st ...

  6. Node.js 在本地生成日志文件

    文章目录 Node.js 在本地生成日志文件 1.前言 2.什么是 fs 3.new console.Console(stdout, stderr, ignoreErrors) 4.node.js 生 ...

  7. iKcamp团队制作|基于Koa2搭建Node.js实战(含视频)☞ 中间件用法

    中间件用法--讲解 Koa2 中间件的用法及如何开发中间件 ?? iKcamp 制作团队 原创作者:大哼.阿干.三三.小虎.胖子.小哈.DDU.可木.晃晃 文案校对:李益.大力萌.Au.DDU.小溪里 ...

  8. python怎么加字幕_使用Python和百度语音识别生成视频字幕的实现

    从视频中提取音频 安装 moviepy pip install moviepy 相关代码: audio_file = work_path + '\\out.wav' video = VideoFile ...

  9. python 视频语音转文字_使用Python和百度语音识别生成视频字幕的实现

    从视频中提取音频 安装 moviepy pip install moviepy 相关代码: audio_file = work_path + '\\out.wav' video = VideoFile ...

最新文章

  1. JavaScript Book Plan
  2. Autocomplete
  3. C# winform程序免安装.net framework在XP/win7/win10环境运行
  4. 1.7编程基础之字符串 03 基因相关性 python
  5. 地铁建设 (Standard IO)
  6. phylip软件_进化树专题(五)| 密码子分区软件介绍
  7. 英语发音规则---C字母
  8. api k8s restful 创建pods_Kind:一个容器创建K8S开发集群
  9. BG.Hive - part3
  10. windows10 输入法繁体
  11. ESP8266WiFi模块的使用以及arduino调试
  12. 飞跃微信小程序一一新风口新模式,你所了解到的小程序有多少?
  13. Android 图片压缩也即生成缩略图方法
  14. Vue3学习笔记(B站李南江)
  15. 计算机无法删除tf卡的内容,内存卡的文件删不掉怎么办?
  16. U盘插入电脑有声音,无盘符,只显示安全删除硬件并弹出媒体
  17. 改变elementui卡片crad样式_Ueditor文字和echarts图片 生成 word 前端解决方案
  18. 配置 Cobertura 过滤掉无需测试代码
  19. 稀疏数组的创建与读写文件操作
  20. AI识别PS篡改图像

热门文章

  1. java8中的Stream用法详解
  2. 如何用python更改图片的像素
  3. LIKE视频网站无法登录服务器,解析视频地址失败,更换服务器也不行
  4. 纸黄金投资之道――积小胜为大胜(就是别贪)
  5. android模拟器安装
  6. GNSS/INS组合导航(八):INS/GPS组合导航
  7. 程序员天天写代码,如何拓展社交圈?
  8. 电子时钟c语言课题介绍,电子时钟开题报告
  9. 计算机学校特色,乐山市计算机学校:凝聚特色共成长 分享经验促提升
  10. mbp网速很慢_mac网速慢的解决办法_mac上网速度极其慢如何处理-win7之家