Python 视频处理

标签 python opencv video ffmpeg

我是 python 新手,我想做的是接收 UDP 流(来自 VLC、H264 的流)并对视频进行任何修改并显示它(Python 2.7)。

我使用了openCV(openCV 2.4.9),我可以接收视频帧并对其进行修改。现在我需要做的是使用这些帧创建一个视频文件并显示它,我不需要同时保存帧和视频。

我尝试了 FFMPEG、FFPLAY,它适用于保存的视频帧。

如果您能指出这些步骤或任何其他替代方案,我将不胜感激。

首先对我早期的解释感到抱歉。这是我尝试过的:

  • 接收 UDP 视频流。
  • 修改视频流:我使用 openCV 并从流中获取视频帧并对其进行修改使其正常工作。
    cap = cv2.VideoCapture("udp://224.1.1.1:1234")
    while(cap.isOpened()):
        success, image = cap.read()
        ...
        cv2.imwrite("./frames/frame%d.jpeg" %count, image)
        count += 1
    
  • 创建视频和显示:我尝试了 FFMPEG 和 FFPLAY
    command1 = 'ffmpeg -i ./frames/frame%d.jpeg -c:v libx264 -vf fps=23.97 -pix_fmt yuv420p -f rawvideo -'
    command2 = 'ffplay -'
    
    pipe1 = sp.Popen(command1,stdout=sp.PIPE)  
    pipe2 = sp.Popen(command2,stdin=pipe1.stdout)
    

  • 这些步骤有效,但我无法物理保存帧或视频文件。我需要做的是在第 2 步之后直接将视频帧传递给 FFMPEG,FFPLAY 播放而不将它们保存在帧文件夹中。

    最佳答案

    command1 = 'ffmpeg -y -f image2pipe -vcodec mjpeg -r 23.97 -i - -vcodec mpeg4 -pix_fmt yuv420p -c:v libx264 -r 23.97 -f avi - '
    command2 = 'ffplay -'
    
    pipe1 = sp.Popen(command1,stdin=sp.PIPE,stdout=sp.PIPE)
    pipe2 = sp.Popen(command2,stdin=pipe1.stdout)
    
    
    While(cap.isOpened()):
        success,raw_image = cap.read()
        pil_im = Image.fromarray(raw_image)
        pil_im.save(pipe1.stdin ,'JPEG')
    

    这对我有用,但有一些颜色问题。

    关于Python 视频处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24678635/

    相关文章:

    python - 在keras中对VGG应用ZCA白化

    python - 为什么 flask 的 jsonify 方法很慢?

    python - 在 Python 中临时保存文件?

    c++ - 无法使用 cmake 构建 Opencv 项目

    opencv - OpenCV读一个框架

    video - 从 go 服务器有效地流式传输大文件(视频)

    ubuntu - FFmpeg 无法在 Ubuntu 12.04 上访问 Dropbox 中的文件

    javascript - 就浏览器兼容性而言,iram 或 <video> 哪个更好地播放视频(包括 YouTube 和非 YouTube)?

    python - Windows路径中的百分号

    python - 使用 pySpark 中第二列的值进行行转置