Python 无法从QProcess将图像发送到ffmpeg标准输入
它不是在写png文件。我想将中心小部件保存到png文件。我有两个文件,一个是主文件,第二个是ui文件。链接具有ui文件 获取错误代码: QWindowsPipeWriter::写入失败。(句柄无效。) main.pyPython 无法从QProcess将图像发送到ffmpeg标准输入,python,windows,ffmpeg,pyqt5,Python,Windows,Ffmpeg,Pyqt5,它不是在写png文件。我想将中心小部件保存到png文件。我有两个文件,一个是主文件,第二个是ui文件。链接具有ui文件 获取错误代码: QWindowsPipeWriter::写入失败。(句柄无效。) main.py import sys from PyQt5.QtWidgets import QWidget from PyQt5 import QtCore, QtGui, QtWidgets from green import Ui_MainWindow class MyWindow(QtWi
import sys
from PyQt5.QtWidgets import QWidget
from PyQt5 import QtCore, QtGui, QtWidgets
from green import Ui_MainWindow
class MyWindow(QtWidgets.QMainWindow, Ui_MainWindow, QWidget):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
self.setupUi(self)
self.widger_screen()
def widger_screen(self):
self.process = QtCore.QProcess(app)
self.process.setProcessChannelMode(self.process.ForwardedChannels)
self.process.setOpenMode(self.process.WriteOnly)
self.process.start('ffmpeg',
['-y',
'-analyzeduration', '1000',
'-vcodec', 'png', '-i', '-',
'-vcodec', 'mpeg4',
'-qscale', '5', '-r', '24', 'video.avi',
"-loglevel", "debug"])
for i in range(100):
QWidget.grab(self.centralwidget).save(self.process, "PNG")
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
green.ui
您的代码存在不同的问题 首先,您必须指定图像的格式,因此正确的语法为:
QWidget.grab(self.centralwidget).save(process, "PNG")
事实上,在您的情况下,save()
将返回False
,而使用正确的格式现在将返回True
此外,您还需要最少的帧数,以确保ffmpeg有足够的数据来实际开始处理。该量以分析持续时间值表示,默认为5000000微秒(5秒)。由于您仅捕获100帧(少于4秒),这是不够的,因此请增加录制的帧数,或在选项开头附近添加analyzeduration
选项,使用较低的值(但仍高于0)
另一个问题(编辑后)是您错误输入了loglevel
选项。当从提示符/shell运行程序时,从输出中可以清楚地看到这一点:
Unrecognized option 'loglevel2'.
Error splitting the argument list: Option not found
虽然不会出现错误/异常,但结果是ffmpeg进程退出,无法写入输出文件
最后,一些考虑:
show()
之前完成的);我非常确定,有一些很好的解决方案可以使用线程将抓取的pixmap排队到stdout
,但您必须小心,因为QPixmap对象不是线程安全的;如果您想这样做,最好创建一个新的单独问题我想我做错了什么,因为它仍然不起作用。OES
save()
返回True?除了开始消息之外,您是否还看到ffmpeg的一些输出?(请不要添加答案,如果它只是说您仍然存在问题,注释用于此)save()返回True是的。我想我看不见。程序一开始就崩溃了。你能编辑你的问题吗?是的,我能。因为我是新来的,所以我必须看看怎么做
Unrecognized option 'loglevel2'.
Error splitting the argument list: Option not found