Python:如何使用ffmpeg读取视频(视频文件或rtsp)并使用OpenCV显示它们?

时间:2019-08-19 08:46:07

标签: python opencv ffmpeg

我知道,如果我们想读取视频文件或USB摄像机或rtsp流,则可以使用cv2.VideoCapture
但是由于某种原因,我想使用ffmpeg来做事情,并使用opencv处理获得的图像。因此伪代码为:

import cv2
import ffmpeg

videoFile = 'XXX.mp4'

video = ffmpeg.XXX(videoFile)

while True:
    frame = video.read() # this read() function is made up by me
    frameCV = ffmpeg2cv(frame) # this ffmpeg2cv() function is made up by me

    cv2.imshow('frame', frameCV)

我搜索了类似https://github.com/kkroening/ffmpeg-python的内容。但是我仍然不知道该怎么做。我认为ffmpeg太难了,很少有在线文档不像opencv。所以请帮忙。

1 个答案:

答案 0 :(得分:0)

这是我在以下主题中发现的: https://www.bugcodemaster.com/article/extract-images-frame-frame-video-file-using-ffmpeg 他们提出一个呼叫,每秒提取一张图像,称为:fps = 1 他们在下面建议如何提取每个帧,例如:-vf select = eq(pict_type \,I)

因此,我建议使用子流程并尝试如下操作:

import subprocess

time = 200  # of your movie
frame_rate = 50
pathToFfmpeg = "SOME\\PATH"
pathToInput = "ANOTHER\\PATH"
pathToOuput = "YET\\ANOTHER\\PATH"

proc = subprocess.run([pathToFfmeg + "\\ffmpeg.exe",
                       "-framerate", str(frame_rate),
                       "-loglevel", "panic",  # Suppress Log
                       "-i", pathToInput + "\\SomeName.avi",

                      # Now copying their code
                      "-vf", "select=eq(pict_type\,I)", 
                      "-vsync", "vfr", pathToOuput + "\\Name.jpg",  
                      "-hide_banner"])  # Specify Output

然后您可以使用opencv读取输出图像。

注意:您需要所有“”作为子流程

选择包含计数器/迭代器的输出名称。