Recherche avancée

Médias (0)

Mot : - Tags -/médias

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (80)

  • Ajouter des informations spécifiques aux utilisateurs et autres modifications de comportement liées aux auteurs

    12 avril 2011, par

    La manière la plus simple d’ajouter des informations aux auteurs est d’installer le plugin Inscription3. Il permet également de modifier certains comportements liés aux utilisateurs (référez-vous à sa documentation pour plus d’informations).
    Il est également possible d’ajouter des champs aux auteurs en installant les plugins champs extras 2 et Interface pour champs extras.

  • 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 (...)

  • Support audio et vidéo HTML5

    10 avril 2011

    MediaSPIP utilise les balises HTML5 video et audio pour la lecture de documents multimedia en profitant des dernières innovations du W3C supportées par les navigateurs modernes.
    Pour les navigateurs plus anciens, le lecteur flash Flowplayer est utilisé.
    Le lecteur HTML5 utilisé a été spécifiquement créé pour MediaSPIP : il est complètement modifiable graphiquement pour correspondre à un thème choisi.
    Ces technologies permettent de distribuer vidéo et son à la fois sur des ordinateurs conventionnels (...)

Sur d’autres sites (11458)

  • Video Spec to fluent-FFMPEG settings

    26 novembre 2020, par Dean Van Greunen

    Not sure how to translate this video spec into fluent-FFmpeg. please assist.

    



    

    


    This is the only video I have that plays on my iPhone, and I would like to reuse the video's encoding to allow other videos I have, to be converted into the same video format. resulting in having my other videos playable via iPhone and iOS. (this also happens to play on android, I would like the recommended encoding settings to also work on android)

    


    


    


    The video should also be streamable, I know theres a flag called +faststart but not sure how to use it.

    


    



    


    enter image description here

    



    


    here is my existing code

    


    function convertWebmToMp4File(input, output) {
  return new Promise(
    function (resolve, reject) {
  ffmpeg(input)
    .outputOptions([
      // Which settings should I put here, each on their own line/entry <-- Important plz read
      '-c:v libx264',
      '-pix_fmt yuv420p',
      '-profile:v baseline',
      '-level 3.0',
      '-crf 22',
      '-preset veryslow',
      '-vf scale=1280:-2',
      '-c:a aac',
      '-strict experimental',
      '-movflags +faststart',
      '-threads 0',
    ])
    .on("end", function () {
      resolve(true);
    })
    .on("error", function (err) {
      reject(err);
    })
    .saveToFile(output);
  });
}


    



    


    TIA

    


  • ffmpeg acts weird at reencoding my videos

    6 novembre 2022, par average

    i have download multiple videos from yt-dlp (option :

    


    yt-dlp --no-flat-playlist --audio-quality 0 --embed-thumbnail --embed-metadata --write-thumbnail --embed-subs --sub-langs all --embed-chapters --playlist-items xx playlist_url_goes_here


    


    result in a bunch of video which encode in mkv and thumbnail in png (after preprocessing from webp/jpg)

    


    my goal was to actually remove the embed thumbnail in mkv and replace it with png.

    


    example of my video data when still in mkv format :

    


    Input #0, matroska,webm, from 'ANIMACIÓN | kirby vs marx [U4g0vusRpEA].mkv':
  Metadata:
    title           : ANIMACIÓN | kirby vs marx
    PURL            : https://www.youtube.com/watch?v=U4g0vusRpEA
    COMMENT         : https://www.youtube.com/watch?v=U4g0vusRpEA
    ARTIST          : Los 5 heroes
    DATE            : 20200908
    DESCRIPTION     : kirby tendrá que enfrentarse a marx luego de que se negara a buscarle comida cuando marx estaba hambriento. Esto ocasiona que marx intente comer todo lo comestible que ve. ¿Podrá kirby detener a marx?
    SYNOPSIS        : kirby tendrá que enfrentarse a marx luego de que se negara a buscarle comida cuando marx estaba hambriento. Esto ocasiona que marx intente comer todo lo comestible que ve. ¿Podrá kirby detener a marx?
    ENCODER         : Lavf59.27.100
  Duration: 00:09:12.62, start: -0.007000, bitrate: 746 kb/s
  Stream #0:0(eng): Video: vp9 (Profile 0), yuv420p(tv, bt709), 1920x1080, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 1k tbn (default)
    Metadata:
      DURATION        : 00:09:12.621000000
  Stream #0:1(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
    Metadata:
      DURATION        : 00:09:12.621000000
  Stream #0:2(eng): Subtitle: webvtt
    Metadata:
      title           : English
      HANDLER_NAME    : English
      DURATION        : 00:08:29.168000000
  Stream #0:3: Attachment: none
    Metadata:
      filename        : cover.webp
      mimetype        : image/webp


    


    (depend on the video it will be have subtitle or chapters)

    


    i went to ffmpeg and bulk-convert them using the command

    


    for f in *.mkv; do 
ffmpeg -i "$f" -i "${f%.*}.png" -threads 2 -movflags use_metadata_tags -map_chapters 0 -map 0:V -map 0:a -map 0:s? -map 0:d? -scodec mov_text -map 1 -c:v:1 png -disposition:v:1 attached_pic "${f%.*}.mp4"; 
done


    


    but when i tried to run it for the video above,

    


      

    1. during ffmpeg convertion the input was likely same to my expectation
    2. 


    


    Output #0, mp4, to 'ANIMACIÓN | kirby vs marx [U4g0vusRpEA].mp4':
  Metadata:
    title           : ANIMACIÓN | kirby vs marx
    PURL            : https://www.youtube.com/watch?v=U4g0vusRpEA
    COMMENT         : https://www.youtube.com/watch?v=U4g0vusRpEA
    ARTIST          : Los 5 heroes
    DATE            : 20200908
    DESCRIPTION     : kirby tendrá que enfrentarse a marx luego de que se negara a buscarle comida cuando marx estaba hambriento. Esto ocasiona que marx intente comer todo lo comestible que ve. ¿Podrá kirby detener a marx?
    SYNOPSIS        : kirby tendrá que enfrentarse a marx luego de que se negara a buscarle comida cuando marx estaba hambriento. Esto ocasiona que marx intente comer todo lo comestible que ve. ¿Podrá kirby detener a marx?
    encoder         : Lavf59.27.100
  Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 12800 tbn (default)
    Metadata:
      DURATION        : 00:09:12.621000000
      encoder         : Lavc59.37.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
  Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      DURATION        : 00:09:12.621000000
      encoder         : Lavc59.37.100 aac
  Stream #0:2(eng): Subtitle: mov_text (tx3g / 0x67337874)
    Metadata:
      title           : English
      HANDLER_NAME    : English
      DURATION        : 00:08:29.168000000
      encoder         : Lavc59.37.100 mov_text
  Stream #0:3: Video: png (mp4v / 0x7634706D), rgb24(pc, progressive), 480x360, q=2-31, 200 kb/s, 25 fps, 12800 tbn (attached pic)
    Metadata:
      encoder         : Lavc59.37.100 png


    


      

    1. but when i use ffmpeg to check it again result in missing metadatas in video-audio-subtitles streams
(ffmpeg also add its custom metadata in which is not good) and the output video did not have the new thumbnail i want to embed (or even old thumbnail in webp)
    2. 


    


    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ANIMACIÓN | kirby vs marx [U4g0vusRpEA].mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    title           : ANIMACIÓN | kirby vs marx
    PURL            : https://www.youtube.com/watch?v=U4g0vusRpEA
    COMMENT         : https://www.youtube.com/watch?v=U4g0vusRpEA
    ARTIST          : Los 5 heroes
    DATE            : 20200908
    DESCRIPTION     : kirby tendrá que enfrentarse a marx luego de que se negara a buscarle comida cuando marx estaba hambriento. Esto ocasiona que marx intente comer todo lo comestible que ve. ¿Podrá kirby detener a marx?
    SYNOPSIS        : kirby tendrá que enfrentarse a marx luego de que se negara a buscarle comida cuando marx estaba hambriento. Esto ocasiona que marx intente comer todo lo comestible que ve. ¿Podrá kirby detener a marx?
    encoder         : Lavf59.27.100
  Duration: 00:09:12.64, start: 0.000000, bitrate: 1261 kb/s
  Stream #0:0[0x1](eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 1138 kb/s, 25 fps, 25 tbr, 12800 tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc59.37.100 libx264
  Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 116 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
  Stream #0:2[0x3](eng): Subtitle: mov_text (tx3g / 0x67337874), 0 kb/s (default)
    Metadata:
      handler_name    : English


    


    so what i have gone wrong with my code and how to fix it ?
.

    


  • Using ffmpeg to convert voice recording captured by HTML5

    8 juillet 2014, par user3789242

    I’m building an HTML5 voice recording software with visualizer.I want the user when recording the voice, and after uploading the file as wave in a blob (server-side), the user should be able to select the audio format of that file using ffmpeg. what I Have achieved so far is uploading the file as wave.what I still want to do is :

    • On the server
    • side pick your preferable web programming framework
    • The web programming framework accepts the upload and stores the file on the server
    • The web programming framework runs a ffmpeg (command line) which processes the file
    • The user can download the processed file

    here is my code so far :

    // variables
    var leftchannel = [];
    var rightchannel = [];
    var recorder = null;
    var recording = false;
    var recordingLength = 0;
    var volume = null;
    var audioInput = null;
    var sampleRate = 44100;
    var audioContext = null;
    var context = null;
    var outputString;



    if (!navigator.getUserMedia)
       navigator.getUserMedia = navigator.getUserMedia ||
       navigator.webkitGetUserMedia ||
       navigator.mozGetUserMedia ||
       navigator.msGetUserMedia;

    if (navigator.getUserMedia) {
       navigator.getUserMedia({
           audio: true
       }, success, function (e) {
           alert('Error capturing audio.');
       });
    } else alert('getUserMedia not supported in this browser.');



    function getVal(value) {

       // if R is pressed, we start recording
       if (value == "record") {
           recording = true;
           // reset the buffers for the new recording
           leftchannel.length = rightchannel.length = 0;
           recordingLength = 0;
           document.getElementById('output').innerHTML = "Recording now...";

           // if S is pressed, we stop the recording and package the WAV file
       } else if (value == "stop") {

           // we stop recording
           recording = false;
           document.getElementById('output').innerHTML = "Building wav file...";

           // we flat the left and right channels down
           var leftBuffer = mergeBuffers(leftchannel, recordingLength);
           var rightBuffer = mergeBuffers(rightchannel, recordingLength);
           // we interleave both channels together
           var interleaved = interleave(leftBuffer, rightBuffer);



           var buffer = new ArrayBuffer(44 + interleaved.length * 2);
           var view = new DataView(buffer);

           // RIFF chunk descriptor
           writeUTFBytes(view, 0, 'RIFF');
           view.setUint32(4, 44 + interleaved.length * 2, true);
           writeUTFBytes(view, 8, 'WAVE');
           // FMT sub-chunk
           writeUTFBytes(view, 12, 'fmt ');
           view.setUint32(16, 16, true);
           view.setUint16(20, 1, true);
           // stereo (2 channels)
           view.setUint16(22, 2, true);
           view.setUint32(24, sampleRate, true);
           view.setUint32(28, sampleRate * 4, true);
           view.setUint16(32, 4, true);
           view.setUint16(34, 16, true);
           // data sub-chunk
           writeUTFBytes(view, 36, 'data');
           view.setUint32(40, interleaved.length * 2, true);


           var lng = interleaved.length;
           var index = 44;
           var volume = 1;
           for (var i = 0; i < lng; i++) {
               view.setInt16(index, interleaved[i] * (0x7FFF * volume), true);
               index += 2;
           }

           var blob = new Blob([view], {
               type: 'audio/wav'
           });

           // let's save it locally

           document.getElementById('output').innerHTML = 'Handing off the file now...';
           var url = (window.URL || window.webkitURL).createObjectURL(blob);

           var li = document.createElement('li');
           var au = document.createElement('audio');
           var hf = document.createElement('a');

           au.controls = true;
           au.src = url;
           hf.href = url;
           hf.download = 'audio_recording_' + new Date().getTime() + '.wav';
           hf.innerHTML = hf.download;
           li.appendChild(au);
           li.appendChild(hf);
           recordingList.appendChild(li);

       }
    }


    function success(e) {

       audioContext = window.AudioContext || window.webkitAudioContext;
       context = new audioContext();


       volume = context.createGain();

       // creates an audio node from the microphone incoming stream(source)
       source = context.createMediaStreamSource(e);

       // connect the stream(source) to the gain node
       source.connect(volume);

       var bufferSize = 2048;

       recorder = context.createScriptProcessor(bufferSize, 2, 2);

       //node for the visualizer
       analyser = context.createAnalyser();
       analyser.smoothingTimeConstant = 0.3;
       analyser.fftSize = 512;

       splitter = context.createChannelSplitter();
       //when recording happens
       recorder.onaudioprocess = function (e) {

           if (!recording) return;
           var left = e.inputBuffer.getChannelData(0);
           var right = e.inputBuffer.getChannelData(1);

           leftchannel.push(new Float32Array(left));
           rightchannel.push(new Float32Array(right));
           recordingLength += bufferSize;

           // get the average for the first channel
           var array = new Uint8Array(analyser.frequencyBinCount);
           analyser.getByteFrequencyData(array);

           var c = document.getElementById("myCanvas");
           var ctx = c.getContext("2d");
           // clear the current state
           ctx.clearRect(0, 0, 1000, 325);
           var gradient = ctx.createLinearGradient(0, 0, 0, 300);
           gradient.addColorStop(1, '#000000');
           gradient.addColorStop(0.75, '#ff0000');
           gradient.addColorStop(0.25, '#ffff00');
           gradient.addColorStop(0, '#ffffff');
           // set the fill style
           ctx.fillStyle = gradient;
           drawSpectrum(array);

           function drawSpectrum(array) {
               for (var i = 0; i < (array.length); i++) {
                   var value = array[i];
                   ctx.fillRect(i * 5, 325 - value, 3, 325);
               }

           }
       }

       function getAverageVolume(array) {
           var values = 0;
           var average;

           var length = array.length;

           // get all the frequency amplitudes
           for (var i = 0; i < length; i++) {
               values += array[i];
           }

           average = values / length;
           return average;
       }

       // we connect the recorder(node to destination(speakers))
       volume.connect(splitter);
       splitter.connect(analyser, 0, 0);

       analyser.connect(recorder);
       recorder.connect(context.destination);

    }




    function mergeBuffers(channelBuffer, recordingLength) {
       var result = new Float32Array(recordingLength);
       var offset = 0;
       var lng = channelBuffer.length;
       for (var i = 0; i < lng; i++) {
           var buffer = channelBuffer[i];
           result.set(buffer, offset);
           offset += buffer.length;
       }
       return result;
    }

    function interleave(leftChannel, rightChannel) {
       var length = leftChannel.length + rightChannel.length;
       var result = new Float32Array(length);

       var inputIndex = 0;

       for (var index = 0; index < length;) {
           result[index++] = leftChannel[inputIndex];
           result[index++] = rightChannel[inputIndex];
           inputIndex++;
       }
       return result;
    }


    function writeUTFBytes(view, offset, string) {
       var lng = string.length;
       for (var i = 0; i < lng; i++) {

           view.setUint8(offset + i, string.charCodeAt(i));
       }
    }