python ffmpeg pipe,管道的ffmpeg的输入和输出在python

I'm using ffmpeg to create a video, from a list of base64 encoded images that I pipe into ffmpeg.

Outputting to a file (using the attached code below) works perfectly, but what I would like to achieve is to get the output to a Python variable instead - meaning piping input and piping output but I can't seem to get it to work

My current code:

output = os.path.join(screenshots_dir, 'video1.mp4')

cmd_out = ['ffmpeg',

'-y', # (optional) overwrite output file if it exists

'-f', 'image2pipe',

'-vcodec', 'png',

'-r', str(fps), # frames per second

'-i', '-', # The input comes from a pipe

'-vcodec', 'png',

'-qscale', '0',

output]

pipe = sp.Popen(cmd_out, stdin=sp.PIPE)

for screenshot in screenshot_list:

im = Image.open(BytesIO(base64.b64decode(screenshot)))

im.save(pipe.stdin, 'PNG')

pipe.stdin.close()

pipe.wait()

This results in a working mp4, but I would like to avoid saving to local.

Running the same code with changing output to '-' or 'pipe:1' and adding stdout=sp.PIPE results in an error

[NULL @ 0x2236000] Unable to find a suitable output format for 'pipe:'

解决方案

FFmpeg guesses the output muxer by checking the output extension. With a pipe, that doesn't exist, so it has to be expressly set. Add '-f', 'image2pipe' just before output.

你可能感兴趣的:(python,ffmpeg,pipe)