我是 python 新手,我想做的是接收 UDP 流(来自 VLC、H264 的流)并对视频进行任何修改并显示它(Python 2.7)。
我使用了openCV(openCV 2.4.9),我可以接收视频帧并对其进行修改。现在我需要做的是使用这些帧创建一个视频文件并显示它,我不需要同时保存帧和视频。
我尝试了 FFMPEG、FFPLAY,它适用于保存的视频帧。
如果您能指出这些步骤或任何其他替代方案,我将不胜感激。
首先对我早期的解释感到抱歉。这是我尝试过的:
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
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/