node.js使用ass生成视频字幕(上)
我这里使用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生成视频字幕(上)相关推荐
- node.js使用ass生成视频字幕(下)
接上篇 const cp = require("child_process");async insertAssByVideo(that,assd,output){cp.exec(t ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 路由koa-router
路由koa-router--MVC 中重要的环节:Url 处理器 ?? iKcamp 制作团队 原创作者:大哼.阿干.三三.小虎.胖子.小哈.DDU.可木.晃晃 文案校对:李益.大力萌.Au.DDU. ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 记录日志
为什么80%的码农都做不了架构师?>>> 沪江CCtalk视频地址:https://www.cctalk.com/v/15114923883523 log 日志中间件 最困难的 ...
- Node.js b站教学视频汇总笔记(完)CommonJS模块规范、 require、npm、Express(中间件)、MongoDB、MySQL
文章目录 Node.js b站教学视频汇总笔记(完)CommonJS模块规范. require.npm.Express(中间件).MongoDB.MySQL 1. Node介绍 为什么要学习Node. ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 处理静态资源
视频地址:www.cctalk.com/v/151149238- 处理静态资源 无非花开花落,静静. 指定静态资源目录 这里我们使用第三方中间件: koa-static 安装并使用 安装 koa-st ...
- Node.js 在本地生成日志文件
文章目录 Node.js 在本地生成日志文件 1.前言 2.什么是 fs 3.new console.Console(stdout, stderr, ignoreErrors) 4.node.js 生 ...
- iKcamp团队制作|基于Koa2搭建Node.js实战(含视频)☞ 中间件用法
中间件用法--讲解 Koa2 中间件的用法及如何开发中间件 ?? iKcamp 制作团队 原创作者:大哼.阿干.三三.小虎.胖子.小哈.DDU.可木.晃晃 文案校对:李益.大力萌.Au.DDU.小溪里 ...
- python怎么加字幕_使用Python和百度语音识别生成视频字幕的实现
从视频中提取音频 安装 moviepy pip install moviepy 相关代码: audio_file = work_path + '\\out.wav' video = VideoFile ...
- python 视频语音转文字_使用Python和百度语音识别生成视频字幕的实现
从视频中提取音频 安装 moviepy pip install moviepy 相关代码: audio_file = work_path + '\\out.wav' video = VideoFile ...
最新文章
- JavaScript Book Plan
- Autocomplete
- C# winform程序免安装.net framework在XP/win7/win10环境运行
- 1.7编程基础之字符串 03 基因相关性 python
- 地铁建设 (Standard IO)
- phylip软件_进化树专题(五)| 密码子分区软件介绍
- 英语发音规则---C字母
- api k8s restful 创建pods_Kind:一个容器创建K8S开发集群
- BG.Hive - part3
- windows10 输入法繁体
- ESP8266WiFi模块的使用以及arduino调试
- 飞跃微信小程序一一新风口新模式,你所了解到的小程序有多少?
- Android 图片压缩也即生成缩略图方法
- Vue3学习笔记(B站李南江)
- 计算机无法删除tf卡的内容,内存卡的文件删不掉怎么办?
- U盘插入电脑有声音,无盘符,只显示安全删除硬件并弹出媒体
- 改变elementui卡片crad样式_Ueditor文字和echarts图片 生成 word 前端解决方案
- 配置 Cobertura 过滤掉无需测试代码
- 稀疏数组的创建与读写文件操作
- AI识别PS篡改图像