2014-07-10 2 views
0

저는 파이썬에서 새롭고, UDP 스트림 (VLC, H264에서 스트리밍)을 수신하고 비디오를 수정하고 (파이썬 2.7) 표시하려고합니다. openCV (openCV 2.4)를 사용했습니다. 9) 비디오 프레임을 수신 할 수 있고 또한 수정할 수 있습니다. 이제는 이러한 프레임을 사용하여 비디오 파일을 만들고 표시해야하므로 프레임과 비디오를 모두 저장할 필요가 없습니다.파이썬 비디오 조작

저는 FFMPEG, FFPLAY를 시도했으며 저장된 비디오 프레임에서 작동합니다.

단계 또는 다른 대안을 지적 할 수 있으면 감사하겠습니다.

감사합니다.

먼저 내 설명에 대해 일찍 미안합니다.

1. 수신 UDP 비디오 스트림.

2. 비디오 스트림을 수정하십시오. 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 

3. 비디오 및 디스플레이 만들기. 나는 작업 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 단계 후 direcly FFMFEG, FFPLAY 프레임 폴더에 저장하지 않고 재생할 수있는 비디오 프레임을 통과해야합니다.

감사합니다.

+0

[cv2.VideoWriter] (http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videowriter) 및 [샘플] (https://github.com/Itseez/opencv/blob /2.4/samples/python2/turing.py) – berak

답변

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') 

이 방법은 저에게는 효과적이지만 일부 색상 문제는 있습니다.