龙空技术网

Python视频转字符实现本草纲目跳毽子舞

312每天一个短知识 695

前言:

此时大家对“python int 转字符”可能比较注意,同学们都需要了解一些“python int 转字符”的相关知识。那么小编同时在网络上汇集了一些对于“python int 转字符””的相关文章,希望小伙伴们能喜欢,朋友们快快来学习一下吧!

最近网上刘畊宏跳毽子舞视频风靡多少年轻家庭和小姐姐[呲牙]。看到有一位女RD用代码实现了本草纲目毽子舞效果很漂亮,所以自己想用Python代码看能不能实现效果。今天为大家介绍Python视频转字符实现本草纲目毽子舞。我总结了两个解决方案分别介绍。

一、使用FFmpeg实现毽子舞

1、安装FFmpeg

可以查看我以前写的文章《Python使用FFmpeg视频缩略图实现》

2、FFmpeg视频转图片

#转换毽子舞视频为JPG图片ffmpeg -i dance.mp4 -f image2 %05d.jpg

3、Python图片转字符

import osimport cv2import timeimport sysfrom PIL import Image,ImageFont,ImageDraw#图片字符串配置str         = '$&#QWExty'str_img     = ''#图片地址image       = cv2.imread("00002.jpg")#图片宽高height      = image.shape[0]width       = image.shape[1]#opencv图表grey = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)grey = cv2.resize(grey, (int(width/6), int(height/6)))num = 1#遍历图片每个像素for i in grey:	for j in i:                #图片像素转字符		index = int(j / 256 * len(str))		str_img += str[index]	str_img += '\n'#打印图片字符串print(str_img)sys.exit(0)

4、Python图片字符串转图片

import osimport cv2import timeimport sysfrom PIL import Image,ImageFont,ImageDraw#图片字符串生成图片def chars_to_image(str_img, file_name):        #字体(字体不对生成的字符串图看不出效果)	font = ImageFont.truetype("/System/Applications/Utilities/Terminal.app/Contents/Resources/Fonts/SF-Mono-Regular.otf",20)	im = Image.new("RGB",(2048,2048),(255,255,255))	dr = ImageDraw.Draw(im)	x,y = 5,5	text = str_img.split()	for line in text:		dr.text((x,y),line,font=font,fill="#000000")		y += 26 	im.save(file_name + ".jpg")num = 1  str_img = '步骤3计算出来的图片字符串'chars_to_image(str_img, '%d'%num)sys.exit(0)

5、FFmpeg图片转视频

#每秒3帧的图片转视频ffmpeg -f image2 -i %d.jpg -vcodec libx264 -r 3 char_dance.mp4

6、视频字符效果图

二、使用Opencv实现毽子舞

1、Python OpenCV安装

#模块好像挺大下载挺慢pip3 install opencv-python

2、Opencv视频帧转字符图片

import osimport cv2import timeimport sysfrom PIL import Image,ImageFont,ImageDraw#字符串生成图片def chars_to_img(str_img, file_name):	font = ImageFont.truetype("/System/Applications/Utilities/Terminal.app/Contents/Resources/Fonts/SF-Mono-Regular.otf",20)	im = Image.new("RGB",(2048,2048),(255,255,255))	dr = ImageDraw.Draw(im)	x,y=5,5	text = str_img.split()	for line in text:		dr.text((x,y),line,font=font,fill="#000000")		y += 26 	im.save(file_name + ".jpg")#图片字符串配置str = '$&#QWExty'video = cv2.VideoCapture('dance.mp4')ret, frame = video.read()width = frame.shape[0]height = frame.shape[1]#print(width, height)num = 1#循环视频帧while ret:  str_img = ''  #图片灰度表  grey = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)  grey = cv2.resize(grey, (int(width / 10), int(height / 10)))  #循环图片每个像表  for i in grey:    for j in i:      index = int(j / 256 * len(str))      str_img += str[index]    str_img += '\n'  os.system('clear')  #print(str_img)  chars_to_img(str_img, '%d'%num)  #sys.exit(0)  num += 1  #读取下一帧  ret, frame = video.read()  cv2.waitKey(3)  time.sleep(0.03)

3、FFmpge字符图片生成视频

#每秒3帧的图片转视频ffmpeg -f image2 -i %d.jpg -vcodec libx264 -r 3 char_dance.mp4

4、字符图片视频效果

三、总结

字符串生成图片时设置的字体很重要,字体不对生成的图片看不出运行效果(调试好久最后字体用的是Terminal终端字体)。配置的图片字符串很重要,图片字符串偏短不易偏长。图片字符串配置不对生成的字符图片无效果。需要根据生成的字符图片效果调试配置合适的图片字符串。OpenCV图片表的宽高尽量使用原图的宽高获取不要设置固定值。眼见千遍,不如手过一遍。手过了才明白实现的机制。os.system('clear')是MAC下命令行方式看效果的。Linux下应该是os.system('cls')或os.system('clear')。

大家有什么意见或建议可以发评论沟通。

感谢大家的评论、点赞、分享、关注。。。

标签: #python int 转字符