Python字符动画制作(PIL/FFmpeg)
参考
准备
安装ffmpeg
准备python
安装PIL
安装numpy
代码
from PIL import Image, ImageDraw, ImageFont
import argparse
import numpy as np
sample_rate = 0.4
def ascii_art(file):
im = Image.open(file)
\# Compute letter aspect ratio
font = ImageFont.load\_default()
\# font = ImageFont.truetype("SourceCodePro-Bold.ttf", size=12)
aspect\_ratio = font.getsize("x")\[0\] / font.getsize("x")\[1\]
new\_im\_size = np.array(
\[im.size\[0\] \* sample\_rate, im.size\[1\] \* sample\_rate \* aspect\_ratio\]
).astype(int)
\# Downsample the image
im = im.resize(tuple(new\_im\_size))
\# Keep a copy of image for color sampling
im\_color = np.array(im)
\# Convert to gray scale image
im = im.convert("L")
\# Convert to numpy array for image manipulation
im = np.array(im)
\# Defines all the symbols in ascending order that will form the final ascii
symbols = np.array(list(" .-vM"))
\# Normalize minimum and maximum to \[0, max\_symbol\_index)
im = (im - im.min()) / (im.max() - im.min()) \* (symbols.size - 1)
\# Generate the ascii art
ascii = symbols\[im.astype(int)\]
\# Create an output image for drawing ascii text
letter\_size = font.getsize("x")
im\_out\_size = new\_im\_size \* letter\_size
bg\_color = "black"
im\_out = Image.new("RGB", tuple(im\_out\_size), bg\_color)
draw = ImageDraw.Draw(im\_out)
\# Draw text
y = 0
for i, line in enumerate(ascii):
for j, ch in enumerate(line):
color = tuple(im\_color\[i, j\]) \# sample color from original image
draw.text((letter\_size\[0\] \* j, y), ch\[0\], fill=color, font=font)
y += letter\_size\[1\] \# increase y by letter height
\# Save image file
im\_out.save(file\[0:10\] + ".jpg")
if __name__ == “__main__“:
# parser = argparse.ArgumentParser(description=”Convert any image to ascii art.”)
# parser.add_argument(
# “file”, type=str, help=”input image file”,
# )
# args = parser.parse_args()
# 上面的内容表示file参数的输入
\# 也可以直接在脚本内部定义
for i in range(47, 60):
file = "./img/{:0>4d}.jpg".format(i) \# 这里是定义了内部的文件路径
ascii\_art(file)
ffmpeg
获取图片中的每一帧
ffmpeg -i <文件路径> -r 25 -qscale:v 2 out/%04d.jpg
将图片生成为视频,libx264
ffmpeg -i %04d.jpg -c:v libx264 -vf fps=25 -pix_fmt yuv420p out.mp4
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Q's blog!
