
Recherche avancée
Médias (2)
-
SPIP - plugins - embed code - Exemple
2 septembre 2013, par
Mis à jour : Septembre 2013
Langue : français
Type : Image
-
Publier une image simplement
13 avril 2011, par ,
Mis à jour : Février 2012
Langue : français
Type : Video
Autres articles (65)
-
Personnaliser les catégories
21 juin 2013, parFormulaire 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 2013Puis-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, parLes 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 alexI am writing a wrapper to work with
exec.Cmd
to work withio.Pipe
. The wrapper is intended to simplify work with the file system, I want to convert a video, write the result of the conversion toio.Pipe
, read it in the goroutine and transfer it to make a preview of the new converted file. For this purpose I useFFmpeg
. 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 toio.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