虎牙直播弹幕转换字幕格式 基于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
随机推荐
- .netcore 读取ansi编码
public class FileHelper { //根据文件自动觉察编码并输出内容 public static string GetText(string path) { StringBuilde ...
- 【MongoDB异常】Exception authenticating MongoCredential解决方法
我们通过ideal编辑器编辑 springboot时候,出现这个错误: com.mongodb.MongoSecurityException: Exception authenticating Mon ...
- Tomcat热部署--start tomcat后就可自动部署war包
使用tomcat图形化界面,需要现在配置文件中设置用户名和密码: 在maven中配置Tomcat插件: root目录下的内容可以直接访问: 跳过测试: 查看端口占用:
- Java 写 Log
. 一个最基本的例子 使用Logging框架写Log基本上就三个步骤 引入loggerg类和logger工厂类 声明logger 记录日志 下面看一个例子 //1. 引入slf4j接口的Logger和 ...
- docker容器启动haproxy
1.在本地新增haproxy.cfg文件(本次haproxy.cfg文件路径为/root/haproxy.cfg),内容如下: #---------------- # Global settings ...
- nginx 项目部署
一.nginx 想必我们大多数人都是通过访问网站而开始接触互联网的吧.我们平时访问的网站服务 就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务. Web 网络服务是一种被 ...
- 百度编辑器前后端二开图片上传Js Thinkphp tp5 ueditor
百度编辑器图片上传Jsueditor.all.min.js 下载链接 链接:https://pan.baidu.com/s/1VNgw9ELgRRHKeCQheFkQTw 提取码:fnfi 使用方法: ...
- Linux-KVM虚拟化
kvm安装 1.在宿主机上准备好yum(只需要本地镜像yum就可以) 2.查看CPU是否支持inter或AMD的虚拟技术 # cat /proc/cpuinfo |grep -E "vmx| ...
- JMeter 下载
测试文件下载接口,jmeter返回的是字节流,所以jmeter本身是不支持将文件保存到本地的 怎么判断服务器有没有完全返回?response header头里面有一个content-lenth,添加断 ...
- Codeforces Round #551 (Div. 2)
传送门 B. Serval and Toy Bricks 题意: 有一些规格相同的方块摆放在 n×m 的矩阵 h 中,h[i][j]代表第 (i,j) 个矩阵摆放的方块的高度: 现给你三个视图: 正视 ...