Pipe opencv images to ffmpeg using python

后端 未结 2 572
深忆病人
深忆病人 2021-02-04 14:22

How can I pipe openCV images to ffmpeg (running ffmpeg as a subprocess)? (I am using spyder/anaconda)

I am reading frames from a video file and do some processing on eac

2条回答
  •  旧巷少年郎
    2021-02-04 14:52

    I had similar problem once. I opened an issue on Github, turns out it may be a platform issue.

    Related to your question, you can as well pipe OpenCV images to FFMPEG. Here's a sample code:

    # This script copies the video frame by frame
    import cv2
    import subprocess as sp
    
    input_file = 'input_file_name.mp4'
    output_file = 'output_file_name.mp4'
    
    cap = cv2.VideoCapture(input_file)
    ret, frame = cap.read()
    height, width, ch = frame.shape
    
    ffmpeg = 'FFMPEG'
    dimension = '{}x{}'.format(width, height)
    f_format = 'bgr24' # remember OpenCV uses bgr format
    fps = str(cap.get(cv2.CAP_PROP_FPS))
    
    command = [ffmpeg,
            '-y',
            '-f', 'rawvideo',
            '-vcodec','rawvideo',
            '-s', dimension,
            '-pix_fmt', 'bgr24',
            '-r', fps,
            '-i', '-',
            '-an',
            '-vcodec', 'mpeg4',
            '-b:v', '5000k',
            output_file ]
    
    proc = sp.Popen(command, stdin=sp.PIPE, stderr=sp.PIPE)
    
    while True:
        ret, frame = cap.read()
        if not ret:
            break
        proc.stdin.write(frame.tostring())
    
    cap.release()
    proc.stdin.close()
    proc.stderr.close()
    proc.wait()
    

提交回复
热议问题