Recherche avancée

Médias (0)

Mot : - Tags -/xmlrpc

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

Autres articles (102)

  • MediaSPIP 0.1 Beta version

    25 avril 2011, par

    MediaSPIP 0.1 beta is the first version of MediaSPIP proclaimed as "usable".
    The zip file provided here only contains the sources of MediaSPIP in its standalone version.
    To get a working installation, you must manually install all-software dependencies on the server.
    If you want to use this archive for an installation in "farm mode", you will also need to proceed to other manual (...)

  • Multilang : améliorer l’interface pour les blocs multilingues

    18 février 2011, par

    Multilang est un plugin supplémentaire qui n’est pas activé par défaut lors de l’initialisation de MediaSPIP.
    Après son activation, une préconfiguration est mise en place automatiquement par MediaSPIP init permettant à la nouvelle fonctionnalité d’être automatiquement opérationnelle. Il n’est donc pas obligatoire de passer par une étape de configuration pour cela.

  • 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

Sur d’autres sites (11909)

  • Video merging ffmpeg taking more than 15 minutes for 5mb video

    27 juillet 2018, par stan wyck

    I am using below ffmpeg command by bravobit ffmpeg android library to merge videos with different resolution and bit rate it takes more than 15 minutes for total of 5mb videos

    -i video1.mp4 -i video2.3gp -filter_complex [1:v]scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih),
    pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2,setsar=1[v1];
    [2:v]scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih),
    pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2,setsar=1[v2];
    [v1][1:a][v2][2:a]concat=n=2:v=1:a=1[outv][outa]
    "-ab", "48000", "-ac", "2", "-ar", "22050", "-s", "1920x1080", "-vcodec", "libx264", "-crf", "27", "-q", "4", "-preset", "ultrafast", newVideoPath, "-hide_banner"

    Log onSuccess

    ffmpeg version n4.0-39-gda39990 Copyright (c) 2000-2018 the FFmpeg developers
    built with gcc 4.9.x (GCC) 20150123 (prerelease)
    configuration : —target-os=linux —cross-prefix=/root/bravobit/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- —arch=arm —cpu=cortex-a8 —enable-runtime-cpudetect —sysroot=/root/bravobit/ffmpeg-android/toolchain-android/sysroot —enable-pic —enable-libx264 —enable-ffprobe —enable-libopus —enable-libvorbis —enable-libfdk-aac —enable-libfreetype —enable-libfribidi —enable-libmp3lame —enable-fontconfig —enable-libvpx —enable-libass —enable-yasm —enable-pthreads —disable-debug —enable-version3 —enable-hardcoded-tables —disable-ffplay —disable-linux-perf —disable-doc —disable-shared —enable-static —enable-runtime-cpudetect —enable-nonfree —enable-network —enable-avresample —enable-avformat —enable-avcodec —enable-indev=lavfi —enable-hwaccels —enable-ffmpeg —enable-zlib —enable-gpl —enable-small —enable-nonfree —pkg-config=pkg-config —pkg-config-flags=—static —prefix=/root/bravobit/ffmpeg-android/build/armeabi-v7a —extra-cflags=’-I/root/bravobit/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all’ —extra-ldflags=’-L/root/bravobit/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie’ —extra-cxxflags=
    libavutil 56. 14.100 / 56. 14.100
    libavcodec 58. 18.100 / 58. 18.100
    libavformat 58. 12.100 / 58. 12.100
    libavdevice 58. 3.100 / 58. 3.100
    libavfilter 7. 16.100 / 7. 16.100
    libavresample 4. 0. 0 / 4. 0. 0
    libswscale 5. 1.100 / 5. 1.100
    libswresample 3. 1.100 / 3. 1.100
    libpostproc 55. 1.100 / 55. 1.100
    Input #0, lavfi, from ’anullsrc=channel_layout=stereo:sample_rate=44100’ :
    Duration : N/A, start : 0.000000, bitrate : 705 kb/s
    Stream #0:0 : Audio : pcm_u8, 44100 Hz, stereo, u8, 705 kb/s
    Input #1, mov,mp4,m4a,3gp,3g2,mj2, from ’/sdcard/DigitalDashboard/temp/10.57.08.mp4’ :
    Metadata :
    major_brand : isom
    minor_version : 512
    compatible_brands : isomiso2avc1mp41
    encoder : Lavf58.12.100
    Duration : 00:00:15.00, start : 0.000000, bitrate : 1495 kb/s
    Stream #1:0(und) : Video : h264 (avc1 / 0x31637661), yuv420p, 1024x576 [SAR 1:1 DAR 16:9], 1337 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata :
    handler_name : VideoHandler
    Stream #1:1(und) : Audio : aac (mp4a / 0x6134706D), 22050 Hz, stereo, fltp, 153 kb/s (default)
    Metadata :
    handler_name : SoundHandler
    Input #2, mov,mp4,m4a,3gp,3g2,mj2, from ’/sdcard/DigitalDashboard/temp/10.57.19.mp4’ :
    Metadata :
    major_brand : isom
    minor_version : 512
    compatible_brands : isomiso2avc1mp41
    encoder : Lavf58.12.100
    Duration : 00:00:10.03, start : 0.000000, bitrate : 1823 kb/s
    Stream #2:0(und) : Video : h264 (avc1 / 0x31637661), yuv420p, 1024x576 [SAR 1:1 DAR 16:9], 1671 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata :
    handler_name : VideoHandler
    Stream #2:1(und) : Audio : aac (mp4a / 0x6134706D), 22050 Hz, stereo, fltp, 152 kb/s (default)
    Metadata :
    handler_name : SoundHandler
    Stream mapping :
    Stream #1:0 (h264) -> scale
    Stream #1:1 (aac) -> concat:in0:a0
    Stream #2:0 (h264) -> scale
    Stream #2:1 (aac) -> concat:in1:a0
    concat:out:v0 -> Stream #0:0 (libx264)
    concat:out:a0 -> Stream #0:1 (aac)
    Press [q] to stop, [?] for help
    [libx264 @ 0xb8b42e90] -qscale is ignored, -crf is recommended.
    [libx264 @ 0xb8b42e90] using SAR=1/1
    [libx264 @ 0xb8b42e90] using cpu capabilities : ARMv6 NEON
    [libx264 @ 0xb8b42e90] profile Constrained Baseline, level 3.1
    [libx264 @ 0xb8b42e90] 264 - core 152 r2851M ba24899 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options : cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=27.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
    Output #0, mp4, to ’/sdcard/DigitalDashboard/temp/10.57.25.mp4’ :
    Metadata :
    encoder : Lavf58.12.100
    Stream #0:0 : Video : h264 (libx264) (avc1 / 0x31637661), yuv420p(progressive), 1024x576 [SAR 1:1 DAR 16:9], q=-1—1, 25 fps, 12800 tbn, 25 tbc (default)
    Metadata :
    encoder : Lavc58.18.100 libx264
    Side data :
    cpb : bitrate max/min/avg : 0/0/0 buffer size : 0 vbv_delay : -1
    Stream #0:1 : Audio : aac (mp4a / 0x6134706D), 22050 Hz, stereo, fltp, 48 kb/s (default)
    Metadata :
    encoder : Lavc58.18.100 aac
    frame= 7 fps=0.0 q=0.0 size= 0kB time=00:00:00.37 bitrate= 1.0kbits/s speed=0.737x
    frame= 21 fps= 21 q=27.0 size= 0kB time=00:00:00.88 bitrate= 0.4kbits/s speed=0.879x
    frame= 35 fps= 23 q=26.0 size= 256kB time=00:00:01.48 bitrate=1411.5kbits/s speed=0.979x
    frame= 50 fps= 25 q=27.0 size= 256kB time=00:00:02.04 bitrate=1026.5kbits/s speed=1.01x
    frame= 64 fps= 25 q=26.0 size= 512kB time=00:00:02.60 bitrate=1612.9kbits/s speed=1.02x
    frame= 79 fps= 26 q=25.0 size= 768kB time=00:00:03.20 bitrate=1963.5kbits/s speed=1.05x
    frame= 95 fps= 26 q=22.0 size= 768kB time=00:00:03.85 bitrate=1632.3kbits/s speed=1.07x
    frame= 110 fps= 27 q=24.0 size= 1024kB time=00:00:04.45 bitrate=1881.7kbits/s speed=1.08x
    frame= 126 fps= 27 q=23.0 size= 1024kB time=00:00:05.10 bitrate=1642.2kbits/s speed= 1.1x
    frame= 142 fps= 27 q=24.0 size= 1280kB time=00:00:05.75 bitrate=1821.0kbits/s speed=1.11x
    frame= 157 fps= 28 q=23.0 size= 1280kB time=00:00:06.31 bitrate=1660.3kbits/s speed=1.11x
    frame= 173 fps= 28 q=25.0 size= 1536kB time=00:00:06.96 bitrate=1806.4kbits/s speed=1.12x
    frame= 189 fps= 28 q=26.0 size= 1536kB time=00:00:07.61 bitrate=1652.2kbits/s speed=1.13x
    frame= 204 fps= 28 q=25.0 size= 1792kB time=00:00:08.21 bitrate=1786.0kbits/s speed=1.14x
    frame= 220 fps= 28 q=19.0 size= 1792kB time=00:00:08.87 bitrate=1655.1kbits/s speed=1.15x
    frame= 238 fps= 29 q=18.0 size= 2048kB time=00:00:09.56 bitrate=1753.8kbits/s speed=1.16x
    frame= 254 fps= 29 q=26.0 size= 2048kB time=00:00:10.26 bitrate=1634.7kbits/s speed=1.17x
    frame= 271 fps= 29 q=22.0 size= 2048kB time=00:00:10.91 bitrate=1537.3kbits/s speed=1.18x
    frame= 288 fps= 30 q=21.0 size= 2048kB time=00:00:11.56 bitrate=1450.9kbits/s speed=1.19x
    frame= 305 fps= 30 q=19.0 size= 2304kB time=00:00:12.26 bitrate=1539.5kbits/s speed=1.19x
    frame= 320 fps= 30 q=21.0 size= 2304kB time=00:00:12.86 bitrate=1467.3kbits/s speed=1.19x
    frame= 337 fps= 30 q=22.0 size= 2304kB time=00:00:13.51 bitrate=1396.7kbits/s speed=1.19x
    frame= 354 fps= 30 q=22.0 size= 2304kB time=00:00:14.21 bitrate=1328.2kbits/s speed= 1.2x
    frame= 371 fps= 30 q=20.0 size= 2560kB time=00:00:14.90 bitrate=1406.8kbits/s speed=1.21x
    frame= 387 fps= 30 q=25.0 size= 2560kB time=00:00:15.51 bitrate=1352.1kbits/s speed=1.21x
    frame= 402 fps= 30 q=27.0 size= 2816kB time=00:00:16.11 bitrate=1431.6kbits/s speed= 1.2x
    frame= 416 fps= 30 q=27.0 size= 2816kB time=00:00:16.67 bitrate=1383.7kbits/s speed= 1.2x
    frame= 430 fps= 30 q=27.0 size= 3072kB time=00:00:17.27 bitrate=1456.7kbits/s speed= 1.2x
    frame= 444 fps= 30 q=26.0 size= 3072kB time=00:00:17.83 bitrate=1411.2kbits/s speed=1.19x
    frame= 460 fps= 30 q=25.0 size= 3328kB time=00:00:18.43 bitrate=1478.8kbits/s speed=1.19x
    frame= 476 fps= 30 q=21.0 size= 3584kB time=00:00:19.08 bitrate=1538.3kbits/s speed=1.19x
    frame= 493 fps= 30 q=23.0 size= 3584kB time=00:00:19.78 bitrate=1484.1kbits/s speed= 1.2x
    frame= 511 fps= 30 q=24.0 size= 3840kB time=00:00:20.48 bitrate=1536.0kbits/s speed= 1.2x
    frame= 527 fps= 30 q=23.0 size= 4096kB time=00:00:21.13 bitrate=1588.0kbits/s speed= 1.2x
    frame= 542 fps= 30 q=25.0 size= 4096kB time=00:00:21.78 bitrate=1540.6kbits/s speed=1.21x
    frame= 558 fps= 30 q=25.0 size= 4352kB time=00:00:22.38 bitrate=1592.7kbits/s speed=1.21x
    frame= 574 fps= 30 q=25.0 size= 4352kB time=00:00:22.98 bitrate=1550.9kbits/s speed=1.21x
    frame= 590 fps= 30 q=24.0 size= 4608kB time=00:00:23.63 bitrate=1597.0kbits/s speed=1.21x
    frame= 607 fps= 30 q=17.0 size= 4608kB time=00:00:24.38 bitrate=1548.3kbits/s speed=1.21x
    frame= 622 fps= 30 q=19.0 size= 4608kB time=00:00:24.93 bitrate=1513.7kbits/s speed=1.21x
    frame= 625 fps= 30 q=-1.0 Lsize= 4827kB time=00:00:25.03 bitrate=1579.9kbits/s speed=1.21x
    video:4345kB audio:470kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead : 0.251744%
    [libx264 @ 0xb8b42e90] frame I:3 Avg QP:20.33 size : 86455
    [libx264 @ 0xb8b42e90] frame P:622 Avg QP:23.46 size : 6736
    [libx264 @ 0xb8b42e90] mb I I16..4 : 100.0% 0.0% 0.0%
    [libx264 @ 0xb8b42e90] mb P I16..4 : 1.8% 0.0% 0.0% P16..4 : 37.9% 0.0% 0.0% 0.0% 0.0% skip:60.3%
    [libx264 @ 0xb8b42e90] coded y,uvDC,uvAC intra : 41.0% 51.8% 22.0% inter : 15.3% 10.0% 0.8%
    [libx264 @ 0xb8b42e90] i16 v,h,dc,p : 29% 27% 24% 20%
    [libx264 @ 0xb8b42e90] i8c dc,h,v,p : 42% 23% 22% 14%
    [libx264 @ 0xb8b42e90] kb/s:1423.72
    [aac @ 0xb8b81070] Qavg : 472.000

  • Best approach to real time http streaming to HTML5 video client

    12 octobre 2016, par deandob

    I’m really stuck trying to understand the best way to stream real time output of ffmpeg to a HTML5 client using node.js, as there are a number of variables at play and I don’t have a lot of experience in this space, having spent many hours trying different combinations.

    My use case is :

    1) IP video camera RTSP H.264 stream is picked up by FFMPEG and remuxed into a mp4 container using the following FFMPEG settings in node, output to STDOUT. This is only run on the initial client connection, so that partial content requests don’t try to spawn FFMPEG again.

    liveFFMPEG = child_process.spawn("ffmpeg", [
                   "-i", "rtsp://admin:12345@192.168.1.234:554" , "-vcodec", "copy", "-f",
                   "mp4", "-reset_timestamps", "1", "-movflags", "frag_keyframe+empty_moov",
                   "-"   // output to stdout
                   ],  {detached: false});

    2) I use the node http server to capture the STDOUT and stream that back to the client upon a client request. When the client first connects I spawn the above FFMPEG command line then pipe the STDOUT stream to the HTTP response.

    liveFFMPEG.stdout.pipe(resp);

    I have also used the stream event to write the FFMPEG data to the HTTP response but makes no difference

    xliveFFMPEG.stdout.on("data",function(data) {
           resp.write(data);
    }

    I use the following HTTP header (which is also used and working when streaming pre-recorded files)

    var total = 999999999         // fake a large file
    var partialstart = 0
    var partialend = total - 1

    if (range !== undefined) {
       var parts = range.replace(/bytes=/, "").split("-");
       var partialstart = parts[0];
       var partialend = parts[1];
    }

    var start = parseInt(partialstart, 10);
    var end = partialend ? parseInt(partialend, 10) : total;   // fake a large file if no range reques

    var chunksize = (end-start)+1;

    resp.writeHead(206, {
                     'Transfer-Encoding': 'chunked'
                    , 'Content-Type': 'video/mp4'
                    , 'Content-Length': chunksize // large size to fake a file
                    , 'Accept-Ranges': 'bytes ' + start + "-" + end + "/" + total
    });

    3) The client has to use HTML5 video tags.

    I have no problems with streaming playback (using fs.createReadStream with 206 HTTP partial content) to the HTML5 client a video file previously recorded with the above FFMPEG command line (but saved to a file instead of STDOUT), so I know the FFMPEG stream is correct, and I can even correctly see the video live streaming in VLC when connecting to the HTTP node server.

    However trying to stream live from FFMPEG via node HTTP seems to be a lot harder as the client will display one frame then stop. I suspect the problem is that I am not setting up the HTTP connection to be compatible with the HTML5 video client. I have tried a variety of things like using HTTP 206 (partial content) and 200 responses, putting the data into a buffer then streaming with no luck, so I need to go back to first principles to ensure I’m setting this up the right way.

    Here is my understanding of how this should work, please correct me if I’m wrong :

    1) FFMPEG should be setup to fragment the output and use an empty moov (FFMPEG frag_keyframe and empty_moov mov flags). This means the client does not use the moov atom which is typically at the end of the file which isn’t relevant when streaming (no end of file), but means no seeking possible which is fine for my use case.

    2) Even though I use MP4 fragments and empty MOOV, I still have to use HTTP partial content, as the HTML5 player will wait until the entire stream is downloaded before playing, which with a live stream never ends so is unworkable.

    3) I don’t understand why piping the STDOUT stream to the HTTP response doesn’t work when streaming live yet if I save to a file I can stream this file easily to HTML5 clients using similar code. Maybe it’s a timing issue as it takes a second for the FFMPEG spawn to start, connect to the IP camera and send chunks to node, and the node data events are irregular as well. However the bytestream should be exactly the same as saving to a file, and HTTP should be able to cater for delays.

    4) When checking the network log from the HTTP client when streaming a MP4 file created by FFMPEG from the camera, I see there are 3 client requests : A general GET request for the video, which the HTTP server returns about 40Kb, then a partial content request with a byte range for the last 10K of the file, then a final request for the bits in the middle not loaded. Maybe the HTML5 client once it receives the first response is asking for the last part of the file to load the MP4 MOOV atom ? If this is the case it won’t work for streaming as there is no MOOV file and no end of the file.

    5) When checking the network log when trying to stream live, I get an aborted initial request with only about 200 bytes received, then a re-request again aborted with 200 bytes and a third request which is only 2K long. I don’t understand why the HTML5 client would abort the request as the bytestream is exactly the same as I can successfully use when streaming from a recorded file. It also seems node isn’t sending the rest of the FFMPEG stream to the client, yet I can see the FFMPEG data in the .on event routine so it is getting to the FFMPEG node HTTP server.

    6) Although I think piping the STDOUT stream to the HTTP response buffer should work, do I have to build an intermediate buffer and stream that will allow the HTTP partial content client requests to properly work like it does when it (successfully) reads a file ? I think this is the main reason for my problems however I’m not exactly sure in Node how to best set that up. And I don’t know how to handle a client request for the data at the end of the file as there is no end of file.

    7) Am I on the wrong track with trying to handle 206 partial content requests, and should this work with normal 200 HTTP responses ? HTTP 200 responses works fine for VLC so I suspect the HTML5 video client will only work with partial content requests ?

    As I’m still learning this stuff its difficult to work through the various layers of this problem (FFMPEG, node, streaming, HTTP, HTML5 video) so any pointers will be greatly appreciated. I have spent hours researching on this site and the net, and I have not come across anyone who has been able to do real time streaming in node but I can’t be the first, and I think this should be able to work (somehow !).

  • 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: [] }