Как исправить: приложение с графическим интерфейсом, которое управляет простой командой ffmpeg с python - PullRequest
0 голосов
/ 09 октября 2019

Я хочу создать графическое приложение с двумя кнопками (старт / стоп), которое позволяет запускать подпроцесс (запуск) и останавливать его (остановка). (Я использую 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_())
...