1 首先安装nodejs运行环境, 从 http://nodejs.cn/download/ 下载对应的版本

2 安装 huya-danmu 模块, https://github.com/BacooTang/huya-danmu 有详细的安装方法

3 参照 huya-danmu 模块中 test.js 编写 huya.js 新文件

  1. const huya_danmu = require('./index')
  2. var fs = require('fs')
  3.  
  4. const roomid = process.argv[2]
  5. const client = new huya_danmu(roomid)
  6. var t1 = new Date().getTime()
  7. var t2 = t1
  8. var interval = 0
  9. var logName = ''
  10. t1 = process.uptime()*1000
  11.  
  12. var emots = {
  13. "/{dx" : "[大笑]",
  14. "/{sh" : "[送花]",
  15. "/{tx" : "[偷笑]",
  16. "/{dk" : "[大哭]",
  17. "/{hh" : "[嘿哈]",
  18. "/{66" : "[666]",
  19. "/{gd" : "[感动]",
  20. "/{yw" : "[疑问]",
  21. "/{xh" : "[喜欢]",
  22. "/{jx" : "[奸笑]",
  23. "/{zan" : "[赞]",
  24. "/{ka" : "[可爱]",
  25. "/{am" : "[傲慢]",
  26. "/{kx" : "[开心]",
  27. "/{88" : "[拜拜]",
  28. "/{hx" : "[害羞]",
  29. "/{zs" : "[衰]",
  30. "/{pu" : "[吐血]",
  31. "/{zc" : "[嘴馋]",
  32. "/{sq" : "[生气]",
  33. "/{fe" : "[扶额]",
  34. "/{bz" : "[闭嘴]",
  35. "/{kw" : "[枯萎]",
  36. "/{xu" : "[嘘]",
  37. "/{xk" : "[笑哭]",
  38. "/{lh" : "[流汗]",
  39. "/{bk" : "[不看]",
  40. "/{hq" : "[哈欠]",
  41. "/{tp" : "[调皮]",
  42. "/{gl" : "[鬼脸]",
  43. "/{cl" : "[戳脸]",
  44. "/{dg" : "[大哥]",
  45. "/{kun" : "[困]",
  46. "/{yb" : "[拥抱]",
  47. "/{zt" : "[猪头]",
  48. "/{kl" : "[骷髅]",
  49. "/{cc" : "[臭臭]",
  50. "/{xd" : "[心动]",
  51. "/{dao" : "[刀]"
  52. }
  53.  
  54. function checkemot(str)
  55. {
  56. if(str.includes('/{') == false ) return str
  57. for(var key in emots) {
  58. str = str.replace(new RegExp(key,'g'), emots[key])
  59. }
  60. return str
  61. }
  62.  
  63. function PFI(num)
  64. {
  65. if(num<10)
  66. return '0'+num
  67. else
  68. return num
  69. }
  70.  
  71. function PFI3(num)
  72. {
  73. if(num<10) return '00'+num
  74. if(num<100) return '0'+num
  75. return num
  76. }
  77.  
  78. function getNowFormatDate()
  79. {
  80. var date = new Date();
  81. var seperator1 = "";
  82. var seperator2 = "";
  83. var month = date.getMonth() + 1;
  84. var strDate = date.getDate();
  85. if (month >= 1 && month <= 9)
  86. {
  87. month = "0" + month;
  88. }
  89. if (strDate >= 0 && strDate <= 9)
  90. {
  91. strDate = "0" + strDate;
  92. }
  93.  
  94. var strHH = date.getHours()
  95. var strMM = date.getMinutes()
  96. var strSS = date.getSeconds()
  97. if (strHH >= 0 && strHH <= 9) strHH = "0" + strHH;
  98. if (strMM >= 0 && strMM <= 9) strMM = "0" + strMM;
  99. if (strSS >= 0 && strSS <= 9) strSS = "0" + strSS;
  100.  
  101. var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate
  102. + "-" + strHH + seperator2 + strMM + seperator2 + strSS;
  103. return currentdate;
  104. }
  105.  
  106. function init()
  107. {
  108. var savepath = process.argv[3]
  109. var savefn = process.argv[4]
  110. if(typeof(savefn)=='undefined')
  111. savefn = ""
  112. else
  113. savefn = "_" + savefn.replace(/ /g,"_")
  114. if(typeof(savepath)=='undefined')
  115. logName = './'+getNowFormatDate()+'_'+roomid+savefn+'.LRC'
  116. else
  117. logName = savepath+'/'+getNowFormatDate()+'_'+roomid+savefn+'.LRC'
  118. console.log(logName)
  119. fs.appendFile(logName,'[ti:'+getNowFormatDate()+ ']\n', function (err) {});
  120. fs.appendFile(logName,'[ar:'+savefn+']\n', function (err) {});
  121. fs.appendFile(logName,'[offset:0]\n', function (err) {});
  122. }
  123.  
  124. init()
  125.  
  126. client.on('connect', () => {
  127. console.log(`已连接huya ${roomid}`)
  128. })
  129.  
  130. client.on('message', msg => {
  131. switch (msg.type) {
  132. case 'chat':
  133. //console.log(`[${msg.from.name}]:${msg.content}`)
  134. t2 = process.uptime()*1000
  135. interval = (t2 - t1)
  136. var date = new Date( interval )
  137. var HH = date.getUTCHours()
  138. var MM = PFI(date.getUTCMinutes()+HH*60)
  139. var SS = PFI(date.getUTCSeconds())
  140. var MS = PFI3(parseInt(date.getUTCMilliseconds()))
  141. var msg = `[${MM}:${SS}.${MS}] ${msg.content}`
  142. msg = checkemot(msg)
  143. console.log(msg)
  144. fs.appendFile(logName, msg+'\n', function (err) {})
  145. break
  146. // case 'gift':
  147. // console.log(`[${msg.from.name}]->赠送${msg.count}个${msg.name}`)
  148. // break
  149. // case 'online':
  150. // console.log(`[当前人气]:${msg.count}`)
  151. // break
  152. }
  153. })
  154.  
  155. client.on('error', e => {
  156. console.log(e)
  157. })
  158.  
  159. client.on('close', () => {
  160. console.log('close')
  161. })
  162.  
  163. client.start()

参数说明:

node.exe huya.js [虎牙房间号] [要存储目录的绝对路径] [文件名]

编写调用 huya.js 的 批处理文件 huyaDanmu.cmd

  1. @echo off
  2. title %1 %3 %date% %time%
  3. 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 就可以

  1. ffmpeg -i xxx.LRC xxx.SRT
  2. ffmpeg -i xxx.LRC xxx.ASS

温馨提示: 录视频的同时运行 huyaDanmu 批处理命令, 就不用在调整时间轴;

虎牙直播弹幕转换字幕格式 基于Node.js 的 huya-danmu的更多相关文章

  1. 基于node.js 的 websocket的移动端H5直播开发

    这一篇介绍一下基于node.js 的 websocket的移动端H5直播开发, 下载文章底部的源码,我是用vscode打开, 首先在第一个终端运行 npm run http-server 这个指令是运 ...

  2. 基于Node.js的强大爬虫 能直接发布抓取的文章哦

    基于Node.js的强大爬虫 能直接发布抓取的文章哦 基于Node.js的强大爬虫能直接发布抓取的文章哦!本爬虫源码基于WTFPL协议,感兴趣的小伙伴们可以参考一下 一.环境配置 1)搞一台服务器,什 ...

  3. 《基于Node.js实现简易聊天室系列之详细设计》

    一个完整的项目基本分为三个部分:前端.后台和数据库.依照软件工程的理论知识,应该依次按照以下几个步骤:需求分析.概要设计.详细设计.编码.测试等.由于缺乏相关知识的储备,导致这个Demo系列的文章层次 ...

  4. 基于node.js制作爬虫教程

    前言:最近想学习node.js,突然在网上看到基于node的爬虫制作教程,所以简单学习了一下,把这篇文章分享给同样初学node.js的朋友. 目标:爬取 http://tweixin.yueyishu ...

  5. 基于Node.js + WebSocket 的简易聊天室

    代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...

  6. 基于node.js人脸识别之人脸对比

    基于node.js人脸识别之人脸对比 Node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O ...

  7. NodeBB – 基于 Node.js 的开源论坛系统

    NodeBB 是一个更好的论坛平台,专门为现代网络打造.它是免费的,易于使用. NodeBB 论坛软件是基于 Node.js 开发,支持 Redis 或 MongoDB 的数据库.它利用 Web So ...

  8. 基于 Node.js 平台,快速、开放、极简的 web 开发框架。

    资料地址:http://www.expressjs.com.cn/ Express 基于 Node.js 平台,快速.开放.极简的 web 开发框架. $ npm install express -- ...

  9. Pomelo:网易开源基于 Node.js 的游戏服务端框架

    Pomelo:网易开源基于 Node.js 的游戏服务端框架 https://github.com/NetEase/pomelo/wiki/Home-in-Chinese

随机推荐

  1. JVN的理解

    写的很不错,通俗易懂:http://www.cnblogs.com/leefreeman/p/7344460.html

  2. JEECG BOOT

    JEECGBOOT - 开源搜索 - 开源中国https://www.oschina.net/search?scope=blog&q=JEECGBOOT JEECG 基于代码生成器J2EE智能 ...

  3. Docker 部署Confluence15.2

    一.数据库准备 数据库版本:5.7 这里数据库并没有采用docker镜像方式,而是选择已有数据库.至于数据库安装这里不再说明. 注:我这里安装confluence时,需要在下面配置数据库信息时,在数据 ...

  4. NIO的初步入门

    NIO java NIO简介 Java NIO 简介 是从java1.4版本开始引入的一个新的IO AP可以替代标准java  IO API NIO与原来的IO有同样的作用和目的,但是使用方式完全不同 ...

  5. Linux下find命令用法详解

    Linux下find命令用法详解   学神VIP烟火 学神IT教育:XueGod-IT   最负责任的线上直播教育平台   本文作者为VIP学员 烟火   第一部分:根据文件名查找   1.在当前目录 ...

  6. [题解]邮递员寄信(luoguP1629)

    题目来源:luoguP1629 题目描述 有一个邮递员要送东西,邮局在结点1.他总共要送N-1样东西,其目的地分别是2-N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条 ...

  7. Keras 获取中间某一层输出

    1.使用函数模型API,新建一个model,将输入和输出定义为原来的model的输入和想要的那一层的输出,然后重新进行predict. #coding=utf-8 import seaborn as ...

  8. Ubuntu terminal colors

    Today I run ubuntu docker image on powershell and find the directory color is blue, so I want to cha ...

  9. Linux-yum只下载不安装

    通过yum命令只下载rpm包不安装 经常遇到服务器没有网络的情况下部署环境,或者创建自己的 yum 仓库等.每次都是在网上搜搜搜,都是五花八门,自己整理了下自己用到的以下三种方式,这里没有太多废话,只 ...

  10. 重学JavaScript - 数组

    作者:狐狸家的鱼 GitHub:surRimn 整理自MDN文档 数组 数组是一种类列表对象,长度和元素类型不固定. 描述 访问数组 JavaScript数组的索引是从0开始的,第一个元素的索引为0, ...