Getting realtime output from ffmpeg to be used in progress bar (PyQt4, stdout)

后端 未结 7 1118
感情败类
感情败类 2020-12-02 10:08

I\'ve looked at a number of questions but still can\'t quite figure this out. I\'m using PyQt, and am hoping to run ffmpeg -i file.mp4 file.avi and get the out

7条回答
  •  失恋的感觉
    2020-12-02 10:41

    You can also do it pretty clearly with PyQt4's QProcess (as asked in the original question) by connecting a slot from the QProcess to a QTextEdit or whatever. I'm still pretty new to python and pyqt but here's how I just managed to do it:

    import sys
    from PyQt4 import QtCore, QtGui
    
    class ffmpegBatch(QtGui.QWidget):
        def __init__(self):
            super(ffmpegBatch, self).__init__()
            self.initUI()
    
        def initUI(self):
            layout = QtGui.QVBoxLayout()
            self.edit = QtGui.QTextEdit()
            self.edit.setGeometry(300, 300, 300, 300)
            run = QtGui.QPushButton("Run process")
    
            layout.addWidget(self.edit)
            layout.addWidget(run)
    
            self.setLayout(layout)
    
            run.clicked.connect(self.run)
    
        def run(self):
            # your commandline whatnot here, I just used this for demonstration
            cmd = "systeminfo"
    
            proc = QtCore.QProcess(self)
            proc.setProcessChannelMode(proc.MergedChannels)
            proc.start(cmd)
            proc.readyReadStandardOutput.connect(lambda: self.readStdOutput(proc))
    
    
        def readStdOutput(self, proc):
            self.edit.append(QtCore.QString(proc.readAllStandardOutput()))
    
    def main():
        app = QtGui.QApplication(sys.argv)
        ex = ffmpegBatch()
        ex.show()
        sys.exit(app.exec_())
    
    if __name__ == '__main__':
        main()
    

提交回复
热议问题