利用Python做一个漂亮小姐姐词云跳舞视频转载

原创
小哥 3年前 (2022-10-16) 阅读数 57 #大杂烩

最近,很多小伙伴最近都在学习,我们的很多小伙伴最近都在学习 Python我想找一个有趣的练习项目。我想找一个有趣的练习项目。我想找一个有趣的项目来练习。我想找一个有趣的练习项目。

然后今天分享一个,简单,适合新人那么今天分享一个,简单,给新人 Python 小项目。

以下是具体项目。以下是具体项目。


在本文中,我们将以Beeper-Ride the Wave视频为例。you-get下载视频。下载视频。下载视频。

同时利用 python 爬取 B 电台视频弹出窗口,并使用电台视频弹出窗口,并使用 opencv 视频分割,百度分割视频,百度 AI 正在执行肖像分割。以执行肖像分割。进行人像分割,进行人像分割。moviepy 生成单词云舞蹈视频并添加音频。

导入模块

下载所需模块下载所需模块下载所需模块

我们需要下载很多模块,这样我们才能使用os.system()方法自动安装所需的模块,但下载可能会失败,尤其是opencv-python你安装的次数越多越好!.

import os
import time
libs = {"lxml","requests","pandas","numpy","you-get","opencv-python","pandas","fake_useragent","matplotlib","moviepy"}
try:
    for lib in libs:
        os.system(f"pip3 install -i https://pypi.doubanio.com/simple/ {lib}")
        print(lib+"下载成功")
except:
    print("下载失败")

导入模块

在这里统一导入所需的模块首先在这里统一导入所需的模块

import os
import re
import cv2
import jieba
import requests
import moviepy
import pandas as pd
import numpy as np
from PIL import Image
from lxml import etree
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from fake_useragent import UserAgent

视频处理

下载视频

从B站台视频下载舞蹈视频。

可以使用 you-get使用它,您可以通过首先安装来下载视频。

pip install you-get

找到要下载视频的连接,然后使用以下命令进行下载。

you-get -i https://www.bilibili.com/video/BV11C4y1h7nX

标有 DEFAULT 是默认的画质。是默认的图像质量。以获取默认的图像质量。以获取默认图像质量。

已完成视频下载。下载完成的视频。下载完成的视频。完成的视频即被下载。

视频分割

使用opencv视频被分成图片,在本文中截取这些图片 800 一张图片让文字变得阴云密布。一张图片,让单词变得云彩。一张图片做的字云。一张图片让文字变得扑朔迷离。

opencv中通过VideoCaptrue类来读取视频并调用Camera类来读取视频并调用Camera

代码展示

# -*- coding:utf-8 -*-
import cv2
cap = cv2.VideoCapture(r"无价之姐~让我乘风破浪让我乘风破浪~~~.flv")
num = 1
while 1:
    # 逐帧阅读视频  按顺序保存到本地文件夹按顺序保存到本地文件夹按顺序保存到本地文件夹
    ret,frame = cap.read()
    if ret:
        cv2.imwrite(f".picturesimg_{num}.jpg",frame)   
    else:
        break
cap.release()   # 释放资源

结果展示

人像分割

创建应用

利用百度AI创建肖像分割应用程序。创建肖像分割应用程序。创建肖像分割应用程序。创建一个肖像分割应用程序。

Python SDK参考文档

使用参考文档执行人像分割。

参考文档。参考文档。参考文件。

https://cloud.baidu.com/doc/BODY/s/Rk3cpyo93?\_=5011917520845

代码展示

# -*- coding:utf-8 -*-
import cv2
import base64
import numpy as np
import os
from aip import AipBodyAnalysis
import time
import random

APP_ID = ******
API_KEY = *******************
SECRET_KEY = ********************

client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)
# 图像分割后保存路径图像分割后保存路径
path = ./mask_img/

# os.listdir  列出保存到图片列表中的名称保存到图片名称
img_files = os.listdir(./pictures)
print(img_files)
for num in range(1, len(img_files) + 1):
    # 按顺序构造图像路径顺序构造图像路径按顺序构造图像路径
    img = f./pictures/img_{num}.jpg
    img1 = cv2.imread(img)
    height, width, _ = img1.shape
    # print(height, width)
    # 二进制方式读取图像以二进制模式读取图像二进制方式读取图像
    with open(img, rb) as fp:
        img_info = fp.read()

    # 仅设置要返回的前景设置为仅返回前景设置为仅返回前景设置仅返回前景   就是分身肖像又叫分身肖像又叫分身肖像就是分身肖像
    seg_res = client.bodySeg(img_info)
    labelmap = base64.b64decode(seg_res[labelmap])
    nparr = np.frombuffer(labelmap, np.uint8)
    labelimg = cv2.imdecode(nparr, 1)
    labelimg = cv2.resize(labelimg, (width, height), interpolation=cv2.INTER_NEAREST)
    new_img = np.where(labelimg == 1, 255, labelimg)
    mask_name = path + mask_{}.png.format(num)
    # 保存分割画像保存分割画像
    cv2.imwrite(mask_name, new_img)
    print(f======== 第{num}图像分割完成图像分割完成图像分割完成 ========)

结果展示

弹幕爬取

由于技术上的原因,我们改成了这个视频来获取弹出窗口,哈。

https://www.bilibili.com/video/BV1jZ4y1K78N

网页分析

通过F12,找到pagelist,通过原创,通过原创url,找到cid

观察历史弹出窗口观察历史弹出窗口观察历史弹出窗口

  • 清除元素,展开弹出列表清除元素,展开弹出列表清除元素展开弹出列表清除元素

  • 日期列表,仅日期列表2021年,点击另一个日期出来年,点击其他日期出来年,点击另一个日期出来history请求。

爬取弹幕

构造时间序列构造时间序列

这段视频被发布在这段视频上被发布在视频上2020-08-09,本文爬行视频,本文爬行视频本文爬行视频2020-08-08到2020-09-08当天的历史弹出数据,构建了一个时间序列

import pandas as pd
a = pd.date_range("2020-08-08","2020-09-08")
print(a) 
DatetimeIndex([2020-08-08, 2020-08-09, 2020-08-10, 2020-08-11,
               2020-08-12, 2020-08-13, 2020-08-14, 2020-08-15,
               2020-08-50, 2020-08-17, 2020-08-18, 2020-08-19,
               2020-08-20, 2020-08-21, 2020-08-22, 2020-08-23,
               2020-08-24, 2020-08-25, 2020-08-26, 2020-08-27,
               2020-08-28, 2020-08-29, 2020-08-30, 2020-08-31,
               2020-09-01, 2020-09-02, 2020-09-03, 2020-09-04,
               2020-09-05, 2020-09-06, 2020-09-07, 2020-09-08],
              dtype=datetime64[ns], freq=D)

爬取数据

添加cookie,修改oid即可

import requests
import pandas as pd
import re
import csv
from fake_useragent import UserAgent
from concurrent.futures import ThreadPoolExecutor
import datetime

ua = UserAgent()
start_time = datetime.datetime.now()

def  Grab_barrage(date):
    headers = {
        "origin": "https://www.bilibili.com",
        "referer": "https://www.bilibili.com/video/BV1jZ4y1K78N?from=search&seid=1084505810439035065",
        "cookie": "",
        "user-agent": ua.random(),
    }
    params = {
        type: 1,
        oid : "222413092",
        date: date
    }
    r= requests.get(url, params=params, headers=headers)
    r.encoding = utf-8
    comment = re.findall((.*?), r.text)
    for i in comments:
     df.append(i)
    a = pd.DataFrame(df)
    a.to_excel("danmu.xlsx")
def main():
    with ThreadPoolExecutor(max_workers=4) as executor:
        executor.map(Grab_barrage, date_list)
    """计算所需时间计算所需时间计算所需时间"""
    delta = (datetime.datetime.now() - start_time).total_seconds()
    print(f用时:{delta}s)
if __name__ == __main__:
    # 目标url
    url = "https://api.bilibili.com/x/v2/dm/history"
    start,end = 20200808,20200908
    date_list = [x for x in pd.date_range(start, end).strftime(%Y-%m-%d)]
    count = 0
    main()

结果展示

生成词云地图生成词云地图生成词云地图生成词云地图生成词云图表表

浅谈内容的机械压缩去重

对于一条评论,有些人可能会犯错误,或者为了补齐字数,会有一个词或一个词,重复多次,所以在分词之前,需要做一次“机械压缩去重”操作。

def func(s):
    for i in range(1,int(len(s)/2)+1):
        for j in range(len(s)):
            if s[j:j+i] == s[j+i:j+2*i]:
                k = j + i
                while s[k:k+i] == s[k+i:k+2*i] and k

添加停用单词和自定义短语添加停用单词和自定义短语

import pandas as pd
from wordcloud import WordCloud
import jieba
from tkinter import _flatten
import matplotlib.pyplot as plt

jieba.load_userdict("./词云图//add.txt")
with open(./词云图//stoplist.txt, r, encoding=utf-8) as f:
    stopWords = f.read()

生成词云地图生成词云地图生成词云地图生成词云地图生成词云图表表

from wordcloud import WordCloud
import collections
import jieba
import re
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
with open(barrages.txt) as f:
    data = f.read()
jieba.load_userdict("./词云图//add.txt")

# 读取数据
with open(barrages.txt) as f:
    data = f.read()
jieba.load_userdict("./词云图//add.txt")
# 文本预处理文本预处理  删除一些无用字符删除一些无用字符删除无用字符   仅提取中文仅提取中文
new_data = re.findall([u4e00-u9fa5]+, data, re.S)
new_data = "/".join(new_data)

# 文本分词
seg_list_exact = jieba.cut(new_data, cut_all=True)

result_list = []
with open(./词云图/stoplist.txt, encoding=utf-8) as f:
    con = f.read().split(

)     stop_words = set()     for i in con:         stop_words.add(i)

for word in seg_list_exact:
    # 设置停用单词和移除单个单词设置停用和移除单个单词设置停用和移除单个单词
    if word not in stop_words and len(word) > 1:
        result_list.append(word)

# 过滤后统计词频过滤后统计词频筛选统计词频过滤后统计词频
word_counts = collections.Counter(result_list)
path = ./wordcloud/

img_files = os.listdir(./mask_img)
print(img_files)
for num in range(1, len(img_files) + 1):
    img = fr.mask_imgmask_{num}.png
    # 获取蒙版图像获取蒙版图像获取蒙版图像
    mask_ = 255 - np.array(Image.open(img))
    # 绘制词云
    plt.figure(figsize=(8, 5), dpi=200)
    my_cloud = WordCloud(
        background_color=black,  # 设置背景颜色设置背景颜色设置背景颜色  默认是black
        mask=mask_,      # 自定义蒙版自定义蒙版自定义蒙版
        mode=RGBA,
        max_words=500,
        font_path=simhei.ttf,   # 设置字体  显示中文
    ).generate_from_frequencies(word_counts)

    # 显示生成的词云图像显示生成的词云图像
    plt.imshow(my_cloud)
    # 在设置单词云地图中不显示轴在设置单词云中显示不带轴的设置单词云
    plt.axis(off)
    word_cloud_name = path + wordcloud_{}.png.format(num)
    my_cloud.to_file(word_cloud_name)    # 保存单词云图像保存单词云图像保存单词云图片
    print(f======== 第{num}张字云图生成张字云图生成张字云图 ========)

合成视频

如正式文件中所述,正式文件中所述moviepy是视频编辑吗?它是视频编辑吗?Python用于剪切、拼接、字幕插入、视频合成(即非线性编辑)、视频处理和定制效果设计的库。一般来说,处理视频、图片和其他文件很容易。

图片合成

import cv2
import os

# 输出视频保存路径输出视频保存路径输出视频保存路径
video_dir = result.mp4
# 帧率
fps = 30
# 图片尺寸
img_size = (1920, 1080)

fourcc = cv2.VideoWriter_fourcc(M, P, 4, V)  # opencv3.0 mp4会有警告,但可以播放
videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)
img_files = os.listdir(.//wordcloud)

for i in range(88, 888):
    img_path = .//wordcloud//wordcloud_{}.png.format(i)
    frame = cv2.imread(img_path)
    frame = cv2.resize(frame, img_size)   # 生成视频   图像大小与设置的大小相同
    videoWriter.write(frame)      # 写入视频写入视频
    print(f======== 按照视频页面的顺序按照视频排序页面的顺序{i}图片化视频图片化 ========)

videoWriter.release()   # 释放资源

结果表明。结果会显示出来。给出了实验结果。给出了计算结果。

音频添加

import moviepy.editor as mpy

# 阅读单词云视频阅读单词云视频阅读单词云视频
my_clip = mpy.VideoFileClip(result.mp4)
# 截取背景音乐截取背景音乐截取背景音乐
audio_background = mpy.AudioFileClip(song.mp3).subclip(0,25)
audio_background.write_audiofile(song1.mp3)
# 在视频中插入音频在视频中插入音频在视频中插入音频
final_clip = my_clip.set_audio(audio_background)
# 另存为最终视频另存为最终视频   动人的音乐!美女字云舞视频!
final_clip.write_videofile(final_video.mp4)

结果展示

推荐阅读:
入门: 最完整的零基学习最全面的零基学习最完整的零基学习Python的问题  | 从零开始学习从零基础学习从零基础学习8个月的Python  | 实战项目 |学Python这是捷径这是捷径就是这条捷径
干货:爬行豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析最佳球员分析 |   从万众期待到口碑惨败!唐探3令人失望  | 笑新伊田图龙记笑新伊田图龙记笑新伊田图龙记 | 谜语之王回答灯谜之王灯谜之王谜语之王 |用Python人山人海素描图人山人海素描图人山人海 Dishonor太火了,我用机器学习做了一个迷你推荐系统电影
趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python日常酷跑游戏日常酷跑游戏日常酷跑游戏!
AI: 会写诗的机器人会写诗的机器人会写诗的机器人 | 给图片上色给图片上色给图片上色 | 预测收入 | 《耻辱》太火了,我用机器学习做了一部迷你推荐系统电影
小工具: Pdf转Word易于修复表单和水印!易于处理的表单和水印!轻松修复桌子和水印!易于修复的形式和水印! | 一键把html将页面另存为网页另存为网页另存为pdf!|  再见PDF提款费!提款费!提款费!提款费用! | 用90构建最强大的代码行构建最强大的代码行构建最强大的代码行PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一个固定的低成本机票提醒!制作一张别针的低价机票提醒! |60代码行做了一个语音墙纸切换,天天见女士!

年度弹出文案年度弹出文案年度爆炸性文案

  • 1). 卧槽!Pdf转Word用Python轻松搞定 !

  • 2).学Python闻起来好香!我用100一行代码做了一个网站,帮助人们做了一行代码,做了一个网站,帮助了人们做了一行代码,帮助了人们PS旅行图片赚鸡腿吃旅行图片赚鸡腿

  • 3).第一次播放量过亿,火爆全网,我分析了《顺风车妹妹》,发现了这些秘密

  • 4). 80一行行代码!使用Python让救济金做正确的事做做的人做好事的人A梦分身

  • 5).你必须掌握的东西你必须掌握20个python代码,简短而紧凑,永无止境的有用代码,简短而甜蜜,永无止境的有用的代码,简短而紧凑,永无止境的使用代码,简短而甜蜜,永无止境的用途

  • 6). 30个Python古怪技能集古怪小贴士收藏古怪技能集

  • 7). 我总结的80《菜鸟学习专页》《菜鸟学习专页》《菜鸟学习》Python精选干货.pdf》,都是干货

  • 8). 再见Python!我要学Go了!2500词深度分析词深度分析词深度分析 !

  • 9).发现一只舔狗的福利!这Python爬虫神器太酷了,不能自动下载女孩的照片

点击阅读原文点击查看点击点击阅读点击阅读原文点击查看200个Python案例!

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门