Recherche avancée

Médias (1)

Mot : - Tags -/book

Autres articles (76)

  • Organiser par catégorie

    17 mai 2013, par

    Dans MédiaSPIP, une rubrique a 2 noms : catégorie et rubrique.
    Les différents documents stockés dans MédiaSPIP peuvent être rangés dans différentes catégories. On peut créer une catégorie en cliquant sur "publier une catégorie" dans le menu publier en haut à droite ( après authentification ). Une catégorie peut être rangée dans une autre catégorie aussi ce qui fait qu’on peut construire une arborescence de catégories.
    Lors de la publication prochaine d’un document, la nouvelle catégorie créée sera proposée (...)

  • Récupération d’informations sur le site maître à l’installation d’une instance

    26 novembre 2010, par

    Utilité
    Sur le site principal, une instance de mutualisation est définie par plusieurs choses : Les données dans la table spip_mutus ; Son logo ; Son auteur principal (id_admin dans la table spip_mutus correspondant à un id_auteur de la table spip_auteurs)qui sera le seul à pouvoir créer définitivement l’instance de mutualisation ;
    Il peut donc être tout à fait judicieux de vouloir récupérer certaines de ces informations afin de compléter l’installation d’une instance pour, par exemple : récupérer 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

Sur d’autres sites (5286)

  • avformat/mxfenc : Write Audio Ref Level for D10

    6 avril 2018, par Michael Niedermayer
    avformat/mxfenc : Write Audio Ref Level for D10
    

    Signed-off-by : Michael Niedermayer <michael@niedermayer.cc>

    • [DH] libavformat/mxfenc.c
    • [DH] tests/ref/fate/copy-trac4914
    • [DH] tests/ref/fate/mxf-reel_name
    • [DH] tests/ref/fate/time_base
    • [DH] tests/ref/lavf/mxf
    • [DH] tests/ref/lavf/mxf_d10
    • [DH] tests/ref/lavf/mxf_dv25
    • [DH] tests/ref/lavf/mxf_dvcpro50
    • [DH] tests/ref/lavf/mxf_opatom
    • [DH] tests/ref/lavf/mxf_opatom_audio
  • Downloading Youtube videos frames with FFMPEG without downloading the entire videos [closed]

    11 mars 2023, par zulle99

    I'm wondering if it is possible to download youtube videos frames using FFMPEG and not opencv without downloading the entire videos first. I'm asking this since it is known that opencv is very slow doing this and takes a huge amount of time if the sequence of videos is big like in my use case.

    &#xA;

  • Download youtube video as stream Readable object

    26 décembre 2023, par Abraam Emad

    in this function it download youtube video as a file out.mp4 on hard disk i need to download it as a Readable Object to upload it

    &#xA;

    private async downloadVideo(videoId: string) {&#xA;// Buildin with nodejs&#xA;const cp = require(&#x27;child_process&#x27;);&#xA;const readline = require(&#x27;readline&#x27;);&#xA;// External modules&#xA;const ytdl = require(&#x27;ytdl-core&#x27;);&#xA;const ffmpeg = require(&#x27;ffmpeg-static&#x27;);&#xA;// Global constants&#xA;const ref = `https://www.youtube.com/watch?v=${videoId}`;&#xA;const tracker = {&#xA;  start: Date.now(),&#xA;  audio: { downloaded: 0, total: Infinity },&#xA;  video: { downloaded: 0, total: Infinity },&#xA;  merged: { frame: 0, speed: &#x27;0x&#x27;, fps: 0 },&#xA;};&#xA;&#xA;// Get audio and video streams&#xA;const audio = ytdl(ref, { quality: &#x27;highestaudio&#x27; })&#xA;  .on(&#x27;progress&#x27;, (_, downloaded, total) => {&#xA;    tracker.audio = { downloaded, total };&#xA;  });&#xA;const video = ytdl(ref, { quality: &#x27;highestvideo&#x27; })&#xA;  .on(&#x27;progress&#x27;, (_, downloaded, total) => {&#xA;    tracker.video = { downloaded, total };&#xA;  });&#xA;&#xA;// Prepare the progress bar&#xA;let progressbarHandle = null;&#xA;const progressbarInterval = 1000;&#xA;const showProgress = () => {&#xA;  readline.cursorTo(process.stdout, 0);&#xA;  const toMB = i => (i / 1024 / 1024).toFixed(2);&#xA;&#xA;  process.stdout.write(`Audio  | ${(tracker.audio.downloaded / tracker.audio.total * 100).toFixed(2)}% processed `);&#xA;  process.stdout.write(`(${toMB(tracker.audio.downloaded)}MB of ${toMB(tracker.audio.total)}MB).${&#x27; &#x27;.repeat(10)}\n`);&#xA;&#xA;  process.stdout.write(`Video  | ${(tracker.video.downloaded / tracker.video.total * 100).toFixed(2)}% processed `);&#xA;  process.stdout.write(`(${toMB(tracker.video.downloaded)}MB of ${toMB(tracker.video.total)}MB).${&#x27; &#x27;.repeat(10)}\n`);&#xA;&#xA;  process.stdout.write(`Merged | processing frame ${tracker.merged.frame} `);&#xA;  process.stdout.write(`(at ${tracker.merged.fps} fps => ${tracker.merged.speed}).${&#x27; &#x27;.repeat(10)}\n`);&#xA;&#xA;  process.stdout.write(`running for: ${((Date.now() - tracker.start) / 1000 / 60).toFixed(2)} Minutes.`);&#xA;  readline.moveCursor(process.stdout, 0, -3);&#xA;};&#xA;&#xA;// Start the ffmpeg child process&#xA;const ffmpegProcess = cp.spawn(ffmpeg, [&#xA;  // Remove ffmpeg&#x27;s console spamming&#xA;  &#x27;-loglevel&#x27;, &#x27;8&#x27;, &#x27;-hide_banner&#x27;,&#xA;  // Redirect/Enable progress messages&#xA;  &#x27;-progress&#x27;, &#x27;pipe:3&#x27;,&#xA;  // Set inputs&#xA;  &#x27;-i&#x27;, &#x27;pipe:4&#x27;,&#xA;  &#x27;-i&#x27;, &#x27;pipe:5&#x27;,&#xA;  // Map audio &amp; video from streams&#xA;  &#x27;-map&#x27;, &#x27;0:a&#x27;,&#xA;  &#x27;-map&#x27;, &#x27;1:v&#x27;,&#xA;  // Keep encoding&#xA;  &#x27;-c:v&#x27;, &#x27;copy&#x27;,&#xA;  // Define output file&#xA;  &#x27;-f&#x27;, &#x27;mpegts&#x27;, // Use MPEG-TS format for streaming&#xA;  &#x27;out.mp4&#x27;&#xA;], {&#xA;  windowsHide: true,&#xA;  stdio: [&#xA;    /* Standard: stdin, stdout, stderr */&#xA;    &#x27;inherit&#x27;, &#x27;inherit&#x27;, &#x27;inherit&#x27;,&#xA;    /* Custom: pipe:3, pipe:4, pipe:5 */&#xA;    &#x27;pipe&#x27;, &#x27;pipe&#x27;, &#x27;pipe&#x27;,&#xA;  ],&#xA;});&#xA;ffmpegProcess.on(&#x27;close&#x27;, () => {&#xA;  console.log(&#x27;done&#x27;);&#xA;  // Cleanup&#xA;  process.stdout.write(&#x27;\n\n\n\n&#x27;);&#xA;  clearInterval(progressbarHandle);&#xA;});&#xA;// Link streams&#xA;// FFmpeg creates the transformer streams and we just have to insert / read data&#xA;ffmpegProcess.stdio[3].on(&#x27;data&#x27;, chunk => {&#xA;  // Start the progress bar&#xA;  if (!progressbarHandle) progressbarHandle = setInterval(showProgress, progressbarInterval);&#xA;  // Parse the param=value list returned by ffmpeg&#xA;  const lines = chunk.toString().trim().split(&#x27;\n&#x27;);&#xA;  const args: any = {};&#xA;  for (const l of lines) {&#xA;    const [key, value] = l.split(&#x27;=&#x27;);&#xA;    args[key.trim()] = value.trim();&#xA;  }&#xA;  tracker.merged = args;&#xA;});&#xA;audio.pipe(ffmpegProcess.stdio[4]);&#xA;video.pipe(ffmpegProcess.stdio[5]);&#xA;

    &#xA;

    }`

    &#xA;