【发布时间】:2019-07-26 19:52:17
【问题描述】:
我正在尝试在 Python 中管道输出来自 FFmpeg 的输出。我正在从视频采集卡中读取图像,并且成功地使用 dshow 从命令行将其读取到输出文件中。我正在尝试将图像从卡中抓取到我的 OpenCv 代码中,以便能够进一步使用数据。不幸的是,当我输出图像时,我只得到了视频的显示,如链接所示:
链接:s000.tinyupload.com/?file_id=15940665795196022618。
我使用的代码如下图:
import cv2
import subprocess as sp
import numpy
import sys
import os
old_stdout=sys.stdout
log_file=open("message.log","w")
sys.stdout=log_file
FFMPEG_BIN = "C:/ffmpeg/bin/ffmpeg.exe"
command = [ FFMPEG_BIN, '-y',
'-f', 'dshow', '-rtbufsize', '100M',
'-i', 'video=Datapath VisionAV Video 01' ,
'-video_size', '640x480',
'-pix_fmt', 'bgr24', '-r','25',
'-f', 'image2pipe', '-' ]
pipe = sp.Popen(command, stdout = sp.PIPE, bufsize=10**8)
while True:
# Capture frame-by-frame
raw_image = pipe.stdout.read(640*480*3)
# transform the byte read into a numpy array
image = numpy.frombuffer(raw_image, dtype='uint8')
print(image)
image = image.reshape((480,640,3))
if image is not None:
cv2.imshow('Video', image)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
pipe.stdout.flush()
sys.stdout=old_stdout
log_file.close()
cv2.destroyAllWindows()
请为我提供一些解决此问题的建议。非常感谢您的帮助。
【问题讨论】:
-
@Muhammad Furqan 在 ffmpeg 命令中的“-”之前最后添加 -f image2pipe 似乎并没有给我视频。您还有其他建议吗?
-
尝试修改命令如下
[ FFMPEG_BIN, '-y', '-f', 'dshow', '-rtbufsize', '100M', '-i', 'video=Datapath VisionAV Video 01' ,'-f', 'image2pipe', '-video_size', '640x480', '-pix_fmt', 'bgr24', '-r','25', '-' ]