bilibili高级弹幕代码初阶教程
- 格式:doc
- 大小:126.50 KB
- 文档页数:19
行走弹幕的制作方法1<span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-lat in;mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family: Calibri;mso-hansi-theme-font:minor-latin">、打开微信,依次点击“发现—<span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-lat in;mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family: Calibri;mso-hansi-theme-font:minor-latin">小程序”,输入“手持弹幕”,搜索到“手持弹幕”后,打开它,弹出“手持弹幕”操作界面。
2<span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin; mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family: Calibri;mso-hansi-theme-font:minor-latin">、在“手持弹幕”操作界面上点击“请输入”,弹出操作键盘,输入文字,如“大家好”,输完后,点击“完成”,大家好三个字即出现在“手持弹幕”界面上。
一、字幕制作过程简介字幕制作的过程通常可分为片源提供、文稿翻译、时间轴、特效、校对、压制几个步骤.时间轴是指利用PopSub或其他时间轴工具制作出和视频内容相对应的基本字幕内容,保存的格式通常为ass或ssa。
ass和ssa除了个别地方,基本没什么太大的区别,后文主要介绍ass。
特效是指手动调整ass字幕的字体,颜色,位置和运动效果等.ass字幕功能很强大,合理的运用各种特效代码,能达到各种绚丽的效果。
不过这就属于高级字幕特效范畴了,本篇只介绍字幕特效的入门。
压制就是把做好的字幕嵌到无字视频里面,合成一个尺寸,大小和画质都合适的档.二、安装字幕软件PopSub不仅仅是时间轴编辑工具,同时它还能制作简单的特效。
另外类似的字幕制作编辑软件还有SubCreator和SubStationAlpha等.因为我用的是PopSub,所以后面的讲述将以PopSub为例。
【下载1:http:///file/ef1orrnu# PopSub_Version0。
74.rar】首先准备一个avi格式的视频(称之为片源)和可以用的ass格式的字幕,把ass字幕改为和视频相同的文件名,并保存在同一文件夹下。
打开PopSub,按“文件",“打开动画”,播放视频,如果显示字幕,同时桌面右下角出现如图所示的绿色箭头,就说明可以开始字幕制作了.如果没有显示,就需要安装一个插件Vobsub。
【下载2:http: ///file/c4semcsp# VobSub(VSFilter)_V2。
39_汉化修正版.rar】【图1】要正确显示字幕还需要Vobsub,它是一个辅助工具。
另外它的安装有点特殊.下载VobSub软件后,解压,双击安装,然后在“开始—〉运行" 对话框中输入“ regsvr32 vsfilter。
dll”,按确定后,如果出现下面右边的对话框则说明安装成功了,于是可以开始字幕制作了;但是,如果解压后发现只有 unrar。
B站⾃动刷弹幕B站⾃动填弹幕(附带createEvent消息机制)昨晚看的⽐赛真的要⽓死我。
RNG 居然⼜输了。
为了LPL。
我写了⼀个为LPL加油的脚本。
希望⼤家能和我⼀起为LPL加油!脚本代码如下:var event = document.createEvent('Event');event.initEvent('input', true, true);function fun123(){$('.chat-input.border-box').val("前⽅⾼能!!");$('.chat-input.border-box')[0].dispatchEvent(event);$('.bl-button.live-skin-highlight-button-bg.bl-button--primary.bl-button--small').click();}setInterval("fun123()","100");第⼀步打开浏览器并登录B站按F12将控制台打开将代码粘贴进去然后按回车请⼤家观赏效果往下就是其他原理了,⾮技术⼈员请离开经过我多次调试,发现B站的textarea需要触发⼀个keydown事件之后才能发送。
所以我查阅了w3c⽂档,总结如下:createEvent使⽤的许多⽅法, 如 initCustomEvent, 都被废弃了. 请使⽤ event constructors 来替代.创建⼀个指定类型的事件。
其返回的对象必须先初始化并可以被传递给 element.dispatchEvent。
语法var event = document.createEvent(type);event 就是被创建的 Event 对象.type 是⼀个字符串,表⽰要创建的事件类型。
ass字幕特效代码大全ASS字幕特效代码学好SSA主要从两个方面着手:一个是SSA文件的组成结构;一个是SSA代码。
一.SSA文件的组成结构SSA文件主要由三大部分组成:[Script Info]部分,[v4 Styles]部分和[Events]部分。
1.[Script Info]部分PlayResX: 384PlayResY: 288384×288是标准的4:3画面分辨率之一。
ssa字幕里的坐标(字幕的位置)即根据这2个数值的范围来定义。
16:9宽银幕的片子略做调整即可。
这里主要介绍文件本身和制的信息,这里面最重要的两项是PlayResX和PlayResY,它实际上是按给定的PlayResX和PlayResY数值将屏幕按比例化分,屏幕的左上角坐标为(0,0),右下角坐标为(PlayResX数值,PlayResY数值).这两个值最好是和视频文件的长宽相同,这样在下面[Events]部分文本位置坐标的设定很方便而且准确. 当然这两个值也可能和原视频文件的长宽不同,比如视频文件尺寸为640x360,而PlayResX:384,PlayResY: 288,如同前面所说的,它是将屏幕长宽按384:288来化分的.一旦这样划定,下面的各种坐标设定都要以384和288为根据.特别要注意的是:对于一个已经存在并且文本坐标都设置好的SSA文件,如果它的PlayResX和PlayResY数值和视频文件的长宽尺寸不符(包括成比例的情况,比如视频文件尺寸为640x360,而 PlayResX:320,PlayResY: 180),我们不要简单的把PlayResX和PlayResY数值改成屏幕尺寸,这样将导致字幕失真,是因为文本部分的尺寸并没有改,仍按照原来的PlayResX和PlayResY数值设定.如果有较多的坐标设定,就不要改原来的PlayResX和PlayResY数值,在原基础上编辑.2.[V4 Styles]部分这是个存放[Events]部分里所用到的各种字体信息的地方.可以存在多种字体,每种字体有多种特征.当[Events]部分的Name项引用到这里的某种字体时,则意味这该字体的各种特征也被引用.字体的特征还可以在文本行中修改,这将在[Events]部分讨论.常见的字体属性有Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour,TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding我们可以再定义一个Style,并命名为mine,如Style: mine,华文新魏,18,&HFF0000,&HFF80FF0,&Hffffff,&Hffffff,0,0,1,2,1,2,20,20,20,0,134即可以这样:[V4 Styles]Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle,Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, EncodingStyle: Default,华文彩云,18,&Hff0000,&Hff8080,&Hffffff,&Hffffff,0,0,1,2,1,2,20,20,20,0,134Style: mine,华文新魏,18,&HFF0000,&HFF80FF0,&Hffffff,&Hffffff,0,0,1,2,1,2,20,20,20,0,134有了具体经验后,一般可以不作调整,需要改动的可以是“Fontname”,如改成黑体,“Fontsize”,做字幕字号24比较合适。
目录第一章初步了解高级弹幕1.1 变量1.2创建文本弹幕对象1.3 弹幕对象运动的设置1.4 绘图弹幕对象创建以与设置颜色样式设置.1 beginFill 指定一种颜色进行填充.2 lineGradientStyle beginGradientFill 指定一种线条样式,填充样式的渐变.3 lineStyle 指定线条样式图形的绘制.1 绘制一条直线.2 绘制一条二次贝塞尔曲线.3 绘制一个圆.4 绘制一个椭圆.5 绘制一个矩形.5 绘制一个圆角矩形第二章使用其他工具2.1Utils 工具库hue将0-360的值映射到色相环rgb将RGB值映射到色彩值上formatTimes格式化播放时间timer 延迟执行函数interval 定时重复执行函数distance 计算坐标距离rand 返回一个前闭后开的整数2.2 Function 函数的创建与使用2.3 播放器控制视频时间跳转至跳转到指定av号指定页视频第一章初步了解高级弹幕1.1 第一节变量废话不多说.我们先来看一句最基本的弹幕.首先一次个关键字是”var”.该关键字的意思就是声明一个变量.变量说的简单点就是在后面的过程中可以给“a”重新赋值.然后就是变量名”a”了,这玩意理解成名字就行了.至于关于变量名的规则有些关键字与保留字是不允许创建的.保留字,关键字第三个是运算符”=”,首先等于号并不是数学中的等于意思.而是给声明的变量a赋值.将等号右边的值赋予给左边.第四个”1”就是一个值了.结尾的分号表示该语句结束.看到这里相信大家已经对这句弹幕有了基础的了解.这句话的意思就是:声明变量”a”并且初始化其值为数字1.写高级弹幕的时候请严格注意大小写.1.2 第二节创建文本弹幕对象.首先要知道bili的播放器的大小.像素为单位.正常模式:宽541 高384宽屏模式:宽950 搞528全屏模式与网页全屏模式根据显示器分辨率来确定.在高级弹幕中在实际弹幕时间会在发布时间轴填写的时间基础上减去约0.2秒.所以请注意时间轴的问题高级弹幕中创建新的文本弹幕对象要用到createComment("",{})这个语句.请看实例var a = $.createComment("text ",{x:100});该弹幕的意思就是创建一个变量a并创建一个新弹幕对象赋于a.我们可以这么理解createComment.他的括号有2个参数.”text”是弹幕容.{x:100}是该弹幕参数x轴上的位置是100.当然括号的不可能只有x这一个参数.我们可以用到的有.x —新创建元件的X轴座标y —新创建元件的Y轴座标z —新创建元件的Z轴座标lifeTime—元件的生存时间(以秒为单位)注:一旦设置不可更改alpha —元件的透明度color —文字类元件的色彩fontsize—文字类元件的大小parent —元件的父元件(进阶应用)motion —元件移动策略scale —缩放那么我们来定义一个稍微复杂点的高级弹幕.例:(注:参数之间以英文逗号区分,最后一个参数结尾无逗号)大家可以预览一下这条弹幕.就是在x轴100,y轴100的位置创建一个容是text的弹幕.该弹幕生存时间为10秒.字体大小为20号.十六进制颜色为灰色.透明度0.8.那么.到了这里大家应该已经知道怎么去在一个点创建弹幕并设置该弹幕各项参数.接下来就来说一下在创建后各项属性的更改与设置.现在.声明变量c并创建了一个弹幕容为"测试"的弹幕.它的x轴为50,y轴为100.例:那么如果我们现在需要让他的位置x轴不变y轴变更到50.那么我们这个时候就需要直接更改弹幕的某一个参数.只需要在弹幕后面加上.c.y = 50;(注:更改颜色的语句不是c.color而是c.textColor.注意大小写)此外还有比较常用的就是旋转3个轴的设置.c.rotationX,rotationY,rotationZ.例:另还有些参数也可以设置.详细参考训练题:1.声明变量c并创建一条弹幕对象.其容为空.其属性为X轴为270.Y轴为190.生存时间5秒.字体颜色为0xff0000,透明度为0.5.字体大小为15号.2.更改c的x轴位置为200.透明度更改为1.颜色为0xfff000.1.3 弹幕对象运动的设置在上一个章节中学习了如何创建文本对象和设置文本对象的参数.这次就讲如何让创建的弹幕对象运动起来.这里我们要用到motion.下面请看一个例子.让我们来分析这条弹幕.首先上已经了解过了createComment的用法.那么我直接来看到多出来的这个属性motion. motion:{x:{fromValue:100,toValue:250,lifeTime:3}}在这里面其中x为需要移动的参数.x中的fromValue是x的起始位置toValue是结束位置.lifeTime是这个运动过程所花费的时间.(注:如果在motion里面x.y有起始值并且在motion 外也设置x.y的值,那么将显示motion里面的设置位置)此外motion支持多属性同时运动.例:这次除了移动x轴还添加了一个透明度从0到1的变化.下面我们说一下在motion中有哪些是可以做变化的.x:移动x轴位置.y:移动y轴位置.alpha:透明度变换(有效值0-1).fontsize:字体大小变换(不推荐使用.字号的变换较明显.rotationX, rotationY, rotationX:旋转x轴,旋转Y轴,旋转Z轴.其中的属性值有:必填fromValu e起始移动属性值可选toValue 结束移动属性值如留空则不移动可选lifeTime以秒为单位的移动生存时间如留空则与整体生存时间一致可选startDelay以毫秒为单位的起始移动延时时间(毫秒为单位)可选easing 详细请看补间效果可选repeat 效果重复次数下面我们来看一个相对复杂的例子在这个例子里面我们用到了startDelay这个属性.我们把这个代码拆开分了3段来看.首先x轴的是从100移动到250.移动时间3秒.然后起始移动时间是500毫秒.也就是说x轴是在500毫秒后开始移动的.然后是y轴从50移动到250移动时间3秒.最后是透明度从0到1变化时间为0.5秒.重复执行6次.把这三个参数整合在一起就变成了.移动测试从x:100,y:50的位置开始移动,并且透明度最开始是0.由于x有一个起始移动时间.但是y轴跟透明度变化已经开始.所以首先"移动测试"会先渐入的向下移动.500毫秒后x开始移动这个时候y轴的移动还没有停第一次的透明度改变已经结束.所以x,y轴这个时候是同时移动的.最后结果回是往右下移动并且透明度会重复的从0到1..虽然可以使用repeat这个属性执行重复的操作.但是这个是远远不能满足复杂的移动效果的.然而去创建很多motion也是很麻烦的.这里我就需要用到motionGroup了.motionGroup能执行多个motion连续运动.我们来看一个实例.以上弹幕就是使用一个组将两个移动连接在了一起→↓.需要注意的是motionGroup的冒号后面的是英文中括号.并且每一次移动包括透明度都最好加上lifeTime并且每一个motion中的lifeTime的时间必须一致..每一次motion之间用英文逗号相隔.最后一个结尾无符号.1.4 绘图弹幕对象创建以与设置使用命令:createShape例子:等方法同creatComment).绘图需要使用到的:curveTo使用当前线条样式绘制一条二次贝塞尔曲线drawCircle绘制一个圆.drawEllipse绘制一个椭圆drawRect绘制一个矩形drawRoundRect绘制一个圆角矩形lineTo绘制一条直线beginFill指定一种颜色进行填充lineStyle指定线条样式lineGradientStyle指定一种线条样式的渐变beginGradientFill指定一种填充样式的渐变我们来一个个的来了解.首先要了解的并不是怎么去绘制而是设定绘制的样式颜色样式设置.1beginFill 指定一种颜色进行填充这里用到:beginFill指定一种颜色进行填充在beginFill里面有2个参数.第一个是十六进制的颜色,第二个是填充的透明度(可选).实例:这里用的一长串就是设置g的填充颜色以与透明度.两个都是有效的.graphics则是是提供绘图的API.以后使用的时候都会用到这个.后面小括号就是参数了. 注:graphics前面的g必须是创建图形对象的名字.1.4.1.2 lineGradientStylebeginGradientFill指定一种线条样式,填充样式的渐变这里需要用到:lineGradientStyle指定一种线条样式的渐变beginGradientFill指定一种填充样式的渐变详细请看:type上例参数"linear"用于指定要使用哪种渐变类型的GradientType 类的值:GradientType.LINEAR 或GradientType.RADIAL。
danmakuflamemaster基础用法danmakuflamemaster是一种流行的弹幕发射器,其基础用法旨在让用户能够轻松创建弹幕效果。
本文将详细介绍danmakuflamemaster的基础用法,帮助读者了解如何使用这个弹幕发射器来创建自己的弹幕效果。
什么是danmakuflamemaster?danmakuflamemaster是一款弹幕发射器,用于在视频或直播中显示用户发送的弹幕。
它具有强大的功能和用户友好的界面,是许多弹幕视频爱好者和直播平台用户的首选。
danmakuflamemaster的基本安装和配置首先,我们需要从官方网站或其他可靠的来源下载并安装danmakuflamemaster。
安装完成后,打开程序并按照提示完成初始配置。
配置界面通常会要求输入一些基础信息,如用户名、密码和服务器地址。
填写完成后,点击“确认”并等待程序加载。
danmakuflamemaster的主要界面danmakuflamemaster的主要界面分为三个区域:视频播放区、弹幕输入区和弹幕列表区。
- 视频播放区:用于显示正在播放的视频。
在这个区域,用户可以控制视频的播放、暂停以及快进等操作。
- 弹幕输入区:用户可以在这个区域中输入要发送的弹幕内容。
用户可以选择弹幕的颜色、字体和大小,并设置发送的位置和显示时间等。
- 弹幕列表区:这个区域用于显示已发送的弹幕。
用户可以在这里看到其他用户发送的弹幕,并选择是否显示或屏蔽特定的弹幕。
创建和发送弹幕要创建和发送弹幕,用户需要做以下几个步骤:1. 在弹幕输入区选择要使用的字体、颜色和大小。
danmakuflamemaster 通常会提供一些默认选项供用户选择,也可以通过导入自定义字体来实现个性化效果。
2. 输入弹幕的内容。
用户可以在输入框中键入文本,也可以复制粘贴已有的文本。
在这一步中,用户可以使用简单的标记语言来设置文字样式,如设置为粗体、斜体或下划线。
3. 设置弹幕的显示位置和时间。
Bilibili弹幕爬取初探⽬录信息解读1446.2345,1,25,16777215,1312863760,0,eff85771,42759017中⼏个逗号分割的数据第⼀个参数 time 是弹幕出现的时间以秒数为单位。
第⼆个参数 mode 是弹幕的模式1..3 滚动弹幕 4底端弹幕 5顶端弹幕 6.逆向弹幕 7精准定位 8⾼级弹幕。
第三个参数 size 是字号, 12⾮常⼩,16特⼩,18⼩,25中,36⼤,45很⼤,64特别⼤。
第四个参数 color 是字体的颜⾊以HTML颜⾊的⼗进制为准。
第五个参数 timestamp 是Unix格式的时间戳。
基准时间为 1970-1-1 08:00:00。
第六个参数 pool 是弹幕池 0普通池 1字幕池 2特殊池。
第七个参数 author 是发送者的ID,⽤于“屏蔽此弹幕的发送者”功能。
第⼋个参数 rowid 是弹幕在弹幕数据库中rowID ⽤于“历史弹幕”功能。
最后我们加⼀个 text 表⽰弹幕本⾝的内容。
实现我们把每条弹幕的所有信息(连同视频的 cid)⼀起整到⼀个字典对象中,最终输出⼀个字典对象的列表。
单线程按搜索结果批量爬取import jsonimport reimport requestsimport jsondef GetHTMLContent(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36' }response = requests.get(url, headers=headers)return response.content.decode("utf-8")def SaveDanmuList(list, cid):reDanmu = pile(r'<d p="(.*?),(.*?),(.*?),(.*?),(.*?),(.*?),(.*?),(.*?)">(.*?)</d>')listDanmu = re.findall(reDanmu, list)fileOutput = open("output_"+cid+".json", "w", encoding="utf-8")listDictDanmu = []for itemDanmu in listDanmu:dictItemDanmu = {}dictItemDanmu["cid"] = ciddictItemDanmu["time"] = itemDanmu[0]dictItemDanmu["mode"] = itemDanmu[1]dictItemDanmu["size"] = itemDanmu[2]dictItemDanmu["color"] = itemDanmu[3]dictItemDanmu["timestamp"] = itemDanmu[4]dictItemDanmu["pool"] = itemDanmu[5]dictItemDanmu["author"] = itemDanmu[6]dictItemDanmu["rowid"] = itemDanmu[7]dictItemDanmu["text"] = itemDanmu[8]listDictDanmu += [dictItemDanmu]jsonDictDanmu = json.dumps(listDictDanmu)fileOutput.write(json.dumps(listDictDanmu, ensure_ascii=False,sort_keys=True, indent=4, separators=(',', ':')))fileOutput.close()def GetDanmuByCid(queryCid):urlDanmuXml = 'https:///'+queryCid+'.xml'strDanmuXml = GetHTMLContent(urlDanmuXml)SaveDanmuList(strDanmuXml, queryCid)def GetCidByBid(queryBid):urlGetCid = "https:///x/player/pagelist?bvid=" + \queryBid + "&jsonp=jsonp"strCidJson = GetHTMLContent(urlGetCid)jsonCid = json.loads(strCidJson)return str(jsonCid["data"][0]["cid"])def GetDanmuByBid(queryBid):queryCid = GetCidByBid(queryBid)GetDanmuByCid(queryCid)def GetBidsBySearch(searchKeyword):urlSearch = "https:///all?keyword=" + \searchKeyword+"&from_source=web_search"htmlSearch = GetHTMLContent(urlSearch)reBid = pile(r'///video/(.*?)\?from=search')listBid = re.findall(reBid, htmlSearch)return listBidif __name__ == "__main__":listBid = GetBidsBySearch("记忆碎⽚")for itemBid in listBid:GetDanmuByBid(itemBid)print("Succeed :)")多线程并⾏我们开了⼗个线程并⾏,每个线程负责⼀页搜索结果。