在python中管道输入和输出ffmpeg

时间:2017-05-16 09:11:46

标签: python ffmpeg

我正在使用ffmpeg从base64编码图像列表创建视频,我将其导入ffmpeg

输出到文件(使用下面附带的代码)可以很好地工作,但我想要实现的是将输出变为Python变量 - 意味着管道输入和管道输出,但我似乎无法得到它工作

我目前的代码:

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

这导致mp4工作,但我想避免保存到本地。

运行相同的代码并将output更改为'-''pipe:1'并添加stdout=sp.PIPE会导致错误

  

[NULL @ 0x2236000]无法为'pipe:'

找到合适的输出格式

2 个答案:

答案 0 :(得分:1)

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.

答案 1 :(得分:0)

尝试在sp.Popen之后添加以下命令:

output, _ = pipe.communicate()

我认为您需要与打开的进程进行沟通。之后,您可以打印它以确保它起作用:

print(_)