2019年4月

---2019/04/27---
失效的112开头ip这个之前有效期长达十几个小时(没有仔细测)
目前正常的一般是两个小时有效期

http://112.17.40.140/PLTV/88888888/224/3221226809/index.m3u8 已失效
http://39.134.176.157/PLTV/88888888/224/3221226539/index.m3u8 已失效
http://223.94.71.23/PLTV/88888888/224/3221226758/index.m3u8 正常
http://223.94.71.24/PLTV/88888888/224/3221226758/index.m3u8 正常
http://223.94.71.48/PLTV/88888888/224/3221226809/index.m3u8 正常
http://39.134.185.69/PLTV/88888888/224/3221226758/index.m3u8 正常

官方wiki有下面三个例子:

ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy cut.mp4
ffmpeg -i video.mp4 -ss 00:01:00 -to 00:02:00 -c copy cut.mp4
ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4

-t-to两者不可同时出现,如果同时使用,则以-t为准

  • -t是在-ss指定的时间后持续的时间
  • -to是结束时间

测试后,第二种方式最为稳妥,但速度较慢,一三两种方式很快但是会出现时间误差。

对于bt2020等,使用这样的方法提取均会保留。

批量提取视频vid,样本如下

vlist = ['x0030wh28ov', 'p0024ht72c2', ..., 'x002483emfm', 'o0024m4oidi', 'n0024mvc1b8']

通过简单观察,可以发现第2、3、4、5位存在明显的递增关系,通过其他手段,可以验证vid和时间存在关系。
现在计划分析vid的一些规律。

字符频率

首先将2、3、4、5位剔除,因为他们有明显的规律,但其他位的字符都是0-9和a-z范围。现在用下面的脚本统计这些字符的信息。

def cc(s):
    ac = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    cres = [s.count(c) for c in ac]#统计字符出现次数
    cresd = [x-y for x, y in zip(cres, cres[1:])]#相邻字符的差值
    print(cres)
    print(cresd)
    print(sum(cresd))
string = ""
for vid in vlist:
    string = string + vid[:1] + vid[5:]
    cc(string)

随加入统计的vid增加,对各个字符出现的频率进行统计,绘制曲线,情况如下(共333个vid):
各字符频率变化

可以发现随着vid的数量越来越多,单个字符的频率稳定在一个值附近,但并不是同一个频率。
这样看起来依然不够直观,在此对每个字符的统计进行拟合,鉴于前面部分的数据属于小样本情况,对拟合可能造成较大误差,所以用于拟合的数据从100个vid之后开始,采用指数函数拟合(a * exp(-b * x) + c)。结果如下:
将x轴起始坐标偏移至1(这个图可能有点问题,但我不想改了)
1
将x轴起始坐标保持
101

在原位置拟合结果比较明显,各个字符概率分布情况也比较清晰了。
不过我觉得再增加一定数量vid,现在总vid数量是407,效果如下
将x轴起始坐标偏移至1
1
将x轴起始坐标保持
101

可以看到各个字符的频率已经可以认为是稳定了,得到拟合函数的具体系数,得到极限值,就可以认为极限值是字符对应的频率。
完整视角的拟合情况:
全视角

将vid看做一个向量,按一定映射关系,计算其长度,下面是样本中vid的分布情况:
vid分布

横轴也这样计算,分布如下:
x轴的分布

即使样本不够多,但可以明显看到的是,vid的长度分布比较均匀,分布在某一个数的前后,横轴亦是如此。
考虑连续的一串数字,比如1-10000,将其每一个数字转为字符串,计算总的距离,下面是距离分布:
连续数字

如果是y = x^3 + 11 * x^2 + 1.5这样的函数,结果如下:
三次多项式

可以看到这样的规律性都很强。就这样的结果来看,可以排除数字和vid的映射关系应该不是高次多项式,更不是线性关系。下面再试试其他函数。
比如y = a * cos(b * x) + c * sin(d * x) + e其中e能使整个函数始终大于0,这个规律性更明显了。
三角函数

对10进制到16进制的变化,可见整体走势依然和10进制一样。
hex(x)

到这里,我认为原vid的向量长度的样本过少,不足以更全面直观体现它的分布,所以现在先去提取更多的vid。

---分割线---
在多次尝试后,发现随机提取某三个索引,在三维空间中显示出来,发现也是随机分布的,并没有明显特征(如下)。
三维的向量分布

至此,除了单个字符的出现存在稳定的概率外,没有其他发现。
另外尝试将有着明显时间差的vid进行简单的36进制转换在!7这么多种情况下,依然不能满足递增的关系。如果说有什么规律,至少不是按某一种进制转换的。
还尝试了将vid按36进制换算后,计算向量长度,结果如下图,样本有限,不过似乎能看出整体分布可能接近三角函数的样子。
向量长度

input = [1,2,3,4]
# output = [24,12,8,6]
input = [5,3,2,4,1]
# output = [24,40,60,30,120]
length = len(input)
a = b = []
for index in range(length):
    r=1
    for i in input[:index]:
        r *= i
    a.append(r)
    r=1
    for i in input[length-index-1:]:
        r *= i
    b.append(r)
b.reverse()
b = b + [1]
_ = b.pop(0)
# print(a)
# print(b)
print(list(map(lambda x, y: x * y, a, b)))

这种算是知道就会,不知道也很难想出来的吧?