python彩色字符视频代码(python将视频转换为全字符视频)
类别:脚本大全 浏览量:1387
时间:2021-10-14 00:44:08 python彩色字符视频代码
python将视频转换为全字符视频简介
如何简单的使用python来实现将一部视频转换为字符画视频的效果。
其实,大家都知道视频就是一帧一帧的图片构成的。
那么如今我们想要实现,将视频转换为字符视频,那么是不是可以认为只要将一部视频全部逐帧拆解成图片,然后采取和以前相同的将图片转换为字符画的算法即可。然后在将这些图片按照原先的视频的格式封装起来就可以了。
既然有了想法,那接下来,自然是开始实际开发了。
代码
以下是相关部分的代码:
|
#-*- coding:utf-8 -*- import argparse import os import cv2 import subprocess from cv2 import videowriter,videowriter_fourcc,imread,resize from pil import image, imagefont, imagedraw #命令行输入参数处理 parser = argparse.argumentparser() parser.add_argument( 'file' ) parser.add_argument( '-o' , '--output' ) parser.add_argument( '-f' , '--fps' , type = float , default = 24 ) #帧 parser.add_argument( '-s' , '--save' , type = bool , nargs = '?' , default = false, const = true) #是否保留cache文件,默认不保存 #获取参数 args = parser.parse_args() input = args. file output = args.output save = args.save fps = args.fps #像素对应ascii码 ascii_char = list ( "$@b%8&wm#*oahkbdpqwmzo0qlcjuyxzcvunxrjft/\|()1{}[]?-_+~<>i!li;:oa+>!:+. " ) #ascii_char = list("mnhq$oc67+>!:-. ") #ascii_char = list("mnhq$oc67)oa+>!:+. ") #将像素转换为ascii码 def get_char(r,g,b,alpha = 256 ): if alpha = = 0 : return '' length = len (ascii_char) gray = int ( 0.2126 * r + 0.7152 * g + 0.0722 * b) unit = ( 256.0 + 1 ) / length return ascii_char[ int (gray / unit)] #将txt转换为图片 def txt2image(file_name): im = image. open (file_name).convert( 'rgb' ) .jpg" alt="python彩色字符视频代码(python将视频转换为全字符视频)" border="0" /> raw_width = im.width raw_height = im.height width = int (raw_width / 6 ) height = int (raw_height / 15 ) im = im.resize((width,height),image.nearest) txt = "" colors = [] for i in range (height): for j in range (width): pixel = im.getpixel((j,i)) colors.append((pixel[ 0 ],pixel[ 1 ],pixel[ 2 ])) if ( len (pixel) = = 4 ): txt + = get_char(pixel[ 0 ],pixel[ 1 ],pixel[ 2 ],pixel[ 3 ]) else : txt + = get_char(pixel[ 0 ],pixel[ 1 ],pixel[ 2 ]) txt + = '\n' colors.append(( 255 , 255 , 255 )) im_txt = image.new( "rgb" ,(raw_width,raw_height),( 255 , 255 , 255 )) dr = imagedraw.draw(im_txt) #font = imagefont.truetype(os.path.join("fonts","汉仪楷体简.ttf"),18) font = imagefont.load_default().font x = y = 0 #获取字体的宽高 font_w,font_h = font.getsize(txt[ 1 ]) font_h * = 1.37 #调整后更佳 #imagedraw为每个ascii码进行上色 for i in range ( len (txt)): if (txt[i] = = '\n' ): x + = font_h y = - font_w dr.text((y,x),txt[i],font = font, fill = colors[i]) y + = font_w name = file_name print (name + ' changed' ) im_txt.save(name) #将视频拆分成图片 def video2txt.jpg" alt="python彩色字符视频代码(python将视频转换为全字符视频)" border="0" /> vc = cv2.videocapture(file_name) c = 1 if vc.isopened(): r,frame = vc.read() if not os.path.exists( 'cache' ): os.mkdir( 'cache' ) os.chdir( 'cache' ) else : r = false while r: cv2.imwrite( str (c) + '.jpg" alt="python彩色字符视频代码(python将视频转换为全字符视频)" border="0" /> txt2image( str (c) + '.jpg" alt="python彩色字符视频代码(python将视频转换为全字符视频)" border="0" /> r,frame = vc.read() c + = 1 os.chdir( '..' ) return vc #将图片合成视频 def
fourcc = videowriter_fourcc( * ".jpg" alt="python彩色字符视频代码(python将视频转换为全字符视频)" border="0" /> images = os.listdir( 'cache' ) im = image. open ( 'cache/' + images[ 0 ]) vw = cv2.videowriter(outfile_name + '.avi' ,fourcc,fps,im.size) os.chdir( 'cache' ) for image in range ( len (images)): #image.open(str(image)+'.jpg" alt="python彩色字符视频代码(python将视频转换为全字符视频)" border="0" /> frame = cv2.imread( str (image + 1 ) + '.jpg" alt="python彩色字符视频代码(python将视频转换为全字符视频)" border="0" /> vw.write(frame) print ( str (image + 1 ) + '.jpg" alt="python彩色字符视频代码(python将视频转换为全字符视频)" border="0" /> os.chdir( '..' ) vw.release() #递归删除目录 def remove_dir(path): if os.path.exists(path): if os.path.isdir(path): dirs = os.listdir(path) for d in dirs: if os.path.isdir(path + '/' + d): remove_dir(path + '/' + d) elif os.path.isfile(path + '/' + d): os.remove(path + '/' + d) os.rmdir(path) return elif os.path.isfile(path): os.remove(path) return #调用ffmpeg获取mp3音频文件 def video2mp3(file_name): outfile_name = file_name.split( '.' )[ 0 ] + '.mp3' subprocess.call( 'ffmpeg -i ' + file_name + ' -f mp3 ' + outfile_name,shell = true) #合成音频和视频文件 def video_add_mp3(file_name,mp3_file): outfile_name = file_name.split( '.' )[ 0 ] + '-txt.mp4' subprocess.call( 'ffmpeg -i ' + file_name + ' -i ' + mp3_file + ' -strict -2 -f mp4 ' + outfile_name,shell = true) if __name__ = = '__main__' : vc = video2txt.jpg" alt="python彩色字符视频代码(python将视频转换为全字符视频)" border="0" /> fps = vc.get(cv2.cap_prop_fps) #获取帧率 vc.release()
input .split( '.' )[ 0 ],fps) print ( input , input .split( '.' )[ 0 ] + '.mp3' ) video2mp3( input ) video_add_mp3( input .split( '.' )[ 0 ] + '.avi' , input .split( '.' )[ 0 ] + '.mp3' ) if ( not save): remove_dir( "cache" ) os.remove( input .split( '.' )[ 0 ] + '.mp3' ) os.remove( input .split( '.' )[ 0 ] + '.avi' ) |
流程图
这次python编程的流程图如下:
注意事项
在编程的过程中有需要注意的几点:
- 这次编程使用到了opencv库,需要安装
- 帧率的获取可以通过这个函数——fps = vc.get(cv2.cap_prop_fps)
- 合成后的视频是没有声音的,我们使用ffmpeg进行合成
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
原文链接:https://blog.csdn.net/kongfu_cat/article/details/79681719
您可能感兴趣
- python云服务技术(Python脚本修改阿里云的访问控制列表的方法)
- docker下运行python3(使用Docker+jenkins+python3环境搭建超详细教程)
- python教程第126节(Python 学习教程之networkx)
- 用python制作一个简单的小程序(一个可以套路别人的python小程序实例代码)
- python列表精讲33节(Python列表知识应知应会)
- python连接到本地的mysql数据库(Python实现连接MySql数据库及增删改查操作详解)
- pythonfor循环如何遍历嵌套列表(在Python中,不用while和for循环遍历列表的实例)
- 使用python爬取网易云音乐(15行Python代码实现网易云热门歌单实例教程)
- python中if判断数据类型(基于python if 判断选择结构的实例详解)
- python微信窗口内容获取(python使用wxpy轻松实现微信防撤回的方法)
- python3循环使用教程(Python3.5常见内置方法参数用法实例详解)
- python排序的三种方法(Python实现插入排序和选择排序的方法)
- python 文件操作(Python File文件 方法整理)
- python将一个字符串逆序输出(Python字符串逆序的实现方法一题多解)
- python统一支付接口(Python实现的微信支付方式总结三种方式)
- python封装函数讲解(Python中super函数用法实例分析)
- 吉林舒兰 封城 15人确诊 276人隔离,出现跨省传播(吉林舒兰封城)
- 四月新番CP人气榜公布,《剃须》两度上榜,沙优不是女朋友(四月新番CP人气榜公布)
- 2019年外媒秋季新番动画角色CP排行榜,桐人和爱丽丝落榜(2019年外媒秋季新番动画角色CP排行榜)
- 新一小兰领衔 盘点动漫中的那些 远距离恋爱情侣(盘点动漫中的那些)
- 大事件 合肥四中火了(大事件合肥四中火了)
- 翼龙贷组织出借人调研 感受鄱阳 借 来的致富路(翼龙贷组织出借人调研)
热门推荐
- css cursor鼠标效果
- 使用RouteDebugger对MVC路由进行调试
- html5自定义字体图标(HTML5给汉字加拼音收起展开组件的实现代码)
- 如何用python编写抽奖(详解用python写一个抽奖程序)
- vue3封装table组件(Vue封装通用table组件的完整步骤记录)
- navicat连接mysql是远程连接吗(详解Navicat远程连接mysql很慢)
- python 微信二维码接口(python实现微信防撤回神器)
- pythonjson格式化原理(详解pythonstr与json类型转换)
- html5标签怎么做(html5用video标签流式加载的实现)
- python代码如何进行切片索引(Python读取Pickle文件信息并计算与当前时间间隔的方法分析)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9