Python subprocess.Popen + ffmpeg 中断终端输入

Bar*_*uit 3 python subprocess ffmpeg popen python-3.x

我正在编写一个模块来从视频中创建随机屏幕截图,并用于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()
Run Code Online (Sandbox Code Playgroud)

Bar*_*uit 5

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

这个答案就是我正在寻找的 /sf/answers/4140366611/

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