Recherche avancée

Médias (91)

Autres articles (80)

  • Le profil des utilisateurs

    12 avril 2011, par

    Chaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
    L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...)

  • Configurer la prise en compte des langues

    15 novembre 2010, par

    Accéder à la configuration et ajouter des langues prises en compte
    Afin de configurer la prise en compte de nouvelles langues, il est nécessaire de se rendre dans la partie "Administrer" du site.
    De là, dans le menu de navigation, vous pouvez accéder à une partie "Gestion des langues" permettant d’activer la prise en compte de nouvelles langues.
    Chaque nouvelle langue ajoutée reste désactivable tant qu’aucun objet n’est créé dans cette langue. Dans ce cas, elle devient grisée dans la configuration et (...)

  • XMP PHP

    13 mai 2011, par

    Dixit Wikipedia, XMP signifie :
    Extensible Metadata Platform ou XMP est un format de métadonnées basé sur XML utilisé dans les applications PDF, de photographie et de graphisme. Il a été lancé par Adobe Systems en avril 2001 en étant intégré à la version 5.0 d’Adobe Acrobat.
    Étant basé sur XML, il gère un ensemble de tags dynamiques pour l’utilisation dans le cadre du Web sémantique.
    XMP permet d’enregistrer sous forme d’un document XML des informations relatives à un fichier : titre, auteur, historique (...)

Sur d’autres sites (9991)

  • How to add 'now playing' song title info to an rtmp audio stream in ffmpeg

    11 juillet 2020, par no_event_logged

    I am trying to add 'now playing' metadata to a rtmp audio stream using ffmpeg.

    


    My current ffmpeg encoder string looks like this and is working fine, just missing the now playing info :

    


    "C:\Program Files (x86)\ffmpeg\bin\ffmpeg.exe" -re -f dshow -i audio="Line 2 (Virtual Audio Cable)" -acodec libfdk_aac -profile:a aac_he_v2 -cutoff 18000 -ab 48k -ac 2 -ar 44100 -f flv "rtmp://blah.com:1935/live/mystream

    


    The playout software (StationPlaylist) exports the current song title to C:\NowPlaying\nowplaying.txt but I have no idea how to get ffmpeg to inject this / keep it up to date.

    


    Any pointers would be great !

    


  • Select song sample rate

    22 avril 2022, par Clamarc

    I have a folder with several mp3's and I needed to separate (copy) all the 4800 hz sample rate files to another folder.

    


    I have a folder "General Audios" and I created another one called "Audios 48000 sample rate"

    


    I'm running the ffprobe command that returns the sample rate value of each song.. but when I try to save the value in a string to be able to use the IF and copy only the ones with 48000 hz, I get a message that the command is a command input ? what is wrong ?

    


    md "C:\Users\%username%\Desktop\Áudios 48000 sample rate"

cd /d "C:\Users\%username%\Desktop\Áudios Gerais"

for %%F IN (*) do (
   ffprobe -i "%%F" -v error -show_entries stream=sample_rate ˆ
       -of default=noprint_wrappers=1:nokey=1 set %%S if %%S==48000 ˆ
          "C:\Users\%username%\Desktop\Áudios 48000 sample rate\%%F"
   )

pause


    


    EDITED :
I have no more code, this is the only one, I run the ffprobe command in a folder and I select the ones that have 48000Hz to copy to another folder, that's all !?!?

    


  • Next.js Youtube mp4 downloader downloads high quality video but muted

    4 avril 2023, par Stef-Lev

    I have created a next.js video downloader and I want to download videos of the highest quality. When I trigger the download I only get a muted mp4 file (in high quality) and a muted mp3 file. Here is the api file. How could I download the video, the audio and then merge them with ffmpeg correctly ?

    


    import ytdl from "ytdl-core";
import fs from "fs";
import { Server } from "socket.io";
import ffmpeg from "fluent-ffmpeg";

export default async function handler(req, res) {
  if (res.socket.server.io) {
    console.log("Socket is already running");
    res.end();
    return;
  }
  console.log("Socket is initializing");
  const io = new Server(res.socket.server);
  res.socket.server.io = io;

  io.on("connection", async (socket) => {
    console.log(socket.id, "socketID");

    const sendError = async (msg) => {
      socket.emit("showError", msg);
    };

    const sendProgress = async (msg) => {
      console.log(msg);
      socket.emit("showProgress", msg);
    };

    const sendComplete = async (msg) => {
      console.log(msg);
      socket.emit("showComplete", msg);
    };

    const downloadVideo = async (url) => {
      try {
        const videoInfo = await ytdl.getInfo(url);
        const outputPath = path.join(
          process.cwd(),
          "mp4s",
          `${videoInfo.videoDetails.title}.mp4`
        );
        const audioPath = path.join(
          process.cwd(),
          "mp4s",
          `${videoInfo.videoDetails.title}.mp3`
        );

        const videoFormat = ytdl.chooseFormat(videoInfo.formats, {
          quality: "highestvideo",
          filter: "videoonly",
        });
        const audioFormat = ytdl.chooseFormat(videoInfo.formats, {
          quality: "highestaudio",
          filter: "audioonly",
        });
        const videoStream = ytdl(url, { quality: videoFormat.itag });
        const audioStream = ytdl(url, { quality: audioFormat.itag });

        const videoOutput = fs.createWriteStream(outputPath);
        const audioOutput = fs.createWriteStream(audioPath);

        audioStream.pipe(audioOutput);
        videoStream.pipe(videoOutput);

        let downloadedBytes = 0;
        let totalBytes =
          videoFormat.contentLength || videoInfo.length_seconds * 1000000;

        videoOutput.on("data", (chunk) => {
          downloadedBytes += chunk.length;
          const progress = Math.round((downloadedBytes / totalBytes) * 100);
          sendProgress({ progress });
        });

        videoOutput.on("error", (err) => {
          console.error(err);
          sendError({
            status: "error",
            message: "An error occurred while writing the video file",
          });
        });

        audioOutput.on("error", (err) => {
          console.error(err);
          sendError({
            status: "error",
            message: "An error occurred while writing the audio file",
          });
        });

        videoOutput.on("finish", () => {
          audioOutput.on("finish", () => {
            if (fs.existsSync(outputPath) && fs.existsSync(audioPath)) {
              const outputFile = path.join(
                process.cwd(),
                "mp4s",
                `${videoInfo.videoDetails.title}-with-audio.mp4`
              );
              const command = ffmpeg()
                .input(outputPath)
                .input(audioPath)
                .outputOptions("-c:v copy")
                .outputOptions("-c:a aac")
                .outputOptions("-b:a 192k")
                .outputOptions("-strict -2")
                .output(outputFile)
                .on("end", () => {
                  fs.unlink(outputPath, () => {});
                  fs.unlink(audioPath, () => {});
                  sendComplete({
                    status: "success",
                  });
                })
                .on("error", (err) => {
                  console.error("ffmpeg error:", err.message);
                  sendError({
                    status: "error",
                    message:
                      "An error occurred while processing the audio and video files",
                  });
                });
              command.run();
            } else {
              console.error("Output or audio file not found");
              sendError({
                status: "error",
                message: "Output or audio file not found",
              });
            }
          });
        });
      } catch (error) {
        console.error(error);
        sendError({
          status: "error",
          message: "An error occurred while downloading the video",
        });
      }
    };
    socket.on("downloadVideo", downloadVideo);
  });
  res.end();
}


    


    I am also using socket.io to show the progress in the frontend, but for some reason I don't get the progress correctly. Is it possible to do that ?