【问题标题】:Python subprocess.Popen + ffmpeg breaks terminal inputPython subprocess.Popen + ffmpeg 中断终端输入
【发布时间】:2021-03-27 11:32:51
【问题描述】:

我正在编写一个模块来从视频中创建随机屏幕截图,并使用subprocess.Popen 并行运行多个命令,但这会导致终端在 python 程序完成运行后拒绝显示任何输入。但它仍然接受从键盘给出的大多数输入,只是不显示它。

只有当我输入reset 命令终端才能正常工作 这发生在带有 putty 和其他 ssh 客户端的 ssh 上,甚至在 windows 上带有 powershell 的 ssh 并直接在带有 VNC 的终端上运行

但是没有 ssh 直接在 windows 上运行相同的命令 ssh 可以正常工作并且输入是可见的

这是发生了什么的 gif 示例

以及复制它的代码

#!/usr/bin/env python3.8
from subprocess import Popen

def create_screenshots():

    commands = ['ffmpeg -hide_banner -loglevel panic -ss 329  -i "/home/user/file.mkv" -y -vframes 1   "/home/user/file.329.frame.png"',
                'ffmpeg -hide_banner -loglevel panic -ss 312  -i "/home/user/file.mkv" -y -vframes 1   "/home/user/file.312.frame.png"',
                'ffmpeg -hide_banner -loglevel panic -ss 533  -i "/home/user/file.mkv" -y -vframes 1   "/home/user/file.533.frame.png"',
                'ffmpeg -hide_banner -loglevel panic -ss 444  -i "/home/user/file.mkv" -y -vframes 1   "/home/user/file.444.frame.png"',
                'ffmpeg -hide_banner -loglevel panic -ss 411  -i "/home/user/file.mkv" -y -vframes 1   "/home/user/file.411.frame.png"',
                'ffmpeg -hide_banner -loglevel panic -ss 413  -i "/home/user/file.mkv" -y -vframes 1   "/home/user/file.413.frame.png"']
    screenshot_files = []
    processes = [Popen(command, shell=True) for command in commands]
    for process in processes:
        process.wait()
    
    return screenshot_files


create_screenshots()

【问题讨论】:

    标签: python python-3.x ffmpeg subprocess popen


    【解决方案1】:

    在我发布问题后,经过数周的搜索终于找到了答案

    这个答案就是我想要的 https://stackoverflow.com/a/59148094

    不确定是否有更好的方法来使用 Popen 处理此问题,但将 -nostdin 标志添加到 ffmpeg 命令解决了我遇到的问题

    【讨论】:

      猜你喜欢
      • 2019-07-20
      • 2016-10-29
      • 1970-01-01
      • 2017-06-18
      • 2023-03-07
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多