Я хочу создать графическое приложение с двумя кнопками (старт / стоп), которое позволяет запускать подпроцесс (запуск) и останавливать его (остановка). (Я использую Python3, PyQt5 и ffmpeg) Процесс захватывает экран в видео и сохраняет его в mp4 с помощью команды ffmpeg для запуска команды POpen. Чтобы получить чистый вывод команды, ffmpeg использует 'q', которую я пишу с помощью stdin.
В простом сценарии это работает для меня, но я не могу заставить его работать внутри кнопок.
Мои знания очень просты, и, поскольку я ищу информацию, я не понимаю, что я делаю неправильно, я ценю любые комментарии, которые позволяют мне двигаться дальше.
Это мой код:
import sys
import subprocess
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
class Ventana(QWidget):
def __init__(self):
super().__init__()
# Button 1
pybutton = QPushButton('REC', self)
pybutton.clicked.connect(self.clickMethodB1)
pybutton.resize(50, 32)
pybutton.move(50, 50)
# BOTON 2
pybutton = QPushButton('STOP', self)
pybutton.clicked.connect(self.clickMethodB2)
pybutton.resize(100, 32)
pybutton.move(150, 50)
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('FFMPEG')
self.move(800, 400)
self.show()
def clickMethodB1(self):
global ffmpeg
filename_mp4 = 'c://tmp//output.mp4'
print('REC')
command = 'ffmpeg -f dshow -i video="screen-capture-recorder" '+ filename_mp4
ffmpeg = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='utf-8', shell=True)
def clickMethodB2(self):
print('STOP')
ffmpeg.stdin.write(str('q'))
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Ventana()
sys.exit(app.exec_())