Передача необработанных изображений OpenCV в FFmpeg

Вот довольно простой пример чтения с веб-камеры с использованием привязок Python в OpenCV:

'''capture.py'''
import cv, sys
cap = cv.CaptureFromCAM(0)                    # 0 is for /dev/video0
while True :
    if not cv.GrabFrame(cap) : break
    frame = cv.RetrieveFrame(cap)
    sys.stdout.write( frame.tostring() )

Теперь я хочу передать вывод в ffmpeg, как показано в примере:

$ python capture.py | ffmpeg -f image2pipe -pix_fmt bgr8 -i - -s 640x480 foo.avi

К сожалению, я не могу получить волшебство ffmpeg заклинание совершенно верно, и оно не работает с

  libavutil     50.15. 1 / 50.15. 1
  libavcodec    52.72. 2 / 52.72. 2
  libavformat   52.64. 2 / 52.64. 2
  libavdevice   52. 2. 0 / 52. 2. 0
  libavfilter    1.19. 0 /  1.19. 0
  libswscale     0.11. 0 /  0.11. 0
  libpostproc   51. 2. 0 / 51. 2. 0
Output #0, avi, to 'out.avi':
    Stream #0.0: Video: flv, yuv420p, 640x480, q=2-31, 19660 kb/s, 90k tbn, 30 tbc
[image2pipe @ 0x1508640]max_analyze_duration reached
[image2pipe @ 0x1508640]Estimating duration from bitrate, this may be inaccurate
Input #0, image2pipe, from 'pipe:':
  Duration: N/A, bitrate: N/A
    Stream #0.0: Video: 0x0000, bgr8, 25 fps, 25 tbr, 25 tbn, 25 tbc
swScaler: 0x0 -> 640x480 is invalid scaling dimension
  • Захваченные кадры определенно имеют размер 640x480.
  • Я почти уверен, что порядок пикселей для типа изображения OpenCV (IplImage) - GBR, один байт на канал. По крайней мере, именно это, кажется, исходит от камеры.

Я не гуру ffmpeg. Кто-нибудь сделал это успешно?

25
задан BrianTheLion 5 October 2011 в 12:42
поделиться