Recherche avancée

Médias (9)

Mot : - Tags -/soundtrack

Autres articles (85)

  • Websites made ​​with MediaSPIP

    2 mai 2011, par

    This page lists some websites based on MediaSPIP.

  • Ajouter des informations spécifiques aux utilisateurs et autres modifications de comportement liées aux auteurs

    12 avril 2011, par

    La manière la plus simple d’ajouter des informations aux auteurs est d’installer le plugin Inscription3. Il permet également de modifier certains comportements liés aux utilisateurs (référez-vous à sa documentation pour plus d’informations).
    Il est également possible d’ajouter des champs aux auteurs en installant les plugins champs extras 2 et Interface pour champs extras.

  • Possibilité de déploiement en ferme

    12 avril 2011, par

    MediaSPIP peut être installé comme une ferme, avec un seul "noyau" hébergé sur un serveur dédié et utilisé par une multitude de sites différents.
    Cela permet, par exemple : de pouvoir partager les frais de mise en œuvre entre plusieurs projets / individus ; de pouvoir déployer rapidement une multitude de sites uniques ; d’éviter d’avoir à mettre l’ensemble des créations dans un fourre-tout numérique comme c’est le cas pour les grandes plate-formes tout public disséminées sur le (...)

Sur d’autres sites (18436)

  • doc : Add note about recent regression in AviSynth+

    29 octobre 2016, par Stephen Hutchinson
    doc : Add note about recent regression in AviSynth+
    

    Signed-off-by : Diego Biurrun <diego@biurrun.de>

    • [DBH] doc/general.texi
  • Anomalie #3930 : Moteur de recherche : combinaison de DEUX mots avec accents ne retourne rien

    18 septembre 2017, par - Equipement

    Je confirme que je constate le problème en SPIP 3.1.6 [23598] avec MYSQL 5.5.41 (tables MYISAM).

    En ajoutant, dans inc/recherche_to_array.php (ligne 57), le spip_log ci-dessous :

    spip_log("expression_recherche :".$methode.’ / ’.$q.’ / ’.$preg, _LOG_ERREUR) ;
    

    le résultat de la trace est :
    expression_recherche :REGEXP / ’secr.tariat g.n.ral|secr.tariat|g.n.ral’ / /secretariat general|secretariat|general/UimsSu

    Si dans inc/rechercher.php (SPIP 3.1.6 [23598]), je déplace les lignes suivantes :

            // tous les caracteres transliterables de $q sont remplaces par un joker
          // permet de matcher en SQL meme si on est sensible aux accents (SQLite)
          $q_t = $q ;
          for ($i = 0 ; $i < spip_strlen($q) ; $i++) 
              $char = spip_substr($q, $i, 1) ;
              if (!is_ascii($char)
                  and $char_t = translitteration($char)
                  and $char_t !== $char
              ) 
                  $q_t = str_replace($char, $is_preg ? "." : "_", $q_t) ;
              
          
    

    $q = $q_t ;

    dans la condition (if) juste en dessous :

        if (isset($GLOBALS[’connexions’][$options[’serveur’] ? $options[’serveur’] : 0][’type’])
            and strncmp($GLOBALS[’connexions’][$options[’serveur’] ? $options[’serveur’] : 0][’type’], ’sqlite’, 6) == 0
        ) 

    la recherche sur secrétariat général fonctionne et le résultat de la trace est :
    expression_recherche :REGEXP / ’secrétariat général|secrétariat|général’ / /secretariat general|secretariat|general/UimsSu

  • Dynamically created QImage frames to ffmpeg stdin using QThread

    11 mai 2021, par musicamante

    I am trying to create video files with ffmpeg using frames dynamically created on a separate thread.

    &#xA;

    While I can create those frames and store them on disk/memory, I'd like to avoid that passage since the amount/size of the frames can be high and many "jobs" could be created with different format or options. But, also importantly, I'd like to better understand the logic behind this, as I admit I've not a very deep knowledge on how thread/processing actually works.

    &#xA;

    Right now I'm trying to create the QProcess in the QThread object, and then run the image creation thread as soon as the process is started, but it doesn't seem to work : no file is created, and I don't even get any output from standard error (but I know I should, since I can get it if I don't use the thread).

    &#xA;

    Unfortunately, due to my little knowledge on how QProcess deals with threads and piping (and, obviously, all possible ffmpeg options), I really don't understand how can achieve this.

    &#xA;

    Besides obviously getting the output file created, the expected result is to be able to launch the encoding (and possibly queue more encodings in the meantime) while keeping the UI responding and get notifications of the current processing state.

    &#xA;

    import re&#xA;from PyQt5 import QtCore, QtGui, QtWidgets&#xA;&#xA;logRegExp = r&#x27;(?:(n:\s&#x2B;)(?P\d&#x2B;)\s).*(?:(pts_time:\s*)(?P<time>\d&#x2B;.\d*))&#x27;&#xA;&#xA;class Encoder(QtCore.QThread):&#xA;    completed = QtCore.pyqtSignal()&#xA;    frameDone = QtCore.pyqtSignal(object)&#xA;    def __init__(self, width=1280, height=720, frameCount=100):&#xA;        super().__init__()&#xA;        self.width = width&#xA;        self.height = height&#xA;        self.frameCount = frameCount&#xA;&#xA;    def start(self):&#xA;        self.currentLog = &#x27;&#x27;&#xA;        self.currentData = bytes()&#xA;        self.process = QtCore.QProcess()&#xA;        self.process.setReadChannel(self.process.StandardError)&#xA;        self.process.finished.connect(self.completed)&#xA;        self.process.readyReadStandardError.connect(self.stderr)&#xA;        self.process.started.connect(super().start)&#xA;        self.process.start(&#x27;ffmpeg&#x27;, [&#xA;            &#x27;-y&#x27;, &#xA;            &#x27;-f&#x27;, &#x27;png_pipe&#x27;, &#xA;            &#x27;-i&#x27;, &#x27;-&#x27;, &#xA;            &#x27;-c:v&#x27;, &#x27;libx264&#x27;, &#xA;            &#x27;-b:v&#x27;, &#x27;800k&#x27;, &#xA;            &#x27;-an&#x27;, &#xA;            &#x27;-vf&#x27;, &#x27;showinfo&#x27;,&#xA;            &#x27;/tmp/test.h264&#x27;, &#xA;        ])&#xA;&#xA;    def stderr(self):&#xA;        self.currentLog &#x2B;= str(self.process.readAllStandardError(), &#x27;utf-8&#x27;)&#xA;        *lines, self.currentLog = self.currentLog.split(&#x27;\n&#x27;)&#xA;        for line in lines:&#xA;            print(&#x27;STDERR: {}&#x27;.format(line))&#xA;            match = re.search(logRegExp, line)&#xA;            if match:&#xA;                data = match.groupdict()&#xA;                self.frameDone.emit(int(data[&#x27;frame&#x27;]))&#xA;&#xA;    def run(self):&#xA;        font = QtGui.QFont()&#xA;        font.setPointSize(80)&#xA;        rect = QtCore.QRect(0, 0, self.width, self.height)&#xA;        for frame in range(1, self.frameCount &#x2B; 1):&#xA;            img = QtGui.QImage(QtCore.QSize(self.width, self.height), QtGui.QImage.Format_ARGB32)&#xA;            img.fill(QtCore.Qt.white)&#xA;            qp = QtGui.QPainter(img)&#xA;            qp.setFont(font)&#xA;            qp.setPen(QtCore.Qt.black)&#xA;            qp.drawText(rect, QtCore.Qt.AlignCenter, &#x27;Frame {}&#x27;.format(frame))&#xA;            qp.end()&#xA;            img.save(self.process, &#x27;PNG&#x27;)&#xA;        print(&#x27;frame creation complete&#x27;)&#xA;&#xA;&#xA;class Test(QtWidgets.QWidget):&#xA;    def __init__(self):&#xA;        super().__init__()&#xA;        layout = QtWidgets.QVBoxLayout(self)&#xA;        self.startButton = QtWidgets.QPushButton(&#x27;Start&#x27;)&#xA;        layout.addWidget(self.startButton)&#xA;&#xA;        self.frameLabel = QtWidgets.QLabel()&#xA;        layout.addWidget(self.frameLabel)&#xA;&#xA;        self.process = Encoder()&#xA;        self.process.completed.connect(lambda: self.startButton.setEnabled(True))&#xA;        self.process.frameDone.connect(self.frameLabel.setNum)&#xA;        self.startButton.clicked.connect(self.create)&#xA;&#xA;    def create(self):&#xA;        self.startButton.setEnabled(False)&#xA;        self.process.start()&#xA;&#xA;&#xA;import sys&#xA;app = QtWidgets.QApplication(sys.argv)&#xA;test = Test()&#xA;test.show()&#xA;sys.exit(app.exec_())&#xA;</time>

    &#xA;

    If I add the following lines at the end of run(), then the file is actually created and I get the stderr output, but I can see that it's processed after the completion of the for cycle, which obviously is not the expected result :

    &#xA;

        self.process.closeWriteChannel()&#xA;    self.process.waitForFinished()&#xA;    self.process.terminate()&#xA;

    &#xA;

    Bonus : I'm on Linux, I don't know if it works differently on Windows (and I suppose it would work similarly on MacOS), but in any case I'd like to know if there are differences and how to possibly deal with them.

    &#xA;