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()+ '] ', function (err) {}); 120 fs.appendFile(logName,'[ar:'+savefn+'] ', function (err) {}); 121 fs.appendFile(logName,'[offset:0] ', 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+' ', 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: ode-v8.9.1-win-x86 ode.exe D: ode-v8.9.1-win-x86 ode_moduleshuya-danmuhuya.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 批处理命令, 就不用在调整时间轴;