【问题标题】:Piping input AND output of ffmpeg in pythonpython中ffmpeg的管道输入和输出
【发布时间】:2017-05-16 09:11:45
【问题描述】:

我正在使用ffmpeg 创建一个视频,从我通过管道传输到ffmpeg 的base64 编码图像列表中。

输出到文件(使用下面的附加代码)完美无缺,但我想要实现的是将输出改为 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] 无法为“管道:”找到合适的输出格式

【问题讨论】:

    标签: python ffmpeg


    【解决方案1】:

    FFmpeg 通过检查输出扩展来猜测输出复用器。对于管道,它不存在,因此必须明确设置。在输出前添加'-f', 'image2pipe'。

    【讨论】:

    • 无法帮助您处理 python 部分。只有ffmpeg。
    • 无论如何,谢谢你,现在似乎工作了。我会看看我是否确实抓住了它并验证它是视频,如果是,我会接受
    • 似乎它永远卡在`Stream mapping: Stream #0:0 -> #0:0 (png (native) -> png (native)) 部分
    • 需要查看完整的 ffmpeg 控制台。
    • 您的输入终止了吗?
    【解决方案2】:

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

    output, _ = pipe.communicate()
    

    我认为您需要与打开的进程进行通信。之后,您可以打印它以确保它有效:

    print(_)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      • 2015-11-16
      • 2010-09-26
      • 2022-10-18
      • 2021-01-10
      • 1970-01-01
      • 2017-09-24
      相关资源
      最近更新 更多