gpt4 book ai didi

python - 使用 opencv 和 ffmpeg 制作视频。如何找到合适的颜色格式?

转载 作者:太空狗 更新时间:2023-10-29 18:25:51 26 4
gpt4 key购买 nike

我有一个用 python、opencv 和 ffmpeg 构建的网络摄像头录像机程序

它工作正常,除了视频的颜色比实际颜色更蓝。问题似乎来自图像的颜色格式。

似乎 OpenCv 提供的是 BGR 图像,而 ffmpeg+libx264 提供的是 YUV420p。我读过 YUV420p 对应于 YCbCr。

opencv 没有从 BGR 到 YCbCr 的转换。它只有一个到 YCrCb 的转换。

我进行了一些搜索并尝试了不同的替代方法,尝试将 opencv 图像转换为适用于 ffmpeg+libx264 的图像。没有一个在工作。在这一点上,我有点迷茫,如果有任何可以帮助我解决这个颜色问题的指示,我将不胜感激。

最佳答案

没错,OpenCV 的默认像素格式是BGR

ffmpeg 端的等效格式为 BGR24,因此如果您不想,则无需将其转换为 YUV420p。

This post展示了如何使用 Python 应用程序从网络摄像头捕获帧并将帧写入 stdout。目的是在 cmd 行上调用此应用程序并将结果直接通过管道传输到 ffmpeg 应用程序,后者将帧存储在磁盘上。确实很聪明!

捕获.py:

import cv, sys

cap = cv.CaptureFromCAM(0)
if not cap:
sys.stdout.write("failed CaptureFromCAM")

while True :
if not cv.GrabFrame(cap) :
break

frame = cv.RetrieveFrame(cap)
sys.stdout.write( frame.tostring() )

而要在 shell 上执行的命令是:

python capture.py | ffmpeg -f rawvideo -pix_fmt bgr24 -s 640x480 -r 30 -i - -an -f avi -r 30 foo.avi

Where:

  • -r gives the frame rate coming off the camera
  • -an says "don't encode audio"

我在我的 Mac OS X 上用 OpenCV 2.4.2 测试了这个解决方案。

编辑:

如果您还没有尝试过从相机录制并使用 OpenCV 将视频写入磁盘上的 mp4 文件,我们开始吧:

import cv, sys

cap = cv.CaptureFromCAM(0) # 0 is for /dev/video0
if not cap:
sys.stdout.write("!!! Failed CaptureFromCAM")
sys.exit(1)

frame = cv.RetrieveFrame(cap)
if not frame:
sys.stdout.write("!!! Failed to retrieve first frame")
sys.exit(1)

# Unfortunately, the following instruction returns 0
#fps = cv.GetCaptureProperty(cap, cv.CV_CAP_PROP_FPS)
fps = 25.0 # so we need to hardcode the FPS
print "Recording at: ", fps, " fps"

frame_size = cv.GetSize(frame)
print "Video size: ", frame_size

writer = cv.CreateVideoWriter("out.mp4", cv.CV_FOURCC('F', 'M', 'P', '4'), fps, frame_size, True)
if not writer:
sys.stdout.write("!!! Error in creating video writer")
sys.exit(1)


while True :
if not cv.GrabFrame(cap) :
break
frame = cv.RetrieveFrame(cap)
cv.WriteFrame(writer, frame)

cv.ReleaseVideoWriter(writer)
cv.ReleaseCapture(cap)

我已经在 Mac OS X 和 OpenCV 2.4.2 上使用 Python 2.7 对此进行了测试。

关于python - 使用 opencv 和 ffmpeg 制作视频。如何找到合适的颜色格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12503368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com