Recherche avancée

Médias (1)

Mot : - Tags -/biomaping

Autres articles (40)

  • Les autorisations surchargées par les plugins

    27 avril 2010, par

    Mediaspip core
    autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs

  • 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

  • Support de tous types de médias

    10 avril 2011

    Contrairement à beaucoup de logiciels et autres plate-formes modernes de partage de documents, MediaSPIP a l’ambition de gérer un maximum de formats de documents différents qu’ils soient de type : images (png, gif, jpg, bmp et autres...) ; audio (MP3, Ogg, Wav et autres...) ; vidéo (Avi, MP4, Ogv, mpg, mov, wmv et autres...) ; contenu textuel, code ou autres (open office, microsoft office (tableur, présentation), web (html, css), LaTeX, Google Earth) (...)

Sur d’autres sites (7068)

  • Why every audio part louder in FFmpeg while I join them in one audio ?

    13 mai 2024, par Volodymyr Bilovus

    I trying to make dubbing for audio. I have original audio track and I want to put translated audio parts on top of the original.

    


    translated audio 100% vol : —p1--- ---p2— -----p3--- —p4—

    


    original audio 5% vol : -----------------------------------------

    


    Here is my FFmpeg command with filter_complex

    


    ffmpeg -i video_wpmXlZF4XiE.opus -i 989-audio.mp3 -i 989-audio.mp3 -i 989-audio.mp3 -i 989-audio.mp3 \
-filter_complex "\
[0:a]loudnorm=I=-14:TP=-2:LRA=7, volume=0.05[original]; \
[1:a]loudnorm=I=-14:TP=-2:LRA=7, adelay=5000|5000, volume=1.0[sent1]; \
[2:a]loudnorm=I=-14:TP=-2:LRA=7, adelay=10000|10000, volume=1.0[sent2]; \
[3:a]loudnorm=I=-14:TP=-2:LRA=7, adelay=20000|20000, volume=1.0[sent3]; \
[4:a]loudnorm=I=-14:TP=-2:LRA=7, adelay=30000|30000, volume=1.0[sent4]; \
[original][sent1][sent2][sent3][sent4]amix=inputs=5:duration=longest[out]" \
-map "[out]" output.mp3


    


    Audios I put on top of the original audio track is the same -i 989-audio.mp3 I made it by purpose to show the problem
And here is the audio levels on final generated track.
enter image description here

    


    As you can see, first and second only slightly different but third
and fourth have totally different(higher) volume level (Notice, audio is the same).
Why it's happened. And how can I workaround this odd behaviour ?

    


  • lavc/qsvenc : add support for oneVPL string API

    29 février 2024, par Mandava, Mounika
    lavc/qsvenc : add support for oneVPL string API
    

    A new option -qsv_params <str> is added, where <str> is a :-separated
    list of key=value parameters.

    Example :
    $ ffmpeg -y -f lavfi -i testsrc -vf "format=nv12" -c:v h264_qsv -qsv_params
    "TargetUsage=1:GopPicSize=30:GopRefDist=2:TargetKbps=5000" -f null -

    Signed-off-by : Mounika Mandava <mounika.mandava@intel.com>
    Signed-off-by : Haihao Xiang <haihao.xiang@intel.com>

    • [DH] Changelog
    • [DH] configure
    • [DH] doc/encoders.texi
    • [DH] libavcodec/qsvenc.c
    • [DH] libavcodec/qsvenc.h
  • How to create video from a stream webcam and canvas ?

    1er mai 2024, par Stefdelec

    I am trying to generate a video on browser from different cut :&#xA;Slide : stream from canvas&#xA;Video : stream from webcam

    &#xA;

    I just want to allow user to download the video edit with&#xA;slide1 + video1 + slide2 + video2 + slide3 + video3.

    &#xA;

    Here is my code :

    &#xA;

    const canvas = document.getElementById(&#x27;myCanvas&#x27;);&#xA;const ctx = canvas.getContext(&#x27;2d&#x27;);&#xA;const webcam = document.getElementById(&#x27;webcam&#x27;);&#xA;const videoPlayer = document.createElement(&#x27;video&#x27;);&#xA;videoPlayer.controls = true;&#xA;document.body.appendChild(videoPlayer);&#xA;const videoWidth = 640;&#xA;const videoHeight = 480;&#xA;let keepAnimating = true;&#xA;const frameRate=30;&#xA;// Attempt to get webcam access&#xA;function setupWebcam() {&#xA; const constraints = {&#xA;        video: {&#xA;             frameRate: frameRate,&#xA;            width: videoWidth,  &#xA;            height: videoHeight &#xA;        }&#xA;    };&#xA;  navigator.mediaDevices.getUserMedia(constraints)&#xA;    .then(stream => {&#xA;      webcam.srcObject = stream;&#xA;      webcam.addEventListener(&#x27;loadedmetadata&#x27;, () => {&#xA;        recordSegments();&#xA;        console.log(&#x27;Webcam feed is now displayed&#x27;);&#xA;      });&#xA;    })&#xA;    .catch(err => {&#xA;      console.error("Error accessing webcam:", err);&#xA;      alert(&#x27;Could not access the webcam. Please ensure permissions are granted and try again.&#x27;);&#xA;    });&#xA;}&#xA;&#xA;&#xA;// Function to continuously draw on the canvas&#xA;function animateCanvas(content) {&#xA;  if (!keepAnimating) {&#xA;    console.log("keepAnimating", keepAnimating);&#xA;    return;&#xA;  }; // Stop the animation when keepAnimating is false&#xA;&#xA;  ctx.clearRect(0, 0, canvas.width, canvas.height); // Clear previous drawings&#xA;  ctx.fillStyle = `rgba(${Math.floor(Math.random() * 255)}, ${Math.floor(Math.random() * 255)}, ${Math.floor(Math.random() * 255)}, 0.5)`;&#xA;  ctx.fillRect(0, 0, canvas.width, canvas.height);&#xA;  ctx.fillStyle = &#x27;#000&#x27;;&#xA;  ctx.font = &#x27;48px serif&#x27;;&#xA;  ctx.fillText(content &#x2B; &#x27; &#x27; &#x2B; new Date().toLocaleTimeString(), 50, 100);&#xA;&#xA;  // Request the next frame&#xA;  requestAnimationFrame(() => animateCanvas(content));&#xA;}&#xA;&#xA;&#xA;// Initialize recording segments array&#xA;const recordedSegments = [];&#xA;// Modified startRecording to manage animation&#xA;function startRecording(stream, duration = 5000, content) {&#xA;  const recorder = new MediaRecorder(stream, { mimeType: &#x27;video/webm&#x27; });&#xA;  const data = [];&#xA;&#xA;  recorder.ondataavailable = e => data.push(e.data);&#xA;&#xA;&#xA;  // Start animating the canvas&#xA;  keepAnimating = true;&#xA;  animateCanvas(content);&#xA;  recorder.start();&#xA;  return new Promise((resolve) => {&#xA;    // Automatically stop recording after &#x27;duration&#x27; milliseconds&#xA;    setTimeout(() => {&#xA;      recorder.stop();&#xA;      // Stop the animation when recording stops&#xA;      keepAnimating = false;&#xA;    }, duration);&#xA;&#xA;    recorder.onstop = () => {&#xA;      const blob = new Blob(data, { type: &#x27;video/webm&#x27; });&#xA;      recordedSegments.push(blob);&#xA;       keepAnimating = true;&#xA;      resolve(blob);&#xA;    };&#xA;  });&#xA;}&#xA;&#xA;// Sequence to record segments&#xA;async function recordSegments() {&#xA;  // Record canvas with dynamic content&#xA;  await startRecording(canvas.captureStream(frameRate), 2000, &#x27;Canvas Draw 1&#x27;).then(() => console.log(&#x27;Canvas 1 recorded&#x27;));&#xA;&#xA;      await startRecording(webcam.srcObject,3000).then(() => console.log(&#x27;Webcam 1 recorded&#x27;));&#xA;&#xA;          await startRecording(webcam.srcObject).then(() => console.log(&#x27;Webcam 1 recorded&#x27;));&#xA;  mergeAndDownloadVideo();&#xA;}&#xA;&#xA;function downLoadVideo(blob){&#xA; const url = URL.createObjectURL(blob);&#xA;&#xA;  // Create an anchor element and trigger a download&#xA;  const a = document.createElement(&#x27;a&#x27;);&#xA;  a.style.display = &#x27;none&#x27;;&#xA;  a.href = url;&#xA;  a.download = &#x27;merged-video.webm&#x27;;&#xA;  document.body.appendChild(a);&#xA;  a.click();&#xA;&#xA;  // Clean up by revoking the Blob URL and removing the anchor element after the download&#xA;  setTimeout(() => {&#xA;    document.body.removeChild(a);&#xA;    window.URL.revokeObjectURL(url);&#xA;  }, 100);&#xA;}&#xA;function mergeAndDownloadVideo() {&#xA;  console.log("recordedSegments length", recordedSegments.length);&#xA;  // Create a new Blob from all recorded video segments&#xA;  const superBlob = new Blob(recordedSegments, { type: &#x27;video/webm&#x27; });&#xA;  &#xA;  downLoadVideo(superBlob)&#xA;&#xA;  // Create a URL for the superBlob&#xA; &#xA;}&#xA;&#xA;// Start the process by setting up the webcam first&#xA;setupWebcam();&#xA;

    &#xA;

    You can find it here : https://jsfiddle.net/Sulot/nmqf6wdj/25/

    &#xA;

    I am unable to have one "slide" + webcam video + "slide" + webcam video.

    &#xA;

    It merges only the first 2 segments, but not the other. I tried with ffmpeg browser side.

    &#xA;