2015-02-09 3 views
3

я попробовать этот учебник поток Веб-камера видео в PyGame ничего ошибка .. https://www.youtube.com/watch?v=H6ijuSmv5N0как сохранить Pygame камеру в качестве видеовыхода

и сценарий, как это ..

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() 

Но .. здесь я есть проблема, когда я хочу сохранить этот поток в качестве вывода видео. Например, mp4, 3gp, avi и другие.

В этой теме pygame.image.save(img, "image.jpg") сохранить результат как изображение. https://stackoverflow.com/a/20502651/3445802

ответ

1

возможности мультимедиа выход Pygame являются severily ограничены: Он может сохранять только несжатые изображения в формате BMP, и нет никакого способа, он может сохранить формат видео.

Вы должны использовать другую библиотеку, которая предназначена для подачи кадров изображения, для рендеринга видео или сохранения кадровой синхронизации в папке, нумерации имен файлов в порядке полумесяца и преобразования результата в видео с помощью утилиты позже.

Этот проект seens, чтобы показать класс для вызова libffmpeg для кодирования видео, передавая кадр за кадром в вызове Python: https://github.com/kanryu/pipeffmpeg - вам просто нужен способ, чтобы преобразовать объект Pygame Surface ожидаемому «frameraw» атрибут ffmpeg.

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

+0

ОК сэр, спасибо вам за это необязательно ... как о 'pymedia' сэр? – agaust

-1

i'm не дома сейчас, но моя workarround это взять поверхность Pygame и конвертировать в Numpy массив и писать с OpenCV в mp4 фильм.

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") 

Я использовал это, чтобы создать программное обеспечение движения стоп, который может быть использован с скаутами/медвежатами. Код также преднамеренно прост, поэтому несколько ссылок на них, которые могут быть полезны.

Пара ссылок:

Смежные вопросы