1. 程式人生 > 實用技巧 >震驚!小夥竟然用python找出了馬大師視訊中的名場面

震驚!小夥竟然用python找出了馬大師視訊中的名場面

此文轉載自:https://blog.csdn.net/kimol_justdo/article/details/110152915#commentBox

震驚!小夥竟然用python找出了馬大師視訊中的名場面

前言

最近江湖中湧現出了一位風雲人物,他的語錄成為了不少小夥的“精神食糧”,而其名場面也是數不勝數,他便是——混元形意太極門掌門馬大師

今天,kimol君將通過B站上馬大師視訊的彈幕分析出其中的高潮部分(即名場面),選取其中播放量靠前的視訊(視訊地址)進行分析,效果如下:

紅色部分代表視訊中彈幕數較多的位置,而這通常出現在視訊的高潮部分,圖中時間點表示高潮部分出現在視訊中的位置。對照著

原視訊進行比較,結果定會讓你大吃一驚

詳細分析過程,客官您往下看~
理論來說,該方法是通用的,完全可以用來分析不同的視訊,發現其中高潮的部分(通常是戲劇衝突、高潮橋段、爆點等部分)。因此,具有較高的實用性!

一、爬取視訊彈幕

爬取馬大師視訊(bvid為BV1HJ411L7DP)的彈幕,並將結果存於本地csv中:

一共有3W+條彈幕。至於彈幕的具體爬取過程,由於篇幅原因這裡不在贅述,大家可以參考我的
另一篇博文

二、彈幕分析

彈幕分析的思路也比較簡單,通過統計彈幕在視訊中不同時間出現的頻數來表示出當時觀眾的反映:通常來講,當視訊出現高潮時,彈幕數量也會相應增加。那麼,整個分析過程可以分為三步:

1. 彈幕頻數統計

按照指定的視訊播放時間間隔來統計彈幕的數量,定義一個函式:

def count_fre(time_list,second=1):
    '''
    統計彈幕出現時間的頻數(按指定second劃分)
    輸入:出現時間的列表,劃分的秒數
    輸出:頻數分佈
    '''
    f = lambda x:(x//second)*second 
    time_list = time_list.apply(f) # 按照second將時間進行劃分
    counter = dict(Counter(time_list)) # 統計各時間段出現的頻數
    counter =
sorted(counter.items(),key=lambda d:d[0]) # 按照字典的key排序 return dict(counter)

統計後的輸出為一個字典,key為時間段,value為對應的彈幕數:

2. 繪製頻數分佈圖

利用python中的matplotlib庫將統計好的頻數分佈繪製出來:

# 繪製分佈圖
plt.title('彈幕頻數分佈') 
plt.xlabel('播放時間(秒)')
plt.ylabel('彈幕評論頻數(個)')
plt.grid()
plt.plot(x,y)

結果如下:

3. 標紅高潮部分

為了更直觀地反映出高潮部分,用紅色將其標出,並加上對應的時間點:

# 標紅高潮部分
flag = False
start = 0 # 開始位置
end = 0   # 結束位置
level = np.percentile(y,90)
for i in range(len(y)):
    if flag == False and y[i] >= level:
        flag = True
        start = i-1 if i-1 >= 0 else 0 # 避免低於0
    if flag == True and y[i] < level:
        flag = False
        end = i+1
        end = i+1 if i+1 <= len(x) else len(x) # 避免超過最大值
        plt.plot(x[start:end],y[start:end],color='red') # 標紅
        pos_y = max(y[start:end]) # 高潮
        pos_x = y[start:end].index(pos_y)+start # 找到高潮對應的點
        pos_x = x[pos_x] # 找到高潮對應的時間(秒)
        m,s = divmod(pos_x,60) 
        text = '%02d:%02d'%(m,s) # 轉為mm:ss的格式
        plt.text(pos_x+1,pos_y,text)

其中level變數取彈幕數的X分位數,是高潮的閾值,即認為當彈幕數大於level才認為是高潮部分。通過對它的設定,即可控制高潮標紅的部分。

三、大師的名場面

通過對高潮部分進行標紅後,可以得到下圖:

可以看出,短短2分多鐘的視訊可謂是高潮迭起(小聲嘀咕:“不要想歪了…”)

其中02:27的位置彈幕數量最高,開啟視訊一看,妹有錯,名場面來了,年輕人耗子尾汁呀:

其中01:39的位置同樣是名場面,我大E了啊,沒有閃

其餘的部分也是類似的,由於時間原因這裡就不全都展示了,感興趣的小夥伴可以自己一一對應看看。

寫在最後

通過簡單的測試,該程式碼除了可以發掘馬大師的名場面外,在諸如其他電影、電視劇上的分析效果也都不錯。理論上來說,只要有比較充足的彈幕資料,就能找到視訊的高潮所在,您還不心動嗎?