在 Linux 上将 PIL 图像转换为视频

plu*_*ash 3 python linux video debian python-3.x

我在 Debian Linux 上使用 python 3,我使用 python 成像库(枕头叉)来生成图像序列,我想以广泛支持的格式将图像输出为视频(不要太在意哪个一个,只要它是我可以在 VLC 中查看并导入视频编辑软件的东西)。

我怎样才能做到这一点?

plu*_*ash 5

一种解决方案是使用opencv,数据可以通过numpy从PIL桥接到opencv。我使用的代码大纲是。

import numpy as np
from PIL import Image, ImageDraw
import cv2

videodims = (100,100)
fourcc = cv2.VideoWriter_fourcc(*'avc1')    
video = cv2.VideoWriter("test.mp4",fourcc, 60,videodims)
img = Image.new('RGB', videodims, color = 'darkred')
#draw stuff that goes on every frame here
for i in range(0,60*60):
    imtemp = img.copy()
    # draw frame specific stuff here.
    video.write(cv2.cvtColor(np.array(imtemp), cv2.COLOR_RGB2BGR))
video.release()
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 您需要安装相关软件包,如果使用 pip,它们是“opencv-python”、“pillow”和“numpy”。如果使用 debian 软件包,它们是“python3-opencv”、“python3-pil”和“python3-numpy”。
  • 我从https://blog.extramaster.net/2015/07/python-pil-to-mp4.html获得了基本技术)
  • Extramaster 声称将 -1 作为编解码器参数传递会弹出一个编解码器选择列表,这对我不起作用。
  • 我最终不得不使用 Debian buster(=在撰写本文时进行测试),因为早期版本缺少 python3-opencv 包。
  • 如果您的框架的尺寸与视频的尺寸不匹配,opencv 将无声地添加框架。