
Recherche avancée
Médias (1)
-
Bug de détection d’ogg
22 mars 2013, par
Mis à jour : Avril 2013
Langue : français
Type : Video
Autres articles (45)
-
La file d’attente de SPIPmotion
28 novembre 2010, parUne file d’attente stockée dans la base de donnée
Lors de son installation, SPIPmotion crée une nouvelle table dans la base de donnée intitulée spip_spipmotion_attentes.
Cette nouvelle table est constituée des champs suivants : id_spipmotion_attente, l’identifiant numérique unique de la tâche à traiter ; id_document, l’identifiant numérique du document original à encoder ; id_objet l’identifiant unique de l’objet auquel le document encodé devra être attaché automatiquement ; objet, le type d’objet auquel (...) -
Websites made with MediaSPIP
2 mai 2011, parThis page lists some websites based on MediaSPIP.
-
Creating farms of unique websites
13 avril 2011, parMediaSPIP platforms can be installed as a farm, with a single "core" hosted on a dedicated server and used by multiple websites.
This allows (among other things) : implementation costs to be shared between several different projects / individuals rapid deployment of multiple unique sites creation of groups of like-minded sites, making it possible to browse media in a more controlled and selective environment than the major "open" (...)
Sur d’autres sites (9698)
-
QTableWidget and QProcess - update table based on multiple process results
9 mars 2017, par SpencerI have a python program that runs through a QTableWidget and for each item it runs a QProcess (an FFMPEG process to be exact). What I’m trying to do is update the "parent" cell when the process completes. Right now there is a for loop that goes through each row and launches a process for each, and connects the finished signal of that process to a "finished" function, which updates the QTableWidget cell. I’m just having trouble properly telling the function WHICH sell to update - right now I am passing it the index of the current row (seeing as it is being spawned by the for loop) but what happens is by the time the processes start to finish it will only get the last row in the table... I’m quite new to Python and PyQt so it is possible there is some fundamental thing I have wrong here !
I tried passing the actual QTabelWidgetItem instead of the index but I got this error : "RuntimeError : wrapped C/C++ object of type QTableWidgetItem has been deleted"
My code, the function "finished" and line #132 are the relevant ones :
import sys, os, re
from PyQt4 import QtGui, QtCore
class BatchTable(QtGui.QTableWidget):
def __init__(self, parent):
super(BatchTable, self).__init__(parent)
self.setAcceptDrops(True)
self.setColumnCount(4)
self.setColumnWidth(1,50)
self.hideColumn(3)
self.horizontalHeader().setStretchLastSection(True)
self.setHorizontalHeaderLabels(QtCore.QString("Status;Alpha;File;Full Path").split(";"))
self.doubleClicked.connect(self.removeProject)
def removeProject(self, myItem):
row = myItem.row()
self.removeRow(row)
def dragEnterEvent(self, e):
if e.mimeData().hasFormat('text/uri-list'):
e.accept()
else:
print "nope"
e.ignore()
def dragMoveEvent(self, e):
e.accept()
def dropEvent(self, e):
if e.mimeData().hasUrls:
for url in e.mimeData().urls():
chkBoxItem = QtGui.QTableWidgetItem()
chkBoxItem.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
chkBoxItem.setCheckState(QtCore.Qt.Unchecked)
rowPosition = self.rowCount()
self.insertRow(rowPosition)
self.setItem(rowPosition, 0, QtGui.QTableWidgetItem("Ready"))
self.setItem(rowPosition, 1, chkBoxItem)
self.setItem(rowPosition, 2, QtGui.QTableWidgetItem(os.path.split(str(url.toLocalFile()))[1]))
self.setItem(rowPosition, 3, QtGui.QTableWidgetItem(url.toLocalFile()))
self.item(rowPosition, 0).setBackgroundColor(QtGui.QColor(80, 180, 30))
class ffmpegBatch(QtGui.QWidget):
def __init__(self):
super(ffmpegBatch, self).__init__()
self.initUI()
def initUI(self):
self.edit = QtGui.QTextEdit()
cmdGroup = QtGui.QGroupBox("Commandline arguments")
fpsLbl = QtGui.QLabel("FPS:")
self.fpsCombo = QtGui.QComboBox()
self.fpsCombo.addItem("29.97")
self.fpsCombo.addItem("23.976")
hbox1 = QtGui.QHBoxLayout()
hbox1.addWidget(fpsLbl)
hbox1.addWidget(self.fpsCombo)
cmdGroup.setLayout(hbox1)
saveGroup = QtGui.QGroupBox("Output")
self.outputLocation = QtGui.QLineEdit()
self.browseBtn = QtGui.QPushButton("Browse")
saveLocationBox = QtGui.QHBoxLayout()
# Todo: add "auto-step up two folders" button
saveLocationBox.addWidget(self.outputLocation)
saveLocationBox.addWidget(self.browseBtn)
saveGroup.setLayout(saveLocationBox)
runBtn = QtGui.QPushButton("Run Batch Transcode")
mainBox = QtGui.QVBoxLayout()
self.table = BatchTable(self)
# TODO: add "copy from clipboard" feature
mainBox.addWidget(self.table)
mainBox.addWidget(cmdGroup)
mainBox.addWidget(saveGroup)
mainBox.addWidget(runBtn)
mainBox.addWidget(self.edit)
self.setLayout(mainBox)
self.setGeometry(300, 300, 600, 500)
self.setWindowTitle('FFMPEG Batch Converter')
# triggers/events
runBtn.clicked.connect(self.run)
def RepresentsInt(self, s):
try:
int(s)
return True
except ValueError:
return False
def run(self):
if (self.outputLocation.text() == ''):
return
for projIndex in range(self.table.rowCount()):
# collect some data
ffmpeg_app = "C:\\Program Files\\ffmpeg-20150702-git-03b2b40-win64-static\\bin\\ffmpeg"
frameRate = self.fpsCombo.currentText()
inputFile = self.table.model().index(projIndex,3).data().toString()
outputPath = self.outputLocation.text()
outputPath = outputPath.replace("/", "\\")
# format the input for ffmpeg
# find how the exact number range, stored as 'd'
imageName = os.path.split(str(inputFile))[1]
imageName, imageExt = os.path.splitext(imageName)
length = len(imageName)
d = 0
while (self.RepresentsInt(imageName[length-2:length-1]) == True):
length = length-1
d = d+1
inputPath = os.path.split(str(inputFile))[0]
inputFile = imageName[0:length-1]
inputFile = inputPath + "/" + inputFile + "%" + str(d+1) + "d" + imageExt
inputFile = inputFile.replace("/", "\\")
# format the output
outputFile = outputPath + "\\" + imageName[0:length-2] + ".mov"
# build the commandline
cmd = '"' + ffmpeg_app + '"' + ' -y -r ' + frameRate + ' -i ' + '"' + inputFile + '"' + ' -vcodec dnxhd -b:v 145M -vf colormatrix=bt601:bt709 -flags +ildct ' + '"' + outputFile + '"'
# launch the process
proc = QtCore.QProcess(self)
proc.finished.connect(lambda: self.finished(projIndex))
proc.setProcessChannelMode(proc.MergedChannels)
proc.start(cmd)
proc.readyReadStandardOutput.connect(lambda: self.readStdOutput(proc, projIndex, 100))
self.table.setItem(projIndex, 0, QtGui.QTableWidgetItem("Running..."))
self.table.item(projIndex, 0).setBackgroundColor(QtGui.QColor(110, 145, 30))
def readStdOutput(self, proc, projIndex, total):
currentLine = QtCore.QString(proc.readAllStandardOutput())
currentLine = str(currentLine)
frameEnd = currentLine.find("fps", 0, 15)
if frameEnd != -1:
m = re.search("\d", currentLine)
if m:
frame = currentLine[m.start():frameEnd]
percent = (float(frame)/total)*100
print "Percent: " + str(percent)
self.edit.append(str(percent))
self.table.setItem(projIndex, 0, QtGui.QTableWidgetItem("Encoded: " + str(percent) + "%"))
def finished(self, projIndex):
# TODO: This isn't totally working properly for multiple processes (seems to get confused)
print "A process completed"
print self.sender().readAllStandardOutput()
if self.sender().exitStatus() == 0:
self.table.setItem(projIndex, 0, QtGui.QTableWidgetItem("Encoded"))
self.table.item(projIndex, 0).setBackgroundColor(QtGui.QColor(45, 145, 240))
def main():
app = QtGui.QApplication(sys.argv)
ex = ffmpegBatch()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()(And yes I do know that my percentage update is totally wrong right now, still working on that...)
-
Revision 33331 : simplifier les petitions : le tableau des signatures utilise les classe ...
27 novembre 2009, par cedric@… — Logsimplifier les petitions : le tableau des signatures utilise les classe generiques table.spip et autre qui lui permet d’etre par defaut dans le theme. Les class specifiques sur chaque element restent utilisables pour affiner si (...)
-
Live streaming OBS -> Apache HTTPD/FFmpeg -> native (browser) HTML5 video player at personal web site [closed]
20 mai 2022, par UzgraphIs it possible to broadcast from OBS studio to the personal web site and the video stream from OBS was received by Apache or FFMpeg, then saved as a video file, and the video file was available on the web site through the HTML5 video player tag ?