- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章用Python做一个哔站小姐姐词云跳舞视频由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
B站上的漂亮的小姐姐真的好多好多,利用 you-get 大法下载了一个 B 站上跳舞的小姐姐视频,利用视频中的弹幕来制作一个漂亮小姐姐词云跳舞视频,一起来看看吧.
。
。
安装 you-get 库 。
pip install you-get -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
利用 you-get 下载 B 站视频到本地 视频链接:https://www.bilibili.com/video/BV1rD4y1Q7jc?from=search&seid=10634574434789745619 。
you-get -i https://www.bilibili.com/video/BV1rD4y1Q7jc?from=search&seid=10634574434789745619you-get -o 本地保存路径 视频链接
更多 you-get 大法的详细使用,可以参考官方文档: https://github.com/soimort/you-get/wiki/%E4%B8%AD%E6%96%87%E8%AF%B4%E6%98%8E 。
。
写 python 爬虫,解析网页、提取弹幕数据保存到txt,注意构造 URL 参数和伪装请求头.
导入需要的依赖库 。
import requestsimport pandas as pdimport reimport timeimport randomfrom concurrent.futures import ThreadPoolExecutorimport datetimefrom fake_useragent import UserAgent# 随机产生请求头ua = UserAgent(verify_ssl=False, path='fake_useragent.json')start_time = datetime.datetime.now()
爬取弹幕数据 。
def Grab_barrage(date): # 伪装请求头 headers = { "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-site", "accept-encoding": "gzip", "origin": "https://www.bilibili.com", "referer": "https://www.bilibili.com/video/BV1rD4y1Q7jc?from=search&seid=10634574434789745619", "user-agent": ua.random, "cookie": "chage to your cookies" } # 构造url访问 需要用到的参数 爬取指定日期的弹幕 params = { 'type': 1, 'oid': '206344228', 'date': date } # 发送请求 获取响应 response = requests.get(url, params=params, headers=headers) # print(response.encoding) 重新设置编码 response.encoding = 'utf-8' # print(response.text) # 正则匹配提取数据 转成集合去除重复弹幕 comment = set(re.findall('<d p=".*?">(.*?)</d>', response.text)) # 将每条弹幕数据写入txt with open('bullet.txt', 'a+') as f: for con in comment: f.write(con + '\n') print(con) time.sleep(random.randint(1, 3)) # 休眠
主函数 。
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 -----------> 弹幕数据成功保存到本地txt')
主函数调用 。
if __name__ == '__main__': # 目标url url = "https://api.bilibili.com/x/v2/dm/history" start = '20201201' end = '20210128' # 生成时间序列 date_list = [x for x in pd.date_range(start, end).strftime('%Y-%m-%d')] print(date_list) count = 0 # 调用主函数 main()
结果如下:
。
经过实践发现,这个视频完整分离出图片来有 3347 张,本文截取 800 张图片来做词云.
import cv2# ============================ 视频处理 分割成一帧帧图片 =======================================cap = cv2.VideoCapture(r"beauty.flv")num = 1while True: # 逐帧读取视频 按顺序保存到本地文件夹 ret, frame = cap.read() if ret: if 88 <= num < 888: cv2.imwrite(f"./pictures/img_{num}.jpg", frame) # 保存一帧帧的图片 print(f'========== 已成功保存第{num}张图片 ==========') num += 1 else: breakcap.release() # 释放资源
结果如下:
。
创建一个人像分割的应用,记住你的AppID、API Key、Secret Key,后面会用到.
查看人像分割的 Python SDK 文档,熟悉它的基本使用.
# -*- coding: UTF-8 -*-"""@Author :叶庭云@公众号 :修炼Python@百度AI :https://ai.baidu.com/tech/body/seg"""import cv2import base64import numpy as npimport osfrom aip import AipBodyAnalysisimport timeimport random# 利用百度AI的人像分割服务 转化为二值图 有小姐姐身影的蒙版# 百度云中已创建应用的 APP_ID API_KEY SECRET_KEYAPP_ID = '23485847'API_KEY = 'VwGY053Y1A8ow3CFBTFrK0Pm'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(88, 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}张图像分割完成 ========') time.sleep(random.randint(1,2))
结果如下:
。
# -*- coding: UTF-8 -*-from wordcloud import WordCloudimport collectionsimport jiebaimport refrom PIL import Imageimport matplotlib.pyplot as pltimport numpy as np# 读取数据with open('bullet.txt') as f: data = f.read()# 文本预处理 去除一些无用的字符 只提取出中文出来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('stop_words.txt', encoding='utf-8') as f: con = f.read().split('\n') 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/'for num in range(88, 888): img = f'./mask_img/mask_{num}' # 获取蒙版图片 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}张词云图生成 ========')
结果如下:
。
# -*- coding: UTF-8 -*-import cv2import 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() # 释放资源
效果如下:
。
漂亮小姐姐跳舞那么好看,再加上自己喜欢的背景音乐,岂不美哉.
# -*- coding: UTF-8 -*-import moviepy.editor as mpy# 读取词云视频my_clip = mpy.VideoFileClip('result.mp4')# 截取背景音乐audio_background = mpy.AudioFileClip('song.mp4').subclip(17, 44)audio_background.write_audiofile('vmt.mp3')# 视频中插入音频final_clip = my_clip.set_audio(audio_background)# 保存为最终的视频 动听的音乐!漂亮小姐姐词云跳舞视频!final_clip.write_videofile('final_video.mp4')
结果如下:
漂亮小姐姐词云跳舞 。
到此这篇关于用Python做一个哔站小姐姐词云跳舞视频的文章就介绍到这了,更多相关Python做云跳舞视频内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/fyfugoyfa/article/details/112209719 。
最后此篇关于用Python做一个哔站小姐姐词云跳舞视频的文章就讲到这里了,如果你想了解更多关于用Python做一个哔站小姐姐词云跳舞视频的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我对此很陌生,我在这里的论坛上检查过答案,但我没有找到任何真正可以帮助我的答案。我正在尝试播放 res/raw 文件夹中的视频。到目前为止我已经设置了这段代码: MediaPlayer mp; @Ov
我可以播放一个视频剪辑,检测视频的结尾,然后创建一个表单,然后播放另一个视频剪辑。我的问题是,表单 react 不正确,我创建了带有提交按钮和两个单选按钮可供选择的表单。我希望让用户进行选择,验证响应
首先,我必须说我在web2py讨论组中看到过类似的内容,但我不太理解。 我使用 web2py 设置了一个数据库驱动的网站,其中的条目只是 HTML 文本。其中大多数将包含 img和/或video指向相
我正在尝试在视频 View 中播放 YouTube 视频。 我将 xml 布局如下: 代码是这样的: setContentView(R.layout.webview); VideoV
我正在开发一个需要嵌入其中的 youtube 视频播放器的 android 应用程序。我成功地从 API 获得了 RTSP 视频 URL,但是当我试图在我的 android 视频 View 中加载这个
我目前正在从事一个使用 YouTube API 的网络项目。 我完全不熟悉 API。所以每一行代码都需要付出很多努力。 使用以下代码,我可以成功检索播放列表中的项目: https://www.goog
是否可以仅使用视频 ID 和 key 使用 API V3 删除 youtube 视频?我不断收到有关“必需参数:部分”丢失的错误消息。我用服务器和浏览器 api 键试了一下这是我的代码: // $yo
所以我一直坚持这个大约一个小时左右,我就是无法让它工作。到目前为止,我一直在尝试从字符串中提取整个链接,但现在我觉得只获取视频 ID 可能更容易。 RegEx 需要从以下链接样式中获取 ID/URL,
var app = angular.module('speakout', []).config( function($sceDelegateProvider) {
我正在努力从 RSS 提要中阅读音频、视频新闻。我如何确定该 rss 是用于新闻阅读器还是用于音频或视频? 这是视频源:http://feeds.cbsnews.com/CBSNewsVideo 这是
利用python反转图片/视频 准备:一张图片/一段视频 python库:pillow,moviepy 安装库 ?
我希望在用户双击视频区域时让我的视频全屏显示,而不仅仅是在他们单击控件中的小图标时。有没有办法添加事件或其他东西来控制用户点击视频时发生的情况? 谢谢! 最佳答案 按照 Musa 的建议,附
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 7年前关闭。 Improve this questi
我有一个公司培训视频加载到本地服务器上。我正在使用 HTML5 的视频播放来观看这些视频。该服务器无法访问网络,但我已加载 apache 并且端口 8080 对同一网络上的所有机器开放。 这些文件位于
我想混合来自 video.mp4 的视频(时长 1 分钟)和来自 audio.mp3 的音频(10 分钟持续时间)到一个持续时间为 1 分钟的输出文件中。来自 audio.mp3 的音频应该是从 4
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 8年前关闭。 Improve this questi
我正在尝试使用 peer/getUserMedia 创建一个视频 session 网络应用程序。 目前,当我将唯一 ID 发送到视频 session 时,我能够听到/看到任何加入我的 session
考虑到一段时间内的观看次数,我正在评估一种针对半自动脚本的不同方法,该脚本将对视频元数据执行操作。 简而言之,只要视频达到指标中的某个阈值,就说观看次数,它将触发某些操作。 现在要执行此操作,我将不得
我正在通过iBooks创建专门为iPad创建动态ePub电子书的网站。 它需要支持youtube视频播放,所以当我知道视频的直接路径时,我正在使用html5 标记。 有没有一种使用html5 标签嵌入
我对Android不熟悉,我想浏览youtube.com并在Webview内从网站显示视频。当前,当我尝试执行此操作时,将出现设备的浏览器,并让我使用设备浏览器浏览该站点。如果Webview不具备这种
我是一名优秀的程序员,十分优秀!