Python subprocess.Popen + ffmpeg 中断终端输入
Python subprocess.Popen + ffmpeg breaks terminal input
我正在编写一个模块来从视频创建随机屏幕截图并并行使用 subprocess.Popen
到 运行 多个命令,但这导致终端在 [=26= 后拒绝显示任何输入] 程序完成运行ning。但它仍然接受来自键盘的大部分输入,只是不显示它。
只有当我输入 reset
命令时,终端才能正常工作
这发生在带有 putty 的 ssh 上,其他 ssh 客户端甚至是 windows 上带有 powershell 的 ssh,并直接 运行ning 在带有 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()
经过数周的搜索,在我发布问题后终于找到了答案
这个答案正是我要找的
不确定是否有更好的方法来使用 Popen 处理此问题,但向 ffmpeg 命令添加 -nostdin
标志解决了我遇到的问题
我正在编写一个模块来从视频创建随机屏幕截图并并行使用 subprocess.Popen
到 运行 多个命令,但这导致终端在 [=26= 后拒绝显示任何输入] 程序完成运行ning。但它仍然接受来自键盘的大部分输入,只是不显示它。
只有当我输入 reset
命令时,终端才能正常工作
这发生在带有 putty 的 ssh 上,其他 ssh 客户端甚至是 windows 上带有 powershell 的 ssh,并直接 运行ning 在带有 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()
经过数周的搜索,在我发布问题后终于找到了答案
这个答案正是我要找的
不确定是否有更好的方法来使用 Popen 处理此问题,但向 ffmpeg 命令添加 -nostdin
标志解决了我遇到的问题