如何将pygame相机保存为视频输出

时间:2015-02-09 13:07:08

标签: python video pygame

我试过这个教程Stream Webcam Video to PyGame nothing error .. https://www.youtube.com/watch?v=H6ijuSmv5N0

和这样的脚本..

import pygame, sys
import pygame.camera
from pygame.locals import *

pygame.init()
pygame.camera.init()

screen = pygame.display.set_mode((640, 480))

cam = pygame.camera.Camera("/dev/video0", (640, 480))
cam.start()

while 1:
    image = cam.get_image()
    screen.blit(image, (0,0))
    pygame.display.update()

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            #save as video output
            sys.exit()

但是..在这里我有一个问题,当我想将那个Stream保存为视频输出时......就像mp4,3gp,avi等。

在此线程中pygame.image.save(img, "image.jpg")将输出保存为图像。 https://stackoverflow.com/a/20502651/3445802

3 个答案:

答案 0 :(得分:1)

Pygame的多媒体输出功能非常有限: 它只能保存未压缩的BMP图像,并且无法保存视频格式。

您必须使用另一个库来提供图像帧,渲染视频 - 或者在文件夹中逐帧保存,以新月顺序对文件名进行编号,然后将结果转换为带有实用程序的视频。

这个项目有一个类来调用libffmpeg对视频进行编码,在Python调用中逐帧传递: https://github.com/kanryu/pipeffmpeg - 你只需要一种方法将pygame Surface对象转换为预期的“frameraw”属性 FFMPEG。

https://github.com/kanryu/pipeffmpeg/blob/master/pipeffmpeg.py

答案 1 :(得分:1)

您可以使用pygame捕获帧。如果您将这些存储到磁盘,则可以使用您喜欢的任何软件将这些帧转换为您喜欢的任何视频格式。

稍微修改您的示例,可以按如下方式进行:

import pygame, sys, os
import pygame.camera
from pygame.locals import *

pygame.init()
pygame.camera.init()

# Ensure we have somewhere for the frames
try:
    os.makedirs("Snaps")
except OSError:
    pass

screen = pygame.display.set_mode((640, 480))

cam = pygame.camera.Camera("/dev/video0", (640, 480))
cam.start()

file_num = 0
done_capturing = False

while not done_capturing:
    file_num = file_num + 1
    image = cam.get_image()
    screen.blit(image, (0,0))
    pygame.display.update()

    # Save every frame
    filename = "Snaps/%04d.png" % file_num
    pygame.image.save(image, filename)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done_capturing = True

# Combine frames to make video
os.system("avconv -r 8 -f image2 -i Snaps/%04d.png -y -qscale 0 -s 640x480 -aspect 4:3 result.avi")

我用这个来创建可以与侦察兵/幼崽一起使用的定格动画软件。代码也很刻意,所以这些链接可能会有所帮助。

几个链接:

答案 2 :(得分:-2)

我现在不在家但是我的workarround采用pygame表面并转换为numpy数组并用opencv写入mp4电影。