Recherche avancée

Médias (2)

Mot : - Tags -/media

Autres articles (65)

  • Personnaliser les catégories

    21 juin 2013, par

    Formulaire de création d’une catégorie
    Pour ceux qui connaissent bien SPIP, une catégorie peut être assimilée à une rubrique.
    Dans le cas d’un document de type catégorie, les champs proposés par défaut sont : Texte
    On peut modifier ce formulaire dans la partie :
    Administration > Configuration des masques de formulaire.
    Dans le cas d’un document de type média, les champs non affichés par défaut sont : Descriptif rapide
    Par ailleurs, c’est dans cette partie configuration qu’on peut indiquer le (...)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

  • Librairies et binaires spécifiques au traitement vidéo et sonore

    31 janvier 2010, par

    Les logiciels et librairies suivantes sont utilisées par SPIPmotion d’une manière ou d’une autre.
    Binaires obligatoires FFMpeg : encodeur principal, permet de transcoder presque tous les types de fichiers vidéo et sonores dans les formats lisibles sur Internet. CF ce tutoriel pour son installation ; Oggz-tools : outils d’inspection de fichiers ogg ; Mediainfo : récupération d’informations depuis la plupart des formats vidéos et sonores ;
    Binaires complémentaires et facultatifs flvtool2 : (...)

Sur d’autres sites (12698)

  • Freeze when writing ffmpeg execution result to io.Pipe

    7 novembre 2023, par alex

    I am writing a wrapper to work with exec.Cmd to work with io.Pipe. The wrapper is intended to simplify work with the file system, I want to convert a video, write the result of the conversion to io.Pipe, read it in the goroutine and transfer it to make a preview of the new converted file. For this purpose I use FFmpeg. But I've encountered a problem, when I start the test the execution just hangs and I can't get any result, but there are no errors, everything just hangs.

    


    CmdRunner source code

    


    type CmdRunner struct {
    commander Commander
    StdIn io.ReadCloser
    StdoutWriter io.WriteCloser
    StdErrWriter io.Writer
}

func (c *CmdRunner) RunByPipe(ctx context.Context) error {
    //done := make(chan error)
    name, args := c.commander.Command()
    cmd := exec.CommandContext(ctx, name, args...)

    if c.StdIn != nil {
        fmt.Print("RunByPipe STDIN\n")
        cmd.Stdin = c.StdIn
    }

    if c.StdoutWriter != nil {
        fmt.Print("RunByPipe STDOUT\n")
        cmd.Stdout = c.StdoutWriter
    }

    stderr := bytes.Buffer{}
    cmd.Stderr = &stderr

    if err := cmd.Start(); err != nil {
        return err
    }

    if err := cmd.Wait(); err != nil {
        return err
    }

    if stderr.String() != "" {
        return fmt.Errorf("want empty stderr, but got %s", stderr.String())
    }

    return nil
}



    


    Unit test code

    


    type TestCommander struct {
    name string
    args []string
}

func (c *TestCommander) SetCommand(name string, args []string) {
    c.name = name
    c.args = args
}

func (c *TestCommander) Command() (string, []string) {
    return c.name, c.args
}

func TestConvert(t *testing.T) {
    ctx := context.Background()
    filePath := "testdata/input_mp4.mp4"
    data, err := convertFile(filePath, ctx)
    outFile := "testdata/output_mp4.mp4"
    if err != nil {
        fmt.Print("ERR: ", err, "\n")
    }

    os.WriteFile(outFile, data, 0644)

}

func convertFile(filePath string, ctx context.Context) (bytes []byte, err error) {
    // Create a CmdRunner instance with your custom Commander.
    runner := &CmdRunner{}
    commander := &TestCommander{}
    args := []string{
        "-nostats",
        "-i", filePath,
        "-y",
        "-loglevel", "0",
        "-filter:v", "fps=30, crop=trunc(iw/2)*2:trunc(ih/2)*2",
        "-c:v", "libx264",
        "-c:a", "aac",
        "-pix_fmt", "yuv420p",
        "-movflags", "frag_keyframe+faststart",
        "-bufsize", "24M",
        "-maxrate", "12M",
        "-f", "mp4",
        "pipe:1",
    }

    commander.SetCommand("ffmpeg", args)
    runner.SetCommander(commander)
    outputPipeReader, outputPipeWriter := io.Pipe()
    runner.SetStdOutWriter(outputPipeWriter)

    wg := &sync.WaitGroup{}
    wg.Add(1)
    go func() {
        defer outputPipeReader.Close()
        defer wg.Done()

        // Read data from output pipe
        bytes, err = io.ReadAll(outputPipeReader)
        if err != nil {
            fmt.Print("\nReadAll err: ", err, "\n")
        }
    }()

    err = runner.RunByPipe(ctx)
    if err != nil {
        fmt.Print("\nRunByPipe err: ", err, "\n")
        return
    }

    wg.Wait()

    return
}


    


    I can't find a clue as to what might have gone wrong.
P.S : But if I remove if err := cmd.Wait(); err != nil { return err } Then the problem goes away, but there will be no data, because nothing is written to io.Pipe.Why ?

    


  • Evolution #3953 : formulaire de date sur les rubriques

    12 février 2021, par RastaPopoulos ♥

    En attendant d’une décision pour le core, voilà un plugin très con pour pouvoir corriger manuellement : https://git.spip.net/spip-contrib-extensions/dater_rubriques

    Dans ce plugin ça pourrait être bien de tester :
    - ce que je disais plus haut, d’améliorer le code pour vraiment mettre à jour les dates de tous les parents quand on déplace un contenu dans une branche
    - un bouton "Recalculer la date" sur le bloc de dateur, qui inversement irait fouiller tous les enfants pour remettre la bonne date mais ça me parait potentiellement trop énorme comme recherche vu qu’il faut voir toute la branche (si on a déplacé un article bien plus récent dans une sous sous rubrique)

    Mais bon en attendant on peut corriger manuellement par interface.

  • Evolution #3102 (Nouveau) : Export des traductions vers les fichiers du core - plugin "langues sup...

    27 novembre 2013, par Suske -

    1. Le choix d’intégrer une langue au core nécessite une intervention humaine, ce qui semble une bonne idée (http://article.gmane.org/gmane.comp.web.spip.devel/64722). Par contre implémenter un signalement automatique pourrait être une bonne idée (genre quand les chaînes traduites du core atteignent les 70%...)

    2. Sortirait-on les langues (trop) peu traduites ? Comment déterminer le "trop peu" ?

    3. Si oui en 2., il faudrait au minimum un plugin permettant de récupérer aisément les langues nécessaires (cas des traductions de dates)

    Voir (notamment ?) : http://thread.gmane.org/gmane.comp.web.spip.devel/64720