【问题标题】:Python: How to use ffmpeg to read videos(video file or rtsp) and display them using OpenCV?Python:如何使用 ffmpeg 读取视频(视频文件或 rtsp)并使用 OpenCV 显示它们?
【发布时间】:2019-08-19 08:46:07
【问题描述】:

我知道如果我们要读取视频文件或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不同的在线文档很少。所以请帮忙。

【问题讨论】:

  • 这是我自己编的一些伪代码。我想知道如何使用 ffmpeg 读取视频并使用 opencv 处理获得的图像。

标签: python opencv ffmpeg


【解决方案1】:

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

所以我建议使用 subprocess 并尝试这样的事情:

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 读取输出的图像了。

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

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

【讨论】:

    猜你喜欢
    • 2017-05-17
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    相关资源
    最近更新 更多