matplotlib-bilibili,抖音很火的动态数据视频自动生成(第四节)-视频,语音合成

matplotlib-bilibili,抖音很火的动态数据视频自动生成(第四节)-视频,语音合成

大家好,又见面了,我是全栈君。

 matplotlib-bilibili,抖音很火的动态数据视频自动生成(第四节)-视频,语音自动合成

matplotlib-bilibili,抖音很火的动态数据视频自动生成(第四节)-视频,语音合成

还记得上一节中我们所提到的数据动态视频吗​?这次,为了让大家更加方便的制作自动生成视频,我们可在excel中自由配置数据,方便大家操作​,并且还增加了视频和语音自动合成的方式​。

 

01— 优化操作

 

第一步​:导入xlrd模块,并定义excel模板

matplotlib-bilibili,抖音很火的动态数据视频自动生成(第四节)-视频,语音合成

如上就是我们需要的模板​。

接下来我们来处理数据。

matplotlib-bilibili,抖音很火的动态数据视频自动生成(第四节)-视频,语音合成

 

第二步​:处理excel,返回相同时间的数据​。

import operator
import xlrd
​
f=xlrd.open_workbook("数据.xls")# 打开excel文件读取数据
sheet=f.sheet_by_index(0)
​
def sort_sheet(hour,name='数量'):
    list=[]
    ncols=sheet.ncols
    for i in range(1,sheet.nrows):
        if str(int(sheet.row_values(i)[1]))==str(hour):
            dict = {}
            for j in range(ncols):
                dict[sheet.cell_value(0,j)]=sheet.row_values(i)[j]
            list.append(dict)
    return sorted(list,key=operator.itemgetter(name))#升序排列
    # return sorted(list, key=operator.itemgetter(name),reverse=True)  # 降序排列

第三步​:定义颜色

color={"x":"#adb0ff","y":"#ffb3ff","z":"#90d595","a":"#FDF5E6"}

第四步​:建立图表

from matplotlib import animation
from matplotlib import pyplot
from pylab import mpl
​
mpl.rcParams['font.sans-serif'] =["SimHei"]
mpl.rcParams['axes.unicode_minus'] = False
fig, ax = pyplot.subplots()#返回一个包含figure和axes对象的元组,将元组分解为fig和ax两个变量
​
def  graph(num):
    ax.clear()#清除,不叠加
    list=sort_sheet(num)#调用上面定义的函数
    for i,chart_barh in enumerate(list):
        ax.barh(i,chart_barh["数量"],color=color[chart_barh["颜色"]])# 绘制水平方向的条形图barh()
        ax.text(chart_barh["数量"],i,chart_barh["名称"],size=14,weight=600,ha='left',va='bottom')#添加文字并设置样式
    ax.text(350, 2, num, size=20, weight=600, ha='left', va='bottom')
    ax.xaxis.set_ticks_position('top')
    ax.set_axisbelow(True)
    pyplot.xlim(0,300)
    pyplot.title('不同用户的文章点赞情况')#添加图标题
​
animator=animation.FuncAnimation(fig, graph, frames=range(1,24))
pyplot.show()#移动到函数外面,不然不会动态显示

制作结果​:如图

matplotlib-bilibili,抖音很火的动态数据视频自动生成(第四节)-视频,语音合成

第五步​:视频,音频合成,这里需要引入​os模块。

cmd = "ffmpeg -i %s -i %s %s" % (self.mp3, self.mp4, self.new_mp4)os.system(cmd)

注意:需要安装ffmpeg程序

windows如何安装ffmpeg

02— 完整代码

import os
from matplotlib import animation
from matplotlib import pyplot
from pylab import mpl
import operator
import xlrd
​
class chart(object):
    def __init__(self):
        f = xlrd.open_workbook("数据.xls")  # 打开excel文件读取数据
        self.sheet = f.sheet_by_index(0)
        self.color = {"x": "#adb0ff", "y": "#ffb3ff", "z": "#90d595", "a": "#FDF5E6"}
        mpl.rcParams['font.sans-serif'] = ["SimHei"]
        mpl.rcParams['axes.unicode_minus'] = False
        self.fig, self.ax = pyplot.subplots()  # 返回一个包含figure和axes对象的元组,将元组分解为fig和ax两个变量
        self.mp4 = 'E:\\数据动态展示.mp4'#生成视频名称,绝对路径
        self.mp3 = 'E:\\5018.mp3'#音频路径
        self.new_mp4 = 'E:\\new合成.mp4'#合成的mp4路径
    def sort_sheet(self,num,name='数量'):
        list=[]
        ncols=self.sheet.ncols
        for i in range(1,self.sheet.nrows):
            if str(int(self.sheet.row_values(i)[1]))==str(num):
                dict = {}
                for j in range(ncols):
                    dict[self.sheet.cell_value(0,j)]=self.sheet.row_values(i)[j]
                list.append(dict)
        return sorted(list,key=operator.itemgetter('数量'))#升序排列
        # return sorted(list, key=operator.itemgetter(name),reverse=True)  # 降序排列
    def  graph(self,num):
        self.ax.clear()#清除,不叠加
        list=self.sort_sheet(num)
        for i,chart_barh in enumerate(list):
            self.ax.barh(i,chart_barh["数量"],color=self.color[chart_barh["颜色"]])# 绘制水平方向的条形图barh()
            self.ax.text(chart_barh["数量"],i,chart_barh["名称"],size=14,weight=600,ha='left',va='bottom')#添加文字并设置样式
        self.ax.text(250, 2, str(num)+":00时", size=20, weight=600, ha='left', va='bottom')
        self.ax.text(200,0, "<---巍然不动", size=16, weight=600, ha='left', va='bottom')
        self.ax.xaxis.set_ticks_position('top')
        self.ax.set_axisbelow(True)
        pyplot.xlim(0,300)
        pyplot.title('不同用户的文章点赞情况')#添加图标题
    def mp4_and_mp3(self):
        animator = animation.FuncAnimation(self.fig, self.graph, frames=range(1, 24))
        animator.save(self.mp4)
        pyplot.show()
        cmd = "ffmpeg -i %s -i %s %s" % (self.mp3, self.mp4, self.new_mp4)
        os.system(cmd)
if __name__ == '__main__':
    chart=chart()
    chart.mp4_and_mp3()

matplotlib-bilibili,抖音很火的动态数据视频自动生成(第四节)-视频,语音合成

相关推荐(个人主页也有哦,赶快收藏起来)​:

动态数据视频(第一节)

bilibili,抖音很火的动态数据视频自动生成(第二节)

matplotlib-bilibili,抖音很火的动态数据视频自动生成(第三节)

matplotlib给女朋友画一个爱心吧,这份满满的爱意,一定要记得收下

欢迎关注我们

 

 

大家一起学编程

以学习为主,兴趣为辅,致力于开发,发现更多好玩有趣的编程技巧以及好玩有趣的编程思路。为喜欢编程和想要学习编程的人找到编程的乐趣和动力。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111362.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • bWAPP靶场实战[通俗易懂]

    bWAPP靶场实战[通俗易懂]文章目录一、靶场介绍二、靶场搭建2.1安装类型2.2独立安装三、漏洞实战SSRF远程文件包含端口扫描一、靶场介绍  集成了超过100余个网络漏洞,phpweb漏洞靶场,能够调制漏洞难度等级(低->中->高)。二、靶场搭建下载:https://sourceforge.net/projects/bwapp/2.1安装类型搭建类型有两种:(虚拟机版本可测试测漏洞类型更多,比如破壳、心脏滴血)独立安装(部署到apache+php+mysql环境下)虚拟机安装(bee

    2025年12月4日
    8
  • 菜鸟的mybatis实战教程

    菜鸟的mybatis实战教程菜鸟的mybatis实战教程说明一、mybatis简介二、mybatis简单入门(1)数据库创建(2)创建springboot项目(3)增删改查操作(4)总结说明之前学习了mybatis之后没有做记录,在前几天做一个题库系统时,刚好要用到mybatis,因为之前做东西时用的jpa,mybatis没怎么去用,导致有些知识点想不起来,在使用mybatis出现了一些低级的错误,现将mybatis的学习笔记记录在这里,以便日后查看,本文会持续更新,不断地扩充本文仅为记录学习轨迹,如有侵权,联系删除一、myb

    2022年5月16日
    41
  • UCOSII操作系统 第1课—UCOSII的基础知识

    UCOSII操作系统 第1课—UCOSII的基础知识UCOSII操作系统1–UCOSII的基础知识前言:目前比较主流的操作系统有UCOSII、FREERTOS、LINUX等,UCOSII的资料相对比其余的两个操作系统的资料还是非常全面的。此次专栏涉及到的API的使用是非常小的,仅仅作为本人学习的记录。后期也会对比UCOSII说出实现的更多功能的代码。参考书籍:《嵌入式实时操作系统μCOS-II原理及应用》、《嵌入式实时操作系统uCOS-II邵贝贝(第二版)》学习代码的出处:http://bbs.elecfans.com/jishu_345856_

    2022年6月4日
    36
  • MyBatis框架核心之(五)注解使用resultMap及多表查询「建议收藏」

    MyBatis框架核心之(五)注解使用resultMap及多表查询「建议收藏」MyBatis框架核心之(五)注解使用resultMap及多表查询

    2022年4月21日
    47
  • python中矩阵的转置_[转]Python中的矩阵转置[通俗易懂]

    python中矩阵的转置_[转]Python中的矩阵转置[通俗易懂]Python中的矩阵转置via需求:你需要转置一个二维数组,将行列互换.讨论:你需要确保该数组的行列数都是相同的.比如:arr=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]列表递推式提供了一个简便的矩阵转置的方法:print[[r[col]forrinarr]forcolinrange(len(arr[0]))][[1,4…

    2022年5月29日
    47
  • 封装是怎么实现的_ad13怎么添加封装

    封装是怎么实现的_ad13怎么添加封装1.封装的概念(1)将东西包装在一起,然后以新的完整的形式呈现出来(即将属性和方法封装到类里面,通过添加访问修饰符来限制访问权限,以达到信息隐藏的目的)(2)信息隐藏:隐藏对象的实现细节,不让外部

    2022年8月1日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号