python实现视频转彩色字符动画

大一时做的实训项目。今年重新运行时发现由于PIL库更新,getsize()函数已无法使用。故重新修改了一下发上来。

代码请点击这里下载

代码中的注释已经写的很详尽。

如何实现彩色字符动画

原本做的是彩色视频转彩色字符动画,但实际生成图片的效率很低,耗时很长,这里主要讲一下思路:

  1. 将视频提取每一帧
  2. 将每一帧转换为字符画
  3. 将字符画拼接成视频

你需要下载ffmpeg插件,opencv,os和subprocess库。

代码参考

将视频逐帧输出图片到文件夹A之后,输入文件夹A的路径,对图片进行转换处理,将处理后的图片存到文件夹B中。

1
2
3
4
5
6
7
path = input("请输入路径(例如D:\\picture):")
filelist = os.listdir(path)
for files in filelist:#循环处理文件夹中所有文件
Oldimg = os.path.join(path, files)#把图片的名字也组合上
if os.path.isdir(Oldimg):
continue
ascii_art(Oldimg)

将转换好的图片封装成视频。这里的路径换成你自己的,前面的路径是文件夹B,后面的路径是你希望存储封装后视频的路径。

1
2
cmd2='ffmpeg -f image2 -framerate 30 -i D:\\Pshixun\\out\\%d.jpg.png D:\\Pshixun\\outvideo.mp4'
sp.call(cmd2,shell=True)

为视频添加音频,并播放。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cmd3='ffmpeg -i D:\\Pshixun\\outvideo.mp4 -c:v copy -an D:\\Pshixun\\NO_AUDIO.mp4'
sp.call(cmd3,shell=True)
cmd4='ffmpeg -i D:\\Pshixun\\NO_AUDIO.mp4 -i D:\\Pshixun\\V.aac -c copy D:\\Pshixun\\WITHAUDIO.mp4'
sp.call(cmd4,shell=True)
cap = cv2.VideoCapture('WITHAUDIO.mp4')
while cap.isOpened():
ret, frame = cap.read()
# 如果正确读取帧,ret为True
cv2.namedWindow("frame",0)
cv2.resizeWindow("frame",500,1100)
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
color = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
cv2.imshow('frame', color)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()

*演示视频请看)如果代码运行不成功,欢迎找我讨论。(虽然只有GitHub和bilibili的联系方式啦)


python实现视频转彩色字符动画
https://monmuen.github.io/2024/03/13/python实现视频转彩色字符动画/
作者
Monmuen
发布于
2024年3月13日
许可协议