Recherche avancée

Médias (1)

Mot : - Tags -/école

Autres articles (84)

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

  • Not all portions of video play well after concatenation

    24 septembre 2018, par srgbnd

    Node.JS 8.11.4, fluent-ffmpeg 2.1.2

    I need to concatenate random portions of the same length of different videos in one video file. The concatenation proceeds without errors. But when I play the final concatenated file I see some portions playing well with sound, others have video "frozen" but sounds playing.

    What’s the problem ? I want all portions playing well in the final concatenated file.

    Concatenation config :

    trex@cave:/media/trex/safe1/Development/app$ head concat_config.txt
    file /media/trex/safe1/Development/app/videos/test/417912400.mp4
    inpoint 145
    outpoint 155
    file /media/trex/safe1/Development/app/videos/test/440386842.mp4
    inpoint 59
    outpoint 69
    file /media/trex/safe1/Development/app/videos/test/417912400.mp4
    inpoint 144
    outpoint 154
       ...

    In total, I have 16 portions of 2 videos. Duration of a portion is 10 sec. In the future the number of video files and portions will be much bigger.

    trex@cave:/media/trex/safe1/Development/app$ ls -lh videos/test/
    total 344M
    -rw-r--r-- 1 trex trex  90M set 23 12:19 417912400.mp4
    -rw-r--r-- 1 trex trex 254M set 23 12:19 440386842.mp4

    JavaScript code for the concatentaion :

    const fs = require('fs');
    const path = require('path');
    const _ = require('lodash');
    const ffmpegPath = require('@ffmpeg-installer/ffmpeg').path;
    const ffprobePath = require('@ffprobe-installer/ffprobe').path;
    const ffmpeg = require('fluent-ffmpeg');
    ffmpeg.setFfmpegPath(ffmpegPath);
    ffmpeg.setFfprobePath(ffprobePath);


    function getMetadata(absPathToFile) {
     return new Promise(function (resolve, reject) {
       ffmpeg.ffprobe(absPathToFile, function(err, metadata) {
         if (err) {
           reject('get video meta: ' + err.toString());
         }
         resolve(metadata);
       });
     });
    }

    async function getFormat(files) {
     const pArray = files.map(async f => {
       const meta = await getMetadata(f);
       meta.format.short_filename = meta.format.filename.split('/').pop();
       return meta.format;
     });
     return await Promise.all(pArray);
    }

    function getSliceValues(duration, max = 10) {
     max = duration < max ? duration * 0.5 : max; // sec
     const start = _.random(0, duration * 0.9);
     const end = start + max > duration ? duration : start + max;
     return `inpoint ${Math.floor(start)}\noutpoint ${Math.floor(end)}\n`;
    }

    function addPath(arr, aPath) {
     return arr.map(e => path.join(aPath, e));
    }

    function createConfig(meta) {
     return meta.map(video => `file ${video.filename}\n${getSliceValues(video.duration)}`).join('');
    }

    function duplicateMeta(meta) {
     for (let i = 0; i < 3; i++) {
       meta.push(...meta);
     }
     return _.shuffle(meta);
    }

    const videoFolder = path.join(__dirname, 'videos/test');
    const finalVideo = 'final_video.mp4';
    const configFile = 'concat_config.txt';

    // main
    (async () => {
     let videos = addPath(fs.readdirSync(videoFolder), videoFolder);

     let meta = await getFormat(videos);
     meta = duplicateMeta(meta); // get multiple portions of videos

     fs.writeFileSync(configFile, createConfig(meta));

     const mpeg = ffmpeg();
     mpeg.input(configFile)
       .inputOptions(['-f concat', '-safe 0'])
       .outputOptions('-c copy')
       .save(finalVideo);
    })();

    Video files formats :

    { streams:
      [ { index: 0,
          codec_name: 'h264',
          codec_long_name: 'H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10',
          profile: 'High',
          codec_type: 'video',
          codec_time_base: '1001/60000',
          codec_tag_string: 'avc1',
          codec_tag: '0x31637661',
          width: 1920,
          height: 1080,
          coded_width: 1920,
          coded_height: 1088,
          has_b_frames: 2,
          sample_aspect_ratio: '1:1',
          display_aspect_ratio: '16:9',
          pix_fmt: 'yuv420p',
          level: 40,
          color_range: 'tv',
          color_space: 'bt709',
          color_transfer: 'bt709',
          color_primaries: 'bt709',
          chroma_location: 'left',
          field_order: 'unknown',
          timecode: 'N/A',
          refs: 1,
          is_avc: 'true',
          nal_length_size: 4,
          id: 'N/A',
          r_frame_rate: '30000/1001',
          avg_frame_rate: '30000/1001',
          time_base: '1/30000',
          start_pts: 0,
          start_time: 0,
          duration_ts: 4936900,
          duration: 164.563333,
          bit_rate: 4323409,
          max_bit_rate: 'N/A',
          bits_per_raw_sample: 8,
          nb_frames: 4932,
          nb_read_frames: 'N/A',
          nb_read_packets: 'N/A',
          tags: [Object],
          disposition: [Object] },
        { index: 1,
          codec_name: 'aac',
          codec_long_name: 'AAC (Advanced Audio Coding)',
          profile: 'LC',
          codec_type: 'audio',
          codec_time_base: '1/48000',
          codec_tag_string: 'mp4a',
          codec_tag: '0x6134706d',
          sample_fmt: 'fltp',
          sample_rate: 48000,
          channels: 2,
          channel_layout: 'stereo',
          bits_per_sample: 0,
          id: 'N/A',
          r_frame_rate: '0/0',
          avg_frame_rate: '0/0',
          time_base: '1/48000',
          start_pts: 0,
          start_time: 0,
          duration_ts: 7899120,
          duration: 164.565,
          bit_rate: 256000,
          max_bit_rate: 263232,
          bits_per_raw_sample: 'N/A',
          nb_frames: 7714,
          nb_read_frames: 'N/A',
          nb_read_packets: 'N/A',
          tags: [Object],
          disposition: [Object] } ],
     format:
      { filename: '/media/trex/safe1/Development/app/videos/test/417912400.mp4',
        nb_streams: 2,
        nb_programs: 0,
        format_name: 'mov,mp4,m4a,3gp,3g2,mj2',
        format_long_name: 'QuickTime / MOV',
        start_time: 0,
        duration: 164.565,
        size: 94298844,
        bit_rate: 4584150,
        probe_score: 100,
        tags:
         { major_brand: 'mp42',
           minor_version: '0',
           compatible_brands: 'mp42mp41isomavc1',
           creation_time: '2015-09-21T19:11:21.000000Z' } },
     chapters: [] }
    { streams:
      [ { index: 0,
          codec_name: 'h264',
          codec_long_name: 'H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10',
          profile: 'High',
          codec_type: 'video',
          codec_time_base: '1001/48000',
          codec_tag_string: 'avc1',
          codec_tag: '0x31637661',
          width: 2560,
          height: 1440,
          coded_width: 2560,
          coded_height: 1440,
          has_b_frames: 2,
          sample_aspect_ratio: '1:1',
          display_aspect_ratio: '16:9',
          pix_fmt: 'yuv420p',
          level: 51,
          color_range: 'tv',
          color_space: 'bt709',
          color_transfer: 'bt709',
          color_primaries: 'bt709',
          chroma_location: 'left',
          field_order: 'unknown',
          timecode: 'N/A',
          refs: 1,
          is_avc: 'true',
          nal_length_size: 4,
          id: 'N/A',
          r_frame_rate: '24000/1001',
          avg_frame_rate: '24000/1001',
          time_base: '1/24000',
          start_pts: 0,
          start_time: 0,
          duration_ts: 4206200,
          duration: 175.258333,
          bit_rate: 11891834,
          max_bit_rate: 'N/A',
          bits_per_raw_sample: 8,
          nb_frames: 4202,
          nb_read_frames: 'N/A',
          nb_read_packets: 'N/A',
          tags: [Object],
          disposition: [Object] },
        { index: 1,
          codec_name: 'aac',
          codec_long_name: 'AAC (Advanced Audio Coding)',
          profile: 'LC',
          codec_type: 'audio',
          codec_time_base: '1/48000',
          codec_tag_string: 'mp4a',
          codec_tag: '0x6134706d',
          sample_fmt: 'fltp',
          sample_rate: 48000,
          channels: 2,
          channel_layout: 'stereo',
          bits_per_sample: 0,
          id: 'N/A',
          r_frame_rate: '0/0',
          avg_frame_rate: '0/0',
          time_base: '1/48000',
          start_pts: 0,
          start_time: 0,
          duration_ts: 8414160,
          duration: 175.295,
          bit_rate: 256000,
          max_bit_rate: 262152,
          bits_per_raw_sample: 'N/A',
          nb_frames: 8217,
          nb_read_frames: 'N/A',
          nb_read_packets: 'N/A',
          tags: [Object],
          disposition: [Object] } ],
     format:
      { filename: '/media/trex/safe1/Development/app/videos/test/440386842.mp4',
        nb_streams: 2,
        nb_programs: 0,
        format_name: 'mov,mp4,m4a,3gp,3g2,mj2',
        format_long_name: 'QuickTime / MOV',
        start_time: 0,
        duration: 175.295,
        size: 266214940,
        bit_rate: 12149345,
        probe_score: 100,
        tags:
         { major_brand: 'mp42',
           minor_version: '0',
           compatible_brands: 'mp42mp41isomavc1',
           creation_time: '2015-11-15T19:30:49.000000Z' } },
     chapters: [] }
  • Is there a way to filter out I/B/P frames in an MPEG Video stream and access the macroblock information ?

    1er mars 2014, par Vixian

    I am trying make a program for video analysis of MPEG streams in C or C++.

    I was able to find out the frame types in a video file using

    ffprobe -show_frames -pretty File.mpg | grep 'pict_type' > pict_type.txt

    However based on the order of the frames, it seems that they are in "display" (IBBPBBP...) order not in "transmission" order (IPBBPBBPBB...) and it's not exactly ideal way of doing things as I can't assure the command didn't skip any frames or anything as it's outside of my program.

    I have tried OpenCV, but it appears the information I require is too low-level for OpenCV and I believe the solution lies in ffmpeg or libavcodec but the documentation is a nightmare past the CLI. Although I am open to other solutions !

    The information I require are :

    • The type of each frame (I, B, or P)
    • The total number of macroblocks inside a frame
    • The number of intra-coded macroblocks inside a P frame
    • The number of both forward and backward predicted macroblocks inside a B frame
    • The number of just backward predicted macroblocks inside a B frame
    • The number of just forward predircted macroblocks inside a B frame

    I would be very grateful for your help !

  • Did not able to pipe output of the ffmpeg using nodejs stdout

    4 mars 2014, par rughimire

    I am not being able to pipe the output of the ffmpeg over a stdout.

    Following are the block of code what I coded so far.

       var http = require('http')
       , fs = require('fs')
       var child_process = require("child_process")

       http.createServer(function (req, res) {
       console.log("Request:", dump_req(req) , "\n")

       // path of the
       var path = 'test-mp4.mp4'  //test-mp4-long.mp4
       , stat = fs.statSync(path)
       , total = stat.size


       var range = req.headers.range
       , parts = range.replace(/bytes=/, "").split("-")
       , partialstart = parts[0]
       , partialend = parts[1]
       , start = parseInt(partialstart, 10)
       , end = partialend ? parseInt(partialend, 10) : total-1
       , chunksize = (end-start)+1


       console.log('RANGE: ' + start + ' - ' + end + ' = ' + chunksize +  "\n")


       var ffmpeg = child_process.spawn("ffmpeg",[
               "-i", path,             // path
               "-b:v" , "64k",         // bitrate to 64k
               "-bufsize", "64k",
               "-"                     // Output to STDOUT
           ]);


       //set header
       res.writeHead(206
       , { 'Content-Range': 'bytes ' + start + '-' + end + '/' + total
       , 'Accept-Ranges': 'bytes', 'Content-Length': chunksize
       , 'Content-Type': 'video/mp4'
       })

       stdout[ params[1] ] = ffmpeg.stdout

       // Pipe the video output to the client response
       ffmpeg.stdout.pipe(res);

       console.log("Response", dump_res(res), "\n")
       }).listen(1337)

    When i replaced the ffmpeg stuffs from above code, all works fine. Following is the part of the code when i replace the ffmpeg stuffs.

    var file = fs.createReadStream(path, {start: start, end: end})

    And piping like :

    file.pipe(res)

    What wrong I am running ?

    Edit :
    The ffmpeg command works fine. I have tested this through the command line and generating proper output.