python将视频像素抓取替换导出mosaic效果的文本视频

第一次写博客,关于python的。
全网关于这种视频的的合成代码几乎没有,所以我提供了一套这样的思路。
完成过程很痛苦。因为全网类似的太少。
最近很火的武大樱花开,用代码敲出樱花盛开的场景,还是彩色的,怎么做到的呢?
武大源代码我简单看过,原理是类似的。
我做的视频的效果图(从视频截的图):


这里特别说明一下,黑底和白底,效果图有很大差别的,建议使用黑底,就是RGB(0,0,0)


设置背景色

原理很简单,说白了就是把一个视频抽分成n多个图片,比如一秒钟的视频拆出30份图片,再合成,那么这个导出视频就是三十帧,60就是六十,但是速度会受改变,这个自己去理解一下。
就是导出视频的帧率和速度取决于原视频,这个我不专业,简单说明。
拿到了几十张,甚至上百上千张这样的图片,把它们全体存放在old文件夹下。这时需要对每一张图片进行划分,例如64x64,128x128的网格状小正方形
每一块正方形中原本是图片,但是现在需要填充你所想要替换的文字,注意,这里是将原来色彩的图片调用方法替换成相同颜色的文字。
当然你也可以用图片的convert方法改成黑白色。
改完了的图片又是几百张上千张,我把它固定的集中在一个new文件夹下,供第三步的使用。
第三步的作用很简单了,就是将所有图片合成视频,例如90张的图片按三十帧合成,那么导出的视频就是3秒,按10帧合成就是九秒,当然这样会感到卡顿,速度变慢。
建议自己把帧率和速度一一对应,调试一下即可。



原理就是这样,其中一三步都可以用视频软件实现的,例如PR,AE,但是很费事,也比较烧电脑,既然用了pycharm就要用到底啊,全必须用python敲出来!!

********废话不多说,实施:
1.几个必要的包,Pillow,Pilow-PIL,opencv-python,os都必须提前下好导入。
2.在D盘根目录下新建一个photo文件夹,photo文件夹中再新建new和old两个文件夹,用于存放照片,最好这样命名,避免代码中路径的修改
3.去网上下载经典综艺体简体这个字体的TTF文件,也同样存放在photo文件夹下。*下载lianjie在代码注释里
注意,这里最好是下“经典综艺体”其他的字体测试时候可能会有bug
4.将需要做的视频放在pycharm项目根目录下(与.py文件同级),命名为1.mp4。
5.将程序分为三个模块,每次只执行一个模块,其余两个注释掉。
因为图片处理的速度比较慢,同时执行会因为目录中来不及产生需要的文件报错
6.建议帧率不要选择太高,还有视频不要选择太长,10几秒即可。不然导出的图片数量过大第二部上像素的过程会很缓慢。
7.几个特别注意的地方:注释中打叹号的地方需要仔细检查,特别是第二模块的for循环图片个数需要根据具体导出的图片数量修改。


'''
第一部分代码,首先执行。此时请注释掉:第二第三部分的所有代码,(一二三只能按顺序依次执行)!!!!!!!!!!!!!!!!!
'''
'''
第一部分:目的是将你准备好的视频素材,剪成n多张图片,存在D:/photo/old/文件夹下
'''
import cv2
import os    #opencv和os,记得提前下载opencv-python(在控制台输入pip install opencv-python)
#要提取视频的文件名,隐藏后缀,例如视频素材是1.mp4,这里只需要保留'1'即可
sourceFileName='1'
#在这里通过代码把后缀接上,这一步不需要你去动
video_path = os.path.join("", "", sourceFileName+'.mp4')
times=0
#提取视频的频率,每2帧提取一个
frameFrequency=2
#输出图片到old文件夹下
outPutDirName='D:/photo/old/'
if not os.path.exists(outPutDirName):#如果old文件夹不存在则创建目录os.makedirs(outPutDirName)
camera = cv2.VideoCapture(video_path)
i=0
while True:times+=1res, image = camera.read()if not res:print('not res , not image')breakif times%frameFrequency==0:cv2.imwrite(outPutDirName + str(i)+'.jpg', image)print(outPutDirName + str(i)+'.jpg')#将每一帧分离出来的图片保存在文件夹内,从0.jpg,1.jpg......100.jpg按顺序排好i+=1
print('图片提取结束')
camera.release()'''
第二部分:此时请注释掉1,3部分的代码,(一二三只能按顺序依次执行,每次执行一个模块)!!!!!!!!!!!!!!!!!!!!!
'''
'''
第二部分:在导出的每一帧图片上,给每一块细小的像素,用文字替换原图
'''
from PIL import Image, ImageDraw, ImageFont   #记得提前下载pillow或pillow-PIL
for i in range(100):#这里千万要注意改!,new文件夹里有多少张图片,这里就填多少!!!!!!!!!!!!!!!!!!!!!!!!!!!!font_size = 12text = "自定义你想要输出的文字"img_path = "D:/photo/old/"+str(i)+".jpg"img_raw = Image.open(img_path)img_array = img_raw.load()img_new = Image.new("RGB", img_raw.size, (0,0,0))    #背景色,默认为黑色0 0 0,可以调成白色255 255 255draw = ImageDraw.Draw(img_new)font = ImageFont.truetype('D:\photo\经典综艺体简.TTF', font_size)#经典综艺体简.TTF,是一种字体,你也可以下载别的字体,放在这个文件夹里,注意改名!!!!!!!!!!!!!!!!!!!!# 别的字体我试过,很多输出显示会有bug,建议下载这种字体#http://www.font5.com.cn/font_download.php?id=201&part=1239976947def character_generator(text):while True:for i in range(len(text)):yield text[i]ch_gen = character_generator(text)for y in range(0, img_raw.size[1], font_size):for x in range(0, img_raw.size[0], font_size):draw.text((x, y), next(ch_gen), font=font, fill=img_array[x, y], direction=None)# img_new=img_new.convert("L")    #特别注释,这句话的作用是把图像转换为黑白色,一般注释掉,默认输出彩色img_new.convert('RGB').save("D://photo//new//"+str(i)+".jpg")#执行完之后所有的"马赛克"图片就会在new文件夹里存放,按顺序排列'''
第三部分:把第一二部分全部注释掉,(一二三只能按顺序依次执行,每次执行一个模块)!!!!!!!!!!!!!!!!!!!!!
'''
'''
第三部分:把几百张图片合成一个完整的视频,可以自己调试最适合的帧率
'''
import cv2 #同样需要导入cv2,请提前下载好
import os
im_dir='D:/photo/new'
video_dir = 'new.avi'
imglist = sorted(os.listdir(im_dir))
imglist.sort(key=lambda x: int(x[:-4]))
img = cv2.imread(os.path.join(im_dir,imglist[0]))
H, W, D = img.shape
print('height:' + str(H)+'--'+'width:'+str(W)+'--'+'depth:'+str(D))
fps = 24  #输出视频的帧率是24,这里可以修改视频帧率,自己摸索调出最适合的帧率,一般20-30即可
img_size = (W,H)
fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)
for image in imglist:img_name = os.path.join(im_dir, image)frame = cv2.imread(img_name)videoWriter.write(frame)print('合成==>'+img_name)
videoWriter.release()
print('finish!')
#第三步没有什么需要注意的
#当看到finish!完成之后,去你的这个pycharm项目文件夹下找到视频new.avi即为导出的视频

python将视频像素抓取替换导出mosaic效果的文本视频相关推荐

  1. jupyter分割代码块_科研分享—Python根据关键词自动抓取Pubmed文献标题(附全部代码)文末有福利...

    写在前面:接触Python应该是8月初的一篇公众号文章,大致内容是使用py爬取数据库并汇总到本地.正好手头需要对某个领域的文献进行调研,不妨学习一下. 什么是Python? 百度说:Python (计 ...

  2. python实现人脸识别抓取人脸并做成熊猫头表情包(2)之优化

    上次做完python实现人脸识别抓取人脸并做成熊猫头表情包之后就放了一下,因为还要好好学习Springboot毕竟这才是找工作的硬实力.但是优化这个代码心里面一直很想,借用<clean code ...

  3. Python进阶之Scrapy抓取苏宁图书数据

    Python进阶之Scrapy抓取苏宁图书数据 1. 需求 2. 代码示例: 创建项目 start.py settings.py iterms.py snb.py pipelines.py 3. 注意 ...

  4. python爬取百度贴吧中的所有邮箱_使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号...

    原标题:使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号 不知道大家过年都是怎么过的,反正栏主是在家睡了一天,醒来的时候登QQ发现有人找我要一份贴吧爬虫的源代码,想起之前练手的时候写过一个抓 ...

  5. python爬虫代码房-Python爬虫一步步抓取房产信息

    原标题:Python爬虫一步步抓取房产信息 前言 嗯,这一篇文章更多是想分享一下我的网页分析方法.玩爬虫也快有一年了,基本代码熟悉之后,我感觉写一个爬虫最有意思的莫过于研究其网页背后的加载过程了,也就 ...

  6. python beautifulsoup抓取网页内容_利用Python和Beautiful Soup抓取网页内容

    利用Python和Beautiful Soup抓取网页内容 Posted on 2012-08-09 00:08 SamWei 阅读(381) 评论(1) 编辑 收藏 Python 3中提供了url打 ...

  7. Python爬虫项目:抓取智联招聘信息

    来自https://mp.weixin.qq.com/s/0SzLGqv2p0-IWSN3r8bOHA ''' Python爬虫之五:抓取智联招聘基础版 该文件运行后会产生一个代码,保存在这个Pyth ...

  8. Python利用bs4批量抓取网页图片并下载保存至本地

    Python利用bs4批量抓取网页图片并下载保存至本地 使用bs4抓取网页图片,bs4解析比较简单,需要预先了解一些html知识,bs4的逻辑简单,编写难度较低.本例以抓取某壁纸网站中的壁纸为例.(b ...

  9. 通过Python爬虫按关键词抓取相关的新闻

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途 如今各大网站的反爬机制已经可以说是到了丧心病狂的程度,比如大众点评的字符加密.微博的登录验证等.相比较而言,新闻网站的反爬机制 ...

最新文章

  1. Ubuntu16.04下安装Redis数据库
  2. R 包 pathview 代谢通路可视化
  3. python 是什么类型的语言-python到底是什么类型的语言
  4. ucore-lab1-练习6report
  5. 顺丰快递,果然不一般!
  6. ajax获取java session的值_jquery 怎么获取 ajax中的session值
  7. vb改变字形的代码是什么_VB怎么改变字体?
  8. 整理总结:深入浅出统计学 —— 卡方分布
  9. 使用端口扫描工具消除端口安全威胁
  10. FastStone Capture注册破解码
  11. win10无线网卡黄色感叹号
  12. crmeb单商户4.4开目录结构 crmeb二开文档 crmeb二开目录结构
  13. Science子刊:利用DTI和NODDI纵向研究揭示轻度脑外伤后的白质微结构改变
  14. [情感] 纯情女生给老实木讷男孩的恋爱建议
  15. 省市区级联SQL文件(MySQL)
  16. LM2596开关电源 多路开关电源 DC-DC降压电源 固定/可调输出 原理图和PCB
  17. Java手机号码工具类(判断运营商、获取归属地)
  18. 理解COM的线程套件(转)
  19. 利用KNeighborsClassifier最近邻分类器,做莺尾花分类
  20. javaEE---CSS

热门文章

  1. 1093. 大样本统计-正常统计
  2. Windows直接拖拽文件复制到虚拟机Ubuntu
  3. jdk1.8 stream() 把List对象 变成String
  4. STM32-F407入门学习专题(九) STM32外设之ADC
  5. UPS BP650CH实现nas自动关机
  6. Android Studio计算BMI小软件
  7. 判断一年放了多少天假
  8. C#如何新建Excel
  9. android 仿微信账单生成器手机版式,至尊版清理大师app
  10. STM32+Air202+Air530+HXDZ-30102-ACC心率血氧GPS采集上传到阿里云