Recherche avancée

Médias (2)

Mot : - Tags -/plugins

Autres articles (97)

  • ANNEXE : Les plugins utilisés spécifiquement pour la ferme

    5 mars 2010, par

    Le site central/maître de la ferme a besoin d’utiliser plusieurs plugins supplémentaires vis à vis des canaux pour son bon fonctionnement. le plugin Gestion de la mutualisation ; le plugin inscription3 pour gérer les inscriptions et les demandes de création d’instance de mutualisation dès l’inscription des utilisateurs ; le plugin verifier qui fournit une API de vérification des champs (utilisé par inscription3) ; le plugin champs extras v2 nécessité par inscription3 (...)

  • Ajouter notes et légendes aux images

    7 février 2011, par

    Pour pouvoir ajouter notes et légendes aux images, la première étape est d’installer le plugin "Légendes".
    Une fois le plugin activé, vous pouvez le configurer dans l’espace de configuration afin de modifier les droits de création / modification et de suppression des notes. Par défaut seuls les administrateurs du site peuvent ajouter des notes aux images.
    Modification lors de l’ajout d’un média
    Lors de l’ajout d’un média de type "image" un nouveau bouton apparait au dessus de la prévisualisation (...)

  • La sauvegarde automatique de canaux SPIP

    1er avril 2010, par

    Dans le cadre de la mise en place d’une plateforme ouverte, il est important pour les hébergeurs de pouvoir disposer de sauvegardes assez régulières pour parer à tout problème éventuel.
    Pour réaliser cette tâche on se base sur deux plugins SPIP : Saveauto qui permet une sauvegarde régulière de la base de donnée sous la forme d’un dump mysql (utilisable dans phpmyadmin) mes_fichiers_2 qui permet de réaliser une archive au format zip des données importantes du site (les documents, les éléments (...)

Sur d’autres sites (7626)

  • 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 ?
.

    


  • audio convert to mp3,pcm and vox using ffmpeg

    8 juillet 2014, par user3789242

    Please can someone help me with the code for ffmpeg.
    I have to use ffmpeg to convert a recorder voice (using HTML5) into mp3,pcm or vox depending on the user’s selection.
    I don’t know how to write the code for ffmpeg if some one can help me with the code or libraries.
    Thank you in advance.

    Here is my code for recording the voice with a visualizer :

    // 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));
    }
    }
  • Révision 21501 : #3162 et sans doute d’autres cas : la fonction _sqlite_func_regexp_match doit ut...

    10 août 2014, par cedric -

    + optimisation : quand $quoi est vide (ce qui est souvent le cas sur les requetes SQL), retourner false tout de suite.