虎牙直播弹幕转换字幕格式 基于Node.js 的 huya-danmu
1 首先安装nodejs运行环境, 从 http://nodejs.cn/download/ 下载对应的版本
2 安装 huya-danmu 模块, https://github.com/BacooTang/huya-danmu 有详细的安装方法
3 参照 huya-danmu 模块中 test.js 编写 huya.js 新文件
- const huya_danmu = require('./index')
- var fs = require('fs')
- const roomid = process.argv[2]
- const client = new huya_danmu(roomid)
- var t1 = new Date().getTime()
- var t2 = t1
- var interval = 0
- var logName = ''
- t1 = process.uptime()*1000
- var emots = {
- "/{dx" : "[大笑]",
- "/{sh" : "[送花]",
- "/{tx" : "[偷笑]",
- "/{dk" : "[大哭]",
- "/{hh" : "[嘿哈]",
- "/{66" : "[666]",
- "/{gd" : "[感动]",
- "/{yw" : "[疑问]",
- "/{xh" : "[喜欢]",
- "/{jx" : "[奸笑]",
- "/{zan" : "[赞]",
- "/{ka" : "[可爱]",
- "/{am" : "[傲慢]",
- "/{kx" : "[开心]",
- "/{88" : "[拜拜]",
- "/{hx" : "[害羞]",
- "/{zs" : "[衰]",
- "/{pu" : "[吐血]",
- "/{zc" : "[嘴馋]",
- "/{sq" : "[生气]",
- "/{fe" : "[扶额]",
- "/{bz" : "[闭嘴]",
- "/{kw" : "[枯萎]",
- "/{xu" : "[嘘]",
- "/{xk" : "[笑哭]",
- "/{lh" : "[流汗]",
- "/{bk" : "[不看]",
- "/{hq" : "[哈欠]",
- "/{tp" : "[调皮]",
- "/{gl" : "[鬼脸]",
- "/{cl" : "[戳脸]",
- "/{dg" : "[大哥]",
- "/{kun" : "[困]",
- "/{yb" : "[拥抱]",
- "/{zt" : "[猪头]",
- "/{kl" : "[骷髅]",
- "/{cc" : "[臭臭]",
- "/{xd" : "[心动]",
- "/{dao" : "[刀]"
- }
- function checkemot(str)
- {
- if(str.includes('/{') == false ) return str
- for(var key in emots) {
- str = str.replace(new RegExp(key,'g'), emots[key])
- }
- return str
- }
- function PFI(num)
- {
- if(num<10)
- return '0'+num
- else
- return num
- }
- function PFI3(num)
- {
- if(num<10) return '00'+num
- if(num<100) return '0'+num
- return num
- }
- function getNowFormatDate()
- {
- var date = new Date();
- var seperator1 = "";
- var seperator2 = "";
- var month = date.getMonth() + 1;
- var strDate = date.getDate();
- if (month >= 1 && month <= 9)
- {
- month = "0" + month;
- }
- if (strDate >= 0 && strDate <= 9)
- {
- strDate = "0" + strDate;
- }
- var strHH = date.getHours()
- var strMM = date.getMinutes()
- var strSS = date.getSeconds()
- if (strHH >= 0 && strHH <= 9) strHH = "0" + strHH;
- if (strMM >= 0 && strMM <= 9) strMM = "0" + strMM;
- if (strSS >= 0 && strSS <= 9) strSS = "0" + strSS;
- var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate
- + "-" + strHH + seperator2 + strMM + seperator2 + strSS;
- return currentdate;
- }
- function init()
- {
- var savepath = process.argv[3]
- var savefn = process.argv[4]
- if(typeof(savefn)=='undefined')
- savefn = ""
- else
- savefn = "_" + savefn.replace(/ /g,"_")
- if(typeof(savepath)=='undefined')
- logName = './'+getNowFormatDate()+'_'+roomid+savefn+'.LRC'
- else
- logName = savepath+'/'+getNowFormatDate()+'_'+roomid+savefn+'.LRC'
- console.log(logName)
- fs.appendFile(logName,'[ti:'+getNowFormatDate()+ ']\n', function (err) {});
- fs.appendFile(logName,'[ar:'+savefn+']\n', function (err) {});
- fs.appendFile(logName,'[offset:0]\n', function (err) {});
- }
- init()
- client.on('connect', () => {
- console.log(`已连接huya ${roomid}`)
- })
- client.on('message', msg => {
- switch (msg.type) {
- case 'chat':
- //console.log(`[${msg.from.name}]:${msg.content}`)
- t2 = process.uptime()*1000
- interval = (t2 - t1)
- var date = new Date( interval )
- var HH = date.getUTCHours()
- var MM = PFI(date.getUTCMinutes()+HH*60)
- var SS = PFI(date.getUTCSeconds())
- var MS = PFI3(parseInt(date.getUTCMilliseconds()))
- var msg = `[${MM}:${SS}.${MS}] ${msg.content}`
- msg = checkemot(msg)
- console.log(msg)
- fs.appendFile(logName, msg+'\n', function (err) {})
- break
- // case 'gift':
- // console.log(`[${msg.from.name}]->赠送${msg.count}个${msg.name}`)
- // break
- // case 'online':
- // console.log(`[当前人气]:${msg.count}`)
- // break
- }
- })
- client.on('error', e => {
- console.log(e)
- })
- client.on('close', () => {
- console.log('close')
- })
- client.start()
参数说明:
node.exe huya.js [虎牙房间号] [要存储目录的绝对路径] [文件名]
编写调用 huya.js 的 批处理文件 huyaDanmu.cmd
- @echo off
- title %1 %3 %date% %time%
- D:\node-v8.9.1-win-x86\node.exe D:\node-v8.9.1-win-x86\node_modules\huya-danmu\huya.js %1 %2 %3
打开控制台窗口 输入 huyaDanmu [虎牙房间号] [要存储目录的绝对路径] [文件名]
不输入存储目录时 直接保存到当前目录
不输入文件名时 自动取名为 YYMMDD-HHMMSS_房间号.LRC
保存的格式是 LRC 歌词文件, 如果想转换 SRT 或者 ASS 格式也很方便, 利用新版 FFMpeg 就可以
- ffmpeg -i xxx.LRC xxx.SRT
- ffmpeg -i xxx.LRC xxx.ASS
温馨提示: 录视频的同时运行 huyaDanmu 批处理命令, 就不用在调整时间轴;
虎牙直播弹幕转换字幕格式 基于Node.js 的 huya-danmu的更多相关文章
- 基于node.js 的 websocket的移动端H5直播开发
这一篇介绍一下基于node.js 的 websocket的移动端H5直播开发, 下载文章底部的源码,我是用vscode打开, 首先在第一个终端运行 npm run http-server 这个指令是运 ...
- 基于Node.js的强大爬虫 能直接发布抓取的文章哦
基于Node.js的强大爬虫 能直接发布抓取的文章哦 基于Node.js的强大爬虫能直接发布抓取的文章哦!本爬虫源码基于WTFPL协议,感兴趣的小伙伴们可以参考一下 一.环境配置 1)搞一台服务器,什 ...
- 《基于Node.js实现简易聊天室系列之详细设计》
一个完整的项目基本分为三个部分:前端.后台和数据库.依照软件工程的理论知识,应该依次按照以下几个步骤:需求分析.概要设计.详细设计.编码.测试等.由于缺乏相关知识的储备,导致这个Demo系列的文章层次 ...
- 基于node.js制作爬虫教程
前言:最近想学习node.js,突然在网上看到基于node的爬虫制作教程,所以简单学习了一下,把这篇文章分享给同样初学node.js的朋友. 目标:爬取 http://tweixin.yueyishu ...
- 基于Node.js + WebSocket 的简易聊天室
代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...
- 基于node.js人脸识别之人脸对比
基于node.js人脸识别之人脸对比 Node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O ...
- NodeBB – 基于 Node.js 的开源论坛系统
NodeBB 是一个更好的论坛平台,专门为现代网络打造.它是免费的,易于使用. NodeBB 论坛软件是基于 Node.js 开发,支持 Redis 或 MongoDB 的数据库.它利用 Web So ...
- 基于 Node.js 平台,快速、开放、极简的 web 开发框架。
资料地址:http://www.expressjs.com.cn/ Express 基于 Node.js 平台,快速.开放.极简的 web 开发框架. $ npm install express -- ...
- Pomelo:网易开源基于 Node.js 的游戏服务端框架
Pomelo:网易开源基于 Node.js 的游戏服务端框架 https://github.com/NetEase/pomelo/wiki/Home-in-Chinese
随机推荐
- JVN的理解
写的很不错,通俗易懂:http://www.cnblogs.com/leefreeman/p/7344460.html
- JEECG BOOT
JEECGBOOT - 开源搜索 - 开源中国https://www.oschina.net/search?scope=blog&q=JEECGBOOT JEECG 基于代码生成器J2EE智能 ...
- Docker 部署Confluence15.2
一.数据库准备 数据库版本:5.7 这里数据库并没有采用docker镜像方式,而是选择已有数据库.至于数据库安装这里不再说明. 注:我这里安装confluence时,需要在下面配置数据库信息时,在数据 ...
- NIO的初步入门
NIO java NIO简介 Java NIO 简介 是从java1.4版本开始引入的一个新的IO AP可以替代标准java IO API NIO与原来的IO有同样的作用和目的,但是使用方式完全不同 ...
- Linux下find命令用法详解
Linux下find命令用法详解 学神VIP烟火 学神IT教育:XueGod-IT 最负责任的线上直播教育平台 本文作者为VIP学员 烟火 第一部分:根据文件名查找 1.在当前目录 ...
- [题解]邮递员寄信(luoguP1629)
题目来源:luoguP1629 题目描述 有一个邮递员要送东西,邮局在结点1.他总共要送N-1样东西,其目的地分别是2-N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条 ...
- Keras 获取中间某一层输出
1.使用函数模型API,新建一个model,将输入和输出定义为原来的model的输入和想要的那一层的输出,然后重新进行predict. #coding=utf-8 import seaborn as ...
- Ubuntu terminal colors
Today I run ubuntu docker image on powershell and find the directory color is blue, so I want to cha ...
- Linux-yum只下载不安装
通过yum命令只下载rpm包不安装 经常遇到服务器没有网络的情况下部署环境,或者创建自己的 yum 仓库等.每次都是在网上搜搜搜,都是五花八门,自己整理了下自己用到的以下三种方式,这里没有太多废话,只 ...
- 重学JavaScript - 数组
作者:狐狸家的鱼 GitHub:surRimn 整理自MDN文档 数组 数组是一种类列表对象,长度和元素类型不固定. 描述 访问数组 JavaScript数组的索引是从0开始的,第一个元素的索引为0, ...