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中如何使用分步式进程计算详解)
- python程序运行步骤(详解python运行三种方式)
- python导出数据到mysql(python定时按日期备份MySQL数据并压缩)
- nginxpython编写模块(Python开发之Nginx+uWSGI+virtualenv多项目部署教程)
- python将一个字符串逆序输出(Python字符串逆序输出的实例讲解)
- python交互执行shell脚本(python 利用文件锁单例执行脚本的方法)
- python数据表教程(详解Python sys.argv使用方法)
- python中比较同一字典value(在Python 字典中一键对应多个值的实例)
- python时间类的实现(Python日期时间Time模块实例详解)
- pythonwhile语句的原理(谈谈Python中的while循环语句)
- pythonftp功能介绍(使用Python操作FTP实现上传和下载的方法)
- python中for语句的无限循环(python使用for循环计算0-100的整数的和方法)
- python算法图解(python实现kmp算法的实例代码)
- 学python从零基础到开发游戏(python开发游戏的前期准备)
- python中读取文件怎么操作(Python实现的读取文件内容并写入其他文件操作示例)
- python 内存读写(详解python持久化文件读写)
- 华为 联想等46家公司笔试面试题,涉及各行各业,建议收藏(联想等46家公司笔试面试题)
- ()
- ()
- 800壮士拼死拖住30万日军 八佰 的真实历史,誓与阵地共存亡(800壮士拼死拖住30万日军)
- 演员陈创,火于 哮天犬 ,颠峰于 福贵 ,现状却令人唏嘘(演员陈创火于哮天犬)
- 幼小衔接-20以内看图读数 写数 数的组成练习题(幼小衔接-20以内看图读数)
热门推荐
- python3配置教程(python3中property使用方法详解)
- dedecms内容页代码(DEDECMS生成HTML时提示 DedeTag Engine Create File False的解决方法)
- python解析csv文件存到数据库(python读取csv和txt数据转换成向量的实例)
- serv-u怎么用web登录(serv-u服务器的管理方法与功能分析)
- css3浮动教程(CSS3使用多列制作瀑布流)
- laravel数据绑定(laravel-admin表单提交隐藏一些数据,回调时获取数据的方法)
- 方法参数过多的解决方法
- python pandas dataframe 查询(Python实现从SQL型数据库读写dataframe型数据的方法基于pandas)
- python中startswith使用教程(Python os.access用法实例)
- react怎么添加动态html(react中的DOM操作实现)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9