分类 vvtoolbox series 下的文章

比如现在有一张图是这样的
彩色原图
转换到HSV空间
请输入图片描述
二值化后是这样的
inrange处理
我想保留文字,尽可能去掉大块的白色部分,
思路:首先将二值化图像进行腐蚀操作,然后进行膨胀操作,这样大块的白色部分不会怎么变,而文字则会再腐蚀的时候被去掉。
腐蚀
膨胀
一来二去现在就剩下白块部分了,如果膨胀的力度比腐蚀大一点,现在对其进行取反。
最后与原二值图像相与,这样文字部分基本都会保留,文字周围的部分不会受到影响,而原来的白块部分则会被“挖”出一个只剩边缘的区域。甚至能完全去掉白块部分。
取反相与
在这运算过程中,需要根据文字把握好腐蚀膨胀的程度。

参考:

如有错误,还请指正。

什么是box

根据CFFMediaFormat(Common File Format & Media Formats Specification)的说明,box指的是通过特定标识符和长度定义的面向对象建立的块。
请输入图片描述

什么是pssh

pssh全称是Protection System Specific Header,即用于标识保护系统的特定头(不顺口的解释)

pssh box的构成

目前主流的DRM系统主要是PlayReady,Widevine和Fairplay三家(微软、谷歌和苹果),在它们的DRM系统数据交换中pssh是一个关键的值。

pssh box的标准构成:

  • 4 bytes – the size of the PSSH box
  • 4 bytes – the constant “PSSH”
  • 4 bytes – flags based on the ISOBMFF specification
  • 16 bytes – unique key system identifier
  • 4 bytes – size of the data inside the PSSH box
  • byte array – data itself

通常情况下,pssh能在mpd一类的文件中见到,例如使用widevine的视频网站,其中的mpd文件大致长这样:
请输入图片描述

一个容易见到且典型的pssh一般就是这个样子了(base64编码形式的):

AAAAQHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAACAIARIQ+0sI0/UVlrXzdUjHhhmNNRoEa2t0diIEa2t0dg==

为了方便理解,将它转换到十进制形式:

list(base64.b64decode(b'AAAAQHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAACAIARIQ+0sI0/UVlrXzdUjHhhmNNRoEa2t0diIEa2t0dg=='))
[0, 0, 0, 64, 112, 115, 115, 104, 0, 0, 0, 0, 237, 239, 139, 169, 121, 214, 74, 206, 163, 200, 39, 220, 213, 29, 33, 237, 0, 0, 0, 32, 8, 1, 18, 16, 251, 75, 8, 211, 245, 21, 150, 181, 243, 117, 72, 199, 134, 25, 141, 53, 26, 4, 107, 107, 116, 118, 34, 4, 107, 107, 116, 118]

按标准依次分解如下(各类进制转换请自行脑补):

  • 0, 0, 0, 64 表示整个pssh box长度64字节
  • 112, 115, 115, 104 对应的ascii字符就是pssh(小写)
  • 0, 0, 0, 0 表示根据ISOBMFF中特定的标识符
  • 237, 239, 139, 169, 121, 214, 74, 206, 163, 200, 39, 220, 213, 29, 33, 237 表示DRM系统的特定ID,这里的ID是widevine类型,参见此处
  • 0, 0, 0, 32 表示pssh box内的数据长度,即从此处偏移这个长度后到达pssh box末尾
  • 8, 1, 18, 16, 251, 75, 8, 211, 245, 21, 150, 181, 243, 117, 72, 199, 134, 25, 141, 53, 26, 4, 107, 107, 116, 118, 34, 4, 107, 107, 116, 118 该部分32字节,这里实际上是对应视频和音频的两个KID。

其他

  • KID是加密的音频轨道或视频轨道等的特定密钥标识符,简单来说加密视频时这个KID和key对应,如果你知道一对KID和key,那么就能解密由该KID标识的视频/音频文件等。
  • pssh末尾部分不一定是直接两个KID,也有可能是其他构成方式

以下是手动获取key的方法:

下断点
Disable Cache

  • 此时在console执行btoa(String.fromCharCode.apply(null, new Uint8Array(i._sce_dlgtqredxx)))即可得到base64形式的key

得到base64形式的key

注意这里的界面方式是AES-ECB,并非AES-CBC
实际上和优酷是一类方法,所以请如果要用vvtoolbox_gui_series下载请选择AES-YK方法(v0.4.0版起)
然后通过支持aes解密的下载器配合key下载即可~

动图演示:

http://pan.iqiyi.com/ext/paopao/?token=eJxjYGBgmBQtsZUBBHZNkQAAFYwDIQ.gif
动图演示

使用须知

可通过赞助获取软件,并留言你的邮箱, 软件使用时间与赞助时长一致(5元/月)。
源代码20元,源代码+代码疑问解答30元(1个月内)。
地址:https://afdian.net/@vvtoolbox_dev

效果展示

请输入图片描述
请输入图片描述
保存到本地的m3u8文件与key文件,通过N_m3u8DL-CLI可以下载到本地
请输入图片描述

视频示例

好像录成hevc了,网页播放不了
[dplayer url="https://alime-customer-upload-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/customer-upload/1580664707151_avdmz4borexe.mp4" pic="" /]

GetDanMu

转换/下载各类视频弹幕的工具

项目主页:https://github.com/xhlove/GetDanMu

网站支持

SiteURL单集?合集?综艺合集?支持series?
腾讯视频https://v.qq.com/
爱奇艺https://www.iqiyi.com/
优酷https://v.youku.com/
搜狐视频https://tv.sohu.com/
芒果TVhttps://www.mgtv.com/

使用示例

  • 命令(建议)
GetDanMu.exe -s mgtv -r 20,960 -series -u https://www.mgtv.com/b/334727/7452407.html
  • 双击运行
提示逻辑有待完善
  • 选项说明
-f或--font 指定输出字幕字体,默认微软雅黑)
-fs或--font-size 指定输出字幕字体大小,默认28)
-s或--site 使用非url方式下载需指定网站 支持的网站 -> qq iqiyi youku sohu mgtv
-r或--range 指定弹幕的纵向范围 默认0到720,请用逗号隔开
-cid或--cid 下载cid对应视频的弹幕(腾讯 芒果视频合集)
-vid或--vid 下载vid对应视频的弹幕,支持同时多个vid,需要用逗号隔开
-aid或--aid 下载aid对应视频的弹幕(爱奇艺合集)
-tvid或--tvid 下载tvid对应视频的弹幕,支持同时多个tvid,需要用逗号隔开
-series或--series 尝试通过单集得到合集的全部弹幕 默认不使用
-u或--url 下载视频链接所指向视频的弹幕
-y或--y 覆盖原有弹幕而不提示 默认不使用
  • 字体配置文件(可选)

新建名为config.json的文件,内容形式如下:

{
    "fonts_base_folder": "C:/Windows/Fonts",
    "fonts": {
        "微软雅黑":"msyh.ttc",
        "微软雅黑粗体":"msyhbd.ttc",
        "微软雅黑细体":"msyhl.ttc"
    }
}

效果示意(字幕与视频不相关)

potplayer截屏
查看使用演示视频点我

注意有背景音乐

演示是直接使用的python命令,使用exe的话把python GetDanMu.py换成GetDanMu.exe即可

可能存在的问题

  • 下载进度接近100%时暂时没有反应

这是因为在全部弹幕获取完后一次性处理所致,对于时间过长和弹幕过多的视频,处理耗时较多,属于正常现象。

  • 命令组合未达到预期效果

当前的逻辑并不完善,如果出现这种现象请反馈给我。

更新日志

2020/2/7

  • 完善说明
  • 爱奇艺支持series选项,并完善地区判断
  • 增加字体配置文件,建立字体名称与实际字体文件的映射关系,用于预先设定,方便更准确计算弹幕的分布
  • 增加自定义弹幕区间选项,即-r或--range命令
  • README完善

2020/1/28

  • 增加芒果TV的支持(支持综艺合集、支持series命令)
  • 爱奇艺bug修复

2020/1/16

  • 增加搜狐视频的支持(剧集)
  • 改进输入提示(双击运行时)
  • 腾讯支持-series设定

2020/1/11

  • 增加优酷弹幕下载,支持合集,支持通过单集直接下载合集弹幕(暂时仅限优酷)
  • 改进去重方式
  • 优酷的视频id用vid指代,若下载合集请使用连接或通过-series选项下载合集弹幕
  • 加入下载进度显示,后续可能改进为单行刷新

2020/1/5

  • 增加了通过链接下载爱奇艺视频弹幕的方法,支持综艺合集。
  • 增加通过链接判断网站

赞助点此