ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

视频弹幕时间密度分析与作图

2021-07-03 10:32:12  阅读:269  来源: 互联网

标签:视频 作图 bid danmu Delta duration import 弹幕


目录

任务描述

给定视频文件和爬取的弹幕(JSON 格式),要求将弹幕在整个视频长度区间内的分布密度计算出来并作图。其中,对于给定的窗口宽度 \(\Delta\),\(t\) 时刻的密度 \(\rho(t)\) 定义为 \(\rho(t)=\displaystyle \frac {\displaystyle \sum_{c.time \in [t-\Delta/2, t+\Delta/2]} 1} {\Delta}\)。\(t\) 取整数即可。假设视频长度不超过 \(10\) 分钟,弹幕总数不超过 \(10^4\) 条。

思路分析

由于抽样数很少,我们直接对于每个结果,暴力枚举所有弹幕,检查是否在时间区间内即可。优化可以考虑排序加二分,这里偷懒不做了。

代码实现

绘图采用 matplotlib 进行。

import json
from os import read
import matplotlib.pyplot as plt
import numpy as np
from numpy.lib.stride_tricks import DummyArray
import ffmpeg
import math

import biliDanmu
import biliMedia


def readDanmuList(bid):
    with open("outputdanmu/{bid}.danmu.json".format(bid=bid), "r", encoding="utf-8") as f:
        str_danmu = f.read()
    return json.loads(str_danmu)


def getMediaDuration(bid):
    duration = ffmpeg.probe(
        "output/{bid}.mp4".format(bid=bid))["format"]["duration"]
    return duration


def calcDanmuDensity(danmu_list, duration, Delta=10):
    lim = int(math.ceil(float(duration)))
    ans = [0]*lim
    for i in range(lim):
        for danmu in danmu_list:
            if abs(float(danmu["time"])-i) < Delta/2:
                ans[i] += 1/Delta
    return ans


if __name__ == '__main__':
    bid = "BV16K4y1h7eq"

    biliDanmu.saveDanmuByBid(bid)
    biliMedia.getMP4ByBid(bid)

    danmu_list = readDanmuList(bid)
    duration = getMediaDuration(bid)
    ans = calcDanmuDensity(danmu_list, duration)

    print(ans)
    plt.plot(ans)
    plt.show()

测试结果

References

Bilibili 弹幕爬取初探 - Mollnn - 博客园 (cnblogs.com)

标签:视频,作图,bid,danmu,Delta,duration,import,弹幕
来源: https://www.cnblogs.com/mollnn/p/14965716.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有