平潭县 招远市 巴中市 周口市 清涧县 荃湾区 怀仁县 盘山县 青州市 白银市 舒兰市 克拉玛依市 淮阳县 尖扎县 溧阳市 榆林市

文章导航软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:单机游戏角色扮演 → 怪物猎人世界新装备介绍 怪物猎人世界新装备新系统一览

巴巴爸爸_Python 视频转字符动画 - 进阶

标签:进退中绳 扎金花游戏怎么玩

这篇文章是 视频转字符动画-Python-60行代码 的后续,如果感兴趣,请先看看它。

1. 速度优化

要是每次播放都要等个一分钟,也太痛苦了一点。
所以可以用 pick请回答1988_2018年最新新闻网le 模块把 video_chars 保存下来,下次播放时,如果发现当前目录下有这个保存下来的数据,就跳过转换,直接播放了。这样就快多了。
只需要改一下测试代码,
先在开头添加两个依赖

import os
import pickle

然后在文件结尾添加代码:

def dump(obj, file_name):
    """
    将指定对象,以file_nam为名,保存到本地
    """
    with open(file_name, "wb") as f:
        pickle.dump(obj, f)
    return


def load(filename):
    """
    从当前文件夹的指定文件中迅雷_2018年最新新闻网load对象
    """
    with open(filename, "rb") as f:
        return pickle.load(f)


def get_file_name(file_path):
    """
    从文件路径中提取出不带拓展名的文件名
    """
    # 从文件路径获取文件名 _name
    path, file_name_with_extension = os.path.split(file_path)

    # 拿到文件名前缀
    file_name, file_extension = os.path.splitext(file_name_with_extension)

    return file_name


def has_file(path, file_name):
    """
    判断指定目录下,是否存在某文件
    """
    return file_name in os.listdir(path)


def get_video_chars(video_path, size):
    """
    返回视频对应的字符视频
    """
    video_dump = get_file_name(video_path) + ".pickle"

    # 如果 video_dump 已经存在于当前文件夹,就可以直接读取进来了
    if has_file(".", video_dump):
        print("发现该视频的转换缓存,直接读取")
        video_chars = load(video_dump)
    else:
        print("未发现缓存,开始字符视频转换")

        print("开始逐帧读取")
        # 视频转字符动画
        imgs = video2imgs(video_path, size)

        print("视频已全部转换到图像, 开始逐帧转换为字符画")
        video_chars = imgs2chars(imgs)

        print("转换完成,开始缓存结果")
        # 把转换结果保存下来
        dump(video_chars, video_dump)
        print("缓存完毕")

    return video_chars


if __name__ == "__main__":
    # 宽,高
    size = (64, 48)
    # 视频路径,换成你自己的
    video_path = "BadApple.mp4"
    video_chars = get_video_chars(video_path, size)
    play_video(video_chars)

另一个优化方法就是边转换边播放,就是同时执行上述三个步骤。学会了的话,可以自己实现一下试试。

4. 字符视频和音乐同时播放

没有配乐的动画,虽然做出来了是学校2015_2018年最新新闻网很有成就感,但是你可能看上两遍就厌倦了。
所以让我们来给它加上配乐。(不要担心,其实就只需要添加几行代码而已)

首先我们需要找个方法来播放视频的配乐,怎么做呢?
先介绍一下一个跨平台视频播放器:mpv,它有很棒的命令行支持,请先安装好它。
要让 mpv 只播放视频的音乐部分,只需要命令:

mpv --no-video video_path

好了,现在有了音乐,可总不能还让人开俩shell,先放音乐,再放字符画吧。
这时候,我们需要的功能是:使用 Python 调用外部应用.
但是 mpv 使用了类似 curses 的功能,标准库的 os.system 和 subprocess 都不能隐藏掉这个部分,播放效果不尽如人意。
因此我使用了 pyinvoke 模块,只要给它指定参数hide=True,就可以完美隐藏掉被调用程序的输出(指stdout)。运行下面代码前,请先用pip安装好 invoke.(能够看到这里的,安装个模块还不是小菜一碟)

好了废话说这么多,上代码:

import invo星之声_2018年最新新闻网ke

video_path = "BadApple.mp4"
invoke.run(f"mpv --no-video {video_path}", hide=True, warn=True)

运行上面的测试代码,如果听到了音乐,而shell啥都没输出的话,就正常了。我们继续。

音乐已经有了,那就好办了。
添加一个播放音乐的函数

import invoke
def play_audio(video_path):
    invoke.run(f"mpv --no-video {video_path}", hide=True, warn=True)

然后修改main()方法:

def main():
    # 宽,高
    size = (64, 48)
    # 视频路径,换成你自己的
    video_path = "Ba

    # 只转换三十秒,这个属性是才添加的,但是上一篇的代码没有更新。你可能需要先上github看看最新追风筝的人_2018年最新新闻网的代码。其实就稍微改了一点。
    seconds = 30
    
    # 这里的fps是帧率,也就是每秒钟播放的的字符画数。用于和音乐同步。这个更新也没写进上一篇,请上github看看新代码。
    video_chars, fps = get_video_chars(video_path, size, seconds)

    # 播放音轨
    play_audio(video_path)

    # 播放视频
    play_video(video_chars, fps)


if __name__ == "__main__":
    main()

然后运行。。并不是我坑你,你只听到了声音,却没看到字符画。。原因是: invoke.run()函数是阻塞的,音乐没放完,代码就到不了play_video(video_chars, fps)这一行。

所以 play_audio 还要改一下,改成这样:

import invoke
from threading import Thread

def play_audio(video_path):
    def call():
        invoke.run(f"mpv --no-video {video_path}", hide=True, warn=True)

    # 这里创建子线程来执行音乐播放指令,因为 invoke.run() 是一个阻塞的方法,要同时播放字符画和音乐的话,就要用多线程/进程。
    p = Thread(target=call)
    p.setDaemon(True)
    p.start()

这里使用标准库的 threading.Thread 类来创建子线程,让音乐的播放在子线程里执行,然后字符动画还是主线程执行,Ok,这就可以看到最终效果了。实际上只添加了十多行代码而已。

代码:

video2chars 里面有个 Pipfile,是因为我使用了 pipenv 来管理依赖的缘故。不清楚的话忽略它就行。

当前文章:http://pehr7-nianjiayong-com.ruobible.cn/2h9smbom/351f0_152586.html

发布时间:2019-08-22 01:16:02

北大校长致歉是种“求真”精神  银河国际手机网址2949网曝王菲真人秀酬劳近亿 经纪人回应:洽谈中  银河娱乐手机版yh163am.com  银河国际手机网址2949  澳门银河手机网站福建霞浦渔船失事致1人失联  澳门银河娱乐yh163am.com  澳门银河娱乐送彩金网站  银河娱乐手机版yh163am.com  2288银河主站线路检测  银河娱乐在线官方网址  

相关阅读 酸爽组合,统一老坛酸菜/酸豆角/番茄牛肉/藤椒牛肉方便面20包41.8元甘肃岷县遭遇强对流天气:疏散300余人1人死亡河北省廊坊市永清县加强农村道路交通安全管理汶川地震十周年慈善展在成都开幕 回顾香港爱心人士捐助工作苹果iPhone XI新机A12 7nm芯片开始量产,这次又能领先安卓阵营多久?2018年腾讯商学院全国首场大型名校巡展成功举办河北省廊坊市永清县加强农村道路交通安全管理‘45?’ ??, 2017/2018?? 5??? ??? ??

文章评论
发表评论

热门文章 “京东杯”电子竞技大赛火爆进行中:微软Surface平板电脑满千减百麻省理工学院研究高效算法:可减小30%城市出租车规模酸爽组合,统一老坛酸菜/酸豆角/番茄牛肉/藤椒牛肉方便面20包41.8元遵守GDPR:部分美国网站屏蔽五亿欧洲居民

最新文章 python使用sqlmap API检测SQL注入Centos6.4 + mysql-5.6.38-linux-glibc2.12-x86_64.tar 实现mysql主从复制 海尔回应“世卫组织打脸”:认可官方声明并道歉每周3500辆!特斯拉Model 3离5000辆目标再近一步最高立减800元:雷霆世纪首批高频内存主机开启京东预售北京冬奥组委公开征集北京冬奥会特许生产商

人气排行 鸟山明称漫画剧情比作画更重要 作画烂但有趣的作品等级更高TicWatch Pro智能手表发布:续航30天,智能双屏戴尔G5游戏本苏宁易购首发:预约享多重好礼三星因侵犯iPhone专利被判向苹果赔偿5.39亿美元信息论随笔3: 交叉熵与TF-IDF模型未来三年 陕西旅游品质将大力提升联想Z5屏下指纹识别曝光,常程:这是“小米8”!古巴一架波音737客机坠毁 目前已致百余人遇难