Проблемы с преобразованием видео в изображения с использованием Python 2.7 - PullRequest
1 голос
/ 17 января 2012

Перепробовал много вариантов и у меня заканчиваются идеи.Я надеялся, что кто-то здесь может помочь.Я пытаюсь написать некоторый код на python, который будет извлекать кадры (скажем, каждый десятый кадр) из видео (.avi или .wmv) и создавать картинку (желательно .jpg - но подойдут другие форматы).У меня не было успеха, и мне было интересно, может ли кто-нибудь помочь мне в решении моей проблемы, предоставив альтернативу тому, что я попробовал и потерпел неудачу.

Я пробовал PyMedia (пример из их учебника http://pymedia.org/tut/src/dump_video.py.html не работает - программа взрывается, когда ищет видеокодеки):

#dm= muxer.Demuxer( inFile.split( '.' )[ -1 ] )  This line does not work

  dm= muxer.Demuxer( 'avi' )  #This modified line does seem to work however

  i= 1

  inFile = "VideoTest.avi"

  f= open( inFile, 'rb' )

  s= f.read( 400000 )

  r= dm.parse( s )

  v= filter( lambda x: x[ 'type' ]== muxer.CODEC_TYPE_VIDEO, dm.streams )

  v_id= v[ 0 ][ 'index' ]

  print 'Assume video stream at %d index: ' % v_id

  c= vcodec.Decoder( dm.streams[ v_id ] )     #this is the point where it crashes.

У меня естьпробовал OpenCV v2.2 для Python, но это тоже не работает (я могу заставить работать большинство OpenCV - за исключением одной нужной мне функции CaptureFromFile, которая не работает).Я полагаю, что причина, по которой эта функция не работает, в том, что в Windows ей требуется highGui для работы, и по некоторым причинам python и opencv не могут найти highgui, даже если она находится в правильном каталоге.Я также понимаю, что у OpenCV есть проблемы с поиском и применением правильных видеокодеков, поэтому я не уверен, что является причиной моей проблемы.

Я посмотрел на pyFFMPEG, но последней версией для этого была версия 2.6, и я использую python 2.7.

Я использую его на компьютерах с Windows Vista и Windows 7, имею Python 2.7 и OpenCV2.2 загружен на C: \ и все другие пакеты python (pygames, pymedia, numpy, scipy), установленные в C: \ python27 \ Libs \ site-packages ... "Я скачал и установил из исполняемых файлов, все пакеты были собраны для python 2.7Моя переменная Path содержит Python27 и OpenCV, и у меня есть переменная PYTHONPATH.

Спасибо за любые идеи или рекомендации.

1 Ответ

1 голос
/ 07 ноября 2013

Я попробовал следующее, чтобы извлечь каждый кадр как отдельное изображение:

import cv2

file_path = "some\path\to\the\file.avi"
video_object = cv2.VideoCapture(path)

success = True
while success:
    success,frame = video_object.read()
    if success:
        cv2.imwrite(path[:-4]+"_"+str(i)+".jpg",frame)
print("Done!")

Этот скрипт сохраняет каждый кадр как изображение в той же папке, что и исходный файл. Возможно, это не самый эффективный способ сделать это, но он работает для меня! Я знаю, что мой разбор строк не самый рекомендуемый, но он работает. video_object.read() возвращает два объекта. Первый - bool, указывающий, была ли операция чтения успешной или нет, а второй - изображение.

В отношении видеокодека могут быть ограничения, о которых я не знаю. Я использую Python 2.7 с самой последней версией openCV и Numpy от 11.07.2013.

...