Python视频处理
我刚开始学Python,想做的是接收UDP视频流(从VLC播放,格式是H264),然后对视频进行一些修改并显示出来(使用Python 2.7)。
我用的是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)
这些步骤都能正常工作,但我无法将帧或视频文件实际保存下来。我需要做的是在第二步之后,直接将视频帧传递给FFMPEG和FFPLAY进行播放,而不需要将它们保存到帧文件夹中。
2 个回答
0
你可以使用 cv2.imshow() 直接显示你处理过的画面,而不是把它们传给 ffplay 或 ffmpeg。比如说,你可以直接在代码里显示这些画面,而不是先把它们写入文件。
import cv2
cap = cv2.VideoCapture("udp://224.1.1.1:1234")
while(cap.isOpened()):
success,image = cap.read()
......
......
cv2.imshow("Video", image)
1
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')
这个对我来说有效,但有一些颜色问题。