Zorbing icon

fluent-ffmpeg.d.ts

Zorbing | PRO | 03/10/19 12:52:26 PM UTC | 0 ⭐ | 10666 👁️ | Never ⏰ | []
ECMAScript |

65.71 KB

|

None

|

0 👍

/

0 👎

// Type definitions for fluent-ffmpeg 2.0.1
// Project: https://www.npmjs.com/package/fluent-ffmpeg
// Definitions by: Zorbing <https://github.com/Zorbing>
 
/* =================== USAGE ===================
 
    import * as ffmpeg from "fluent-ffmpeg";
 
 =============================================== */
 
/// <reference path="../../typings/node/node.d.ts" />
 
declare module Ffprobe
{
    interface TagData
    {
        [key: string]: string;
    }
    
    interface DispositionData
    {
        // possible values: 0, 1
        default: number;
        // possible values: 0
        dub: number;
        // possible values: 0
        original: number;
        // possible values: 0
        comment: number;
        // possible values: 0
        lyrics: number;
        // possible values: 0
        karaoke: number;
        // possible values: 0, 1
        forced: number;
        // possible values: 0
        hearing_impaired: number;
        // possible values: 0
        visual_impaired: number;
        // possible values: 0
        clean_effects: number;
        // possible values: 0
        attached_pic: number;
    }
    
    interface StreamData
    {
        // possible values: 0, 1, 2, 3, 4
        index: number;
        // possible values: "mpeg4", "ac3", "h264", "aac", "mp3", "fraps", "pcm_s16le", "srt", "rawvideo", "pcm_s32le", "pcm_alaw", "wmav2", "wmv2", "flac", "vp8", "vorbis", "pgssub"
        codec_name: string;
        // possible values: "MPEG-4 part 2", "ATSC A/52A (AC-3)", "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10", "AAC (Advanced Audio Coding)", "MP3 (MPEG audio layer 3)", "Fraps", "PCM signed 16-bit little-endian", "SubRip subtitle", "raw video", "PCM signed 32-bit little-endian", "PCM A-law / G.711 A-law", "Windows Media Audio 2", "Windows Media Video 8", "FLAC (Free Lossless Audio Codec)", "On2 VP8", "Vorbis", "HDMV Presentation Graphic Stream subtitles"
        codec_long_name: string;
        // possible values: "Simple Profile", "unknown", "Constrained Baseline", "LC", "Advanced Simple Profile", "Main", "High", "Baseline", "High 10"
        profile: string;
        // possible values: "video", "audio", "subtitle"
        codec_type: string;
        // possible values: "1/25", "1/48000", "1/60", "1/44100", "1/30", "1/192000", "1/50", "1001/48000", "1/1000", "1/50000", "50/2997", "500/29917", "1/48", "1001/60000", "1001/120000", "1/24", "1001/30000", "1/60000", "1/30000", "1/15", "1/59922", "1/32000", "1/90000", "1/180000", "1/16000"
        codec_time_base: string;
        // possible values: "XVID", "[0] [0][0]", "avc1", "mp4a", "U[0][0][0]", "FPS1", "[1][0][0][0]", "[0][0][0][0]", "IYUV", "UYVY", "[6][0][0][0]", "DIVX", "DX50", "AVC1", "a[1][0][0]", "WMV2", "sowt", "HDMV", "AC-3", "[144][0][0][0]"
        codec_tag_string: string;
        // possible values: "0x44495658", "0x2000", "0x31637661", "0x6134706d", "0x0055", "0x31535046", "0x0001", "0x0000", "0x56555949", "0x59565955", "0x0006", "0x58564944", "0x30355844", "0x31435641", "0x0161", "0x32564d57", "0x74776f73", "0x564d4448", "0x332d4341", "0x0090"
        codec_tag: string;
        // possible values: "N/A", "0x1011", "0x1100", "0x1200"
        id: string;
        // possible values: "25/1", "0/0", "30/1", "30000/1001", "359/12", "24/1", "60000/1001", "24000/1001", "15/1", "29961/1000", "29917/1000", "2997/100", "21/1"
        r_frame_rate: string;
        // possible values: "25/1", "0/0", "3620000/120667", "30/1", "30000/1001", "3505000/116841", "474500/15833", "24/1", "60000/1001", "197386875/3293071", "102195000/1704953", "73386000/1224323", "264000/8801", "24000/1001", "15/1", "29961/1000", "358760/11971", "29917/1000", "2997/100", "4025000/192617"
        avg_frame_rate: string;
        // possible values: "1/25", "1/32000", "1/48000", "1/1000", "1/44100", "1/24000", "1/30", "1/192000", "1/25000", "1/15360", "1/30000", "1/90000", "1/60000", "1/48", "1/24", "1001/30000", "1/40000", "1/15", "1/29961", "1/50000", "1/29917", "1/29970", "1/16000"
        time_base: string;
        // possible values: 0, 1000, "-1600", 24, 6006, 3003, 1001, 2000, 2002, 93600
        start_pts: number | string;
        // possible values: 0, 0.04, "-0.033333", 0.024, 0.066733, 0.033367, 0.041667, 0.083417, 0.033333, 1.04
        start_time: number | string;
        // possible values: 6354, "N/A", 5134, 5335, 7471, 362001, 15948854, 7523, 7383, 20303, 10786, 24341, 14219, 7628, 165, 7551, 15965, 6659, 16517, 13889, 9673, 8820, 5438, 7138, 8364, 10112, 6442, 7036, 7048, 6385, 15712, 6046, 6850, 7160, 920000, 1770496, 620544, 1925696, 146880, 8688640, 4926000, 4867072, 3334331, 6375424, 4337333, 5540864, 3769766, 116841, 5150703, 158330, 6981603, 7812096, 4252000, 2342340, 1241088, 2522520, 1344512, 33513480, 17869824, 52689136, 28094464, 6666660, 3552256, 7477470, 3983360, 8918910, 4756480, 27837810, 14842880, 4675671, 2490368, 3409906, 1812480, 6121615, 3262464, 630630, 334848, 11863852, 8720384, 105612, 4655153, 37200, 34177024, 15473458, 11372544, 19311292, 14193664, 8261632, 5620615, 16122106, 14812160, 10172162, 9345024, 101, 110, 36, 98, 91, 100, 130, 25847808, 17586569, 8800256, 5987000, 6898688, 3911000, 12105728, 6890000, 22792770, 12151808, 160, 162000, 325632, 5281792, 3302299, 3420, 3298, 3414, 1713, 201, 14090076, 12944384, 3961856, 2695693, 4937728, 3355000, 3347456, 2277275, 956000, 844799, 1591200, 782288, 501000, 883712, 17463296, 11879868, 2113, 9213204, 8464384, 4981977, 9963936, 621621, 328704, 1810809, 961536, 299275, 13196263, 447000, 657408, 5885952, 3993000, 444000, 711680, 1499896, 702000, 702720, 768000, 1474560, 3135600, 3136320, 3467106, 617690
        duration_ts: number | string;
        // possible values: 254.16, "N/A", 205.36, 213.4, 298.84, 362.001, 361.652018, 300.92, 295.32, 812.12, 431.44, 973.64, 568.76, 305.12, 5.5, 302.04, 638.6, 266.36, 660.68, 555.56, 386.92, 352.8, 217.52, 285.52, 334.56, 404.48, 257.68, 281.44, 281.92, 255.4, 628.48, 241.84, 274, 286.4, 36.8, 36.885333, 40.4, 40.118667, 146.88, 197.021315, 197.04, 110.364444, 111.144367, 144.567438, 144.577767, 125.643175, 125.658867, 116.841, 116.795986, 158.33, 158.312993, 177.145034, 177.166667, 26.026, 25.856, 28.028, 28.010667, 372.372, 372.288, 585.434844, 585.301333, 74.074, 74.005333, 83.083, 82.986667, 99.099, 99.093333, 309.309, 309.226667, 51.9519, 51.882667, 37.887844, 37.76, 68.017944, 67.968, 7.007, 6.976, 197.730867, 197.741134, 105.612, 105.559025, 775, 774.989206, 257.890967, 257.880816, 321.854867, 321.851791, 187.338594, 187.353833, 335.877208, 335.876644, 211.920042, 211.905306, 4.04, 4.4, 1.44, 4.083333, 3.036367, 3.336667, 4.337667, 586.118095, 586.218967, 199.55229, 199.566667, 156.432834, 156.44, 274.506304, 275.6, 253.253, 253.162667, 6.666667, 6.75, 6.784, 110.037333, 110.076633, 114.114, 110.043267, 113.9138, 114.2, 8.04, 293.54325, 293.523447, 89.838005, 89.856433, 111.966621, 111.978906, 75.906032, 75.909167, 19.12, 19.15644, 17.68, 17.738957, 20.04, 20.038821, 395.993107, 395.9956, 2.113, 191.94175, 191.936145, 207.582375, 207.582, 6.9069, 6.848, 20.1201, 20.032, 299.275, 299.234989, 14.9, 14.907211, 133.468299, 133.469265, 14.814815, 14.826667, 1499.896, 7.8, 7.808, 30.72, 34.84, 34.848, 38.5234, 38.605625
        duration: number | string;
        // possible values: 1852202, 256000, 2569227, 829146, 384000, 1044664, 270535, 95899, 1731717, 1586138, 1104475, 2483692, 192000, 1546473, 1761655, 1773095, 279355095, 6144000, 2025392, 922588, 1728848, 1008664, 1578126, 1644263, 1140841, 2180493, 1623289, 1531830, 2262475, 2511546, 3844410, 2632761, 3493214, 1222194, 1463390, 2480590, 1346989, 6366106, 317375, 1936035, 127592, "N/A", 224000, 125477, 500433, 123159, 1944978, 119249, 624795, 125485, 530664, 217188, 93428, 1286720, 151239, 115782, 120616, 12030229, 128029, 11991343, 128116, 11981900, 128000, 12044352, 128003, 12064919, 127999, 12001121, 128009, 12025206, 128031, 11993789, 128015, 12080969, 12223455, 12092907, 5335816, 128014, 2534167, 192018, 5464002, 149159, 5299188, 150629, 2307724, 151457, 5743521, 151720, 112185, 133613, 1607011, 151622, 1863445, 151384, 279244800, 627787156, 698112000, 710948571, 1787713979, 3072000, 1005381818, 1536000, 1004377441, 6523709, 705600, 121236, 350089, 101656, 504881, 104617, 81677, 125572, 3537420, 11998423, 3085237, 3671070, 189375, 192086, 12235437, 13332803, 11675521, 1105138325, 8855662, 11004924, 5206145, 320000, 3232384, 1411200, 277862400, 1841436, 151791, 109750, 155564, 123229, 350629, 108220, 539481, 7055040, 317588, 3479319, 125704, 1322685, 189588, 123269, 76564, 40000, 185000, 1868851, 151411, 18800288, 11576333, 11988697, 936366, 125889, 9074853, 94459, 131590, 3025401, 12057179, 127596, 16744190, 95966
        bit_rate: number | string;
        // possible values: "N/A", 111496, 348750, 127852, 153656, 195232, 145112, 153272, 113776, 176696, 135656, 201416, 213992, 195656, 182408, 197208, 243296, 183680, 183664, 137288, 170560, 129656, 143632, 271500, 192000, 188456, 126504, 138960, 125792, 390354, 125704, 189837, 205808, 187080, 181896, 178016, 199500, 128000, 96000
        max_bit_rate: number | string;
        // possible values: "N/A", 8, 32, 16, 10
        bits_per_raw_sample: number | string;
        // possible values: 6354, 8135680, 5134, 6573056, 5335, 10246656, 7471, 9564160, 10860, 15575, 7523, 9631744, 7383, 14177280, 20303, 25990144, 10786, 10353382, 24341, 31159296, 14219, 18202624, 7628, 9765888, 165, 1056000, 7551, 9666560, 15965, 20438016, 6659, 8524800, 16517, 21141760, 13889, 17779712, 9673, 12383232, 8820, 16937472, 5438, 6963200, 7138, 13708800, 8364, 10708992, 10112, 12946432, 6442, 6182986, 7036, 13512192, 7048, 9024512, 6385, 8175616, 15712, 20114432, 6046, 7739392, 6850, 6574822, 7160, 9167872, 920, 1729, 1212, 1881, "N/A", 8485, 4926, 4753, 3331, 6226, 4333, 5411, 3766, 3505, 5030, 4745, 6818, 7629, 4252, 780, 1680, 1313, 11160, 17451, 35091, 27436, 2220, 3469, 2490, 3890, 2970, 4645, 9270, 14495, 3114, 2432, 2271, 1770, 4077, 3186, 210, 327, 5926, 8516, 3168, 4546, 18600, 33376, 7729, 11106, 9646, 13861, 8068, 5615, 8053, 14465, 5081, 9126, 101, 110, 36, 98, 196000, 91, 145746, 100, 160160, 130, 191291, 25242, 17569, 8594, 5987, 6737, 3911, 11822, 6890, 7590, 11867, 160, 215040, 162, 318, 5158, 3299, 3420, 5032427, 3298, 4852908, 3414, 4563069, 1713, 5033280, 201, 7038, 12641, 3869, 2693, 4822, 3355, 3269, 2275, 478, 825, 442, 764, 501, 863, 17054, 11868, 4602, 8266, 4977, 9963936, 414, 321, 1206, 939, 8969, 12887, 447, 642, 5748, 3993, 444, 695, 768, 1440, 805, 603
        nb_frames: number | string;
        // possible values: "N/A"
        nb_read_frames: string;
        // possible values: "N/A"
        nb_read_packets: string;
        disposition: DispositionData;
        tags: TagData;
    }
    
    interface VideoStreamData extends StreamData
    {
        // possible values: 720, 540, 1920, 512, 640, 480, 1280, 150, 320, 2000, 1728, 1440
        width: number;
        // possible values: 576, 360, 1200, 384, 1080, 480, 268, 720, 320, 350, 90, 270, 240, 1120, 356, 1088
        height: number;
        // possible values: 720, 544, 1920, 512, 640, 480, 1280, 150, 320, 2000, 1728, 1440
        coded_width: number;
        // possible values: 576, 368, 1200, 384, 1088, 480, 272, 720, 320, 352, 1080, 90, 240, 1120, 356
        coded_height: number;
        // possible values: 0, 1, 2
        has_b_frames: number;
        // possible values: "1:1", "0:1", "481:480", "10240:10239", "4:3"
        sample_aspect_ratio: string;
        // possible values: "5:4", "3:2", "0:1", "4:3", "16:9", "120:67", "48:35", "481:270", "25:14", "8:5", "16384:10239", "160:89", "30:17"
        display_aspect_ratio: string;
        // possible values: "yuv420p", "yuvj420p", "bgra", "uyvy422", "yuv420p10le"
        pix_fmt: string;
        // possible values: 3, 30, 5, "-99", 41, 31, 40, 21, 13, 1, 51, 50, 11, 42
        level: number | string;
        // possible values: "N/A", "pc", "tv"
        color_range: string;
        // possible values: "unknown", "bt709", "bt470bg"
        color_space: string;
        // possible values: "unknown", "bt470m", "iec61966-2-4"
        color_transfer: string;
        // possible values: "unknown", "bt709"
        color_primaries: string;
        // possible values: "left", "unspecified"
        chroma_location: string;
        // possible values: "N/A"
        timecode: string;
        // possible values: 1, 3, 4, 2, 12
        refs: number;
        // possible values: 0
        quarter_sample?: number;
        // possible values: 0
        divx_packed?: number;
        // possible values: "true", "false"
        is_avc?: string;
        // possible values: 4, 2, 0
        nal_length_size?: number;
    }
    
    interface AudioStreamData extends StreamData
    {
        // possible values: "fltp", "s16p", "s16", "s32"
        sample_fmt: string;
        // possible values: 48000, 44100, 192000, 32000, 16000
        sample_rate: number;
        // possible values: 2, 1
        channels: number;
        // possible values: "stereo", "unknown", "mono"
        channel_layout: string;
        // possible values: 0, 16, 32, 8
        bits_per_sample: number;
        // possible values: "-1"
        dmix_mode?: string;
        // possible values: "-1.000000"
        ltrt_cmixlev?: string;
        // possible values: "-1.000000"
        ltrt_surmixlev?: string;
        // possible values: "-1.000000"
        loro_cmixlev?: string;
        // possible values: "-1.000000"
        loro_surmixlev?: string;
    }
    
    interface SubtitleStreamData extends StreamData
    {
        // possible values: "N/A", 1920
        width: number | string;
        // possible values: "N/A", 1080
        height: number | string;
    }
    
    interface FormatData
    {
        filename: string;
        // possible values: 2, 5, 1, 3
        nb_streams: number;
        // possible values: 0, 1
        nb_programs: number;
        // possible values: "avi", "mov,mp4,m4a,3gp,3g2,mj2", "matroska,webm", "asf", "mpegts"
        format_name: string;
        // possible values: "AVI (Audio Video Interleaved)", "QuickTime / MOV", "Matroska / WebM", "ASF (Advanced / Active Streaming Format)", "MPEG-TS (MPEG-2 Transport Stream)"
        format_long_name: string;
        // possible values: 0, "-0.033333", 1.04
        start_time: number | string;
        // possible values: 254.16, 205.36, 213.4, 298.84, 362, 300.92, 295.32, 812.12, 431.44, 973.64, 568.76, 305.12, 5.5, 302.04, 638.6, 266.36, 660.68, 555.56, 386.92, 352.8, 217.52, 285.52, 334.56, 404.48, 257.68, 281.44, 281.92, 255.4, 628.48, 241.84, 274, 286.4, 36.885333, 40.4, 146.88, 197.04, 111.143333, 144.576667, 125.658333, 116.84, 158.33, 177.166667, 26.026, 28.028, 372.372, 585.434844, 74.074, 83.083, 99.099, 309.309, 51.9519, 37.887844, 68.017944, 7.007, 197.74, 105.611667, 775, 257.89, 321.853333, 187.353333, 335.876667, 211.92, 4.04, 4.4, 1.44, 4.083333, 3.036367, 3.336667, 4.337667, 586.218333, 199.566667, 156.44, 275.6, 253.253, 6.666667, 6.784, 110.076633, 114.114, 110.043267, 113.9138, 114.2, 8.04, 293.541667, 89.855, 111.978333, 75.908333, 19.156444, 17.739, 20.04, 395.995, 2.113, 191.941667, 207.582375, 6.9069, 20.1201, 299.275, 14.907211, 133.468333, 14.826667, 276.068, 1439.563, 33.012, 1499.896, 7.808, 30.72, 34.848, 38.592
        duration: number;
        // possible values: 67293478, 72803810, 32656624, 48933286, 17039901, 75113908, 73070414, 138911218, 144693098, 220305764, 144025568, 77737826, 195127976, 86478210, 94710296, 66408538, 105017344, 127943304, 92338812, 67660232, 66539174, 71978396, 75168266, 127776130, 87314314, 149079280, 102130128, 120002332, 116748756, 52285174, 91784682, 57726490, 30805998, 10462421, 37602221, 15477613, 28758614, 13495228, 10352421, 4628755, 28585936, 5289637, 39579811, 42525792, 564008000, 891877194, 112965829, 126041862, 150636741, 468950129, 79414866, 58592591, 104035400, 4817909, 67446449, 74185119, 528186602, 79359280, 237280548, 5818919, 73938316, 53438088, 139627008, 342149120, 349065120, 124423584, 904759288, 349060608, 378160640, 415547904, 4052992, 34720184, 15197287, 3691843, 126257496, 384109574, 2784754, 3266868, 171055560, 186154740, 163351288, 15771587072, 132316672, 161936290, 78870132, 66304968, 277869568, 73226986, 3010874, 6670818, 6172404, 17643411, 7983693, 3808350, 10022059, 88060, 48530992, 527993947, 10136912, 30537776, 39979584, 17272651, 3816383, 5972195, 53106341, 458933255, 2354207, 421659500, 20840448, 46801441, 96337920, 81903536
        size: number;
        // possible values: 2118145, 2836143, 1224240, 1309952, 376572, 1996913, 1979423, 1368381, 2682979, 1810161, 2025818, 2038223, 283822510, 2290510, 1186474, 1994549, 1271627, 1842368, 1909207, 1534245, 2447192, 2016766, 1797423, 2527217, 2710782, 4237614, 2898130, 3758882, 1486109, 1729579, 2679844, 1612471, 6681462, 2071766, 2048051, 628404, 2070019, 746744, 659083, 316929, 1444372, 238854, 12166237, 12138088, 12117087, 12187551, 12200321, 12136476, 12160505, 12128974, 12228983, 12371797, 12236229, 5500681, 2728692, 5619463, 5452248, 2461802, 5897855, 248468, 1761082, 2017292, 276489124, 622089309, 691218059, 691242133, 1772589770, 691209124, 996350283, 996318551, 7474971, 473819, 609211, 188792, 3664949, 12133623, 3341704, 3852438, 12431743, 13529101, 11871823, 1105672367, 9619247, 11772554, 5538934, 4644831, 276487132, 1995682, 268065, 476579, 650511, 7368136, 3600515, 1520299, 202468, 333402, 2022739, 20348315, 11741200, 12142196, 1068704, 9269420, 228751, 3222407, 1538935, 2550403, 570509, 2249006, 21352918, 12187875, 22116143, 16978344
        bit_rate: number;
        // possible values: 100
        probe_score: number;
        tags: TagData;
    }
    
    interface Metadata
    {
        streams: StreamData[];
        format: FormatData;
    }
    
    interface Callback<T>
    {
        (err: any, ffprobeData: Ffprobe.Metadata): T;
    }
}
 
declare module Ffmpeg
{
    interface CommandOptions
    {
        /**
         * input file name or readable stream (ignored if an input file is passed to the constructor)
         */
        source?: string | NodeJS.ReadableStream;
        /**
         * ffmpeg timeout in seconds (defaults to no timeout)
         */
        timeout?: number;
        /**
         * directory to load module presets from (defaults to `lib/presets` directory in fluent-ffmpeg tree)
         */
        presets?: string;
        /**
         * @see presets
         */
        preset?: string;
        /**
         * ffmpeg niceness value, between -20 and 20; ignored on Windows platforms (default to 0)
         */
        niceness?: number;
        /**
         * @see niceness
         */
        priority?: number;
        /**
         * logger object with `debug()`, `info()`, `warn()` and `error()` methods (defaults to no logging)
         */
        logger?: {
            debug: Function;
            info: Function;
            warn: Function;
            error: Function;
        };
    }
    
    interface FilterData
    {
        [key: string]: {
            description: string;    
            input: string;  
            multipleInputs: boolean;    
            output: string;
            multipleOutputs: boolean;
        };
    }
    interface FilterCallback<T>
    {
        (err: any, filters: FilterData): T;
    }
    
    interface CodecData
    {
        [key: string]: {
            description: string;
            canDecode: boolean;
            canEncode: boolean;
        };
    }
    interface CodecCallback<T>
    {
        (err: any, codecs: CodecData): T;
    }
    
    interface EncoderData
    {
        [key: string]: {
            description: string;
            type: boolean;
            frameMT: boolean;
            sliceMT: boolean;
            experimental: boolean;
            drawHorizBand: boolean;
            directRendering: boolean;
        };
    }
    interface EncoderCallback<T>
    {
        (err: any, encoders: EncoderData): T;
    }
    
    interface FormatData
    {
        [key: string]: {
            description: string;
            canDemux: boolean;
            canMux: boolean;
        };
    }
    interface FormatCallback<T>
    {
        (err: any, formats: FormatData): T;
    }
    
    /**
     * If multiple timemarks are passed and no variable format token ('%s' or '%i') is specified in the filename pattern, _%i will be added automatically.
     */
    interface ScreenshotsConfig
    {
        /**
         * Output folder for generated image files.
         * Defaults to the current folder.
         */
        folder?: string;
        /**
         * Output filename pattern.
         * Defaults to "tn.png".
         * 
         * The `filename` option specifies a filename pattern for generated files.
         * It may contain the following format tokens:
         *  - '%s': offset in seconds
         *  - '%w': screenshot width
         *  - '%h': screenshot height
         *  - '%r': screenshot resolution (same as '%wx%h')
         *  - '%f': input filename
         *  - '%b': input basename (filename w/o extension)
         *  - '%i': index of screenshot in timemark array (can be zero-padded by using it like %000i)
         */
        filename?: string;
        /**
         * Specifies how many thumbnails to generate.
         * When using this option, thumbnails are generated at regular intervals in the video (for example, when requesting 3 thumbnails, at 25%, 50% and 75% of the video length).
         * `count` is ignored when `timemarks` or `timestamps` is specified.
         */
        count?: number;
        /**
         * Specifies an array of timestamps in the video where thumbnails should be taken.
         * Each timestamp may be a number (in seconds), a percentage string (eg. "50%") or a timestamp string with format "hh:mm:ss.xxx" (where hours, minutes and milliseconds are both optional).
         */
        timestamps?: number[] | string[];
        /**
         * @see timestamps
         */
        timemarks?: number[] | string[];
        /**
         * Specifies a target size for thumbnails (with the same format as the `.size()` method).
         * *Note:* you should not use the `.size()` method when generating thumbnails.
         */
        size?: string;
    }
    
    interface FilterObject
    {
        filter: string;
        options?: string | string[] | { [key: string]: string };
    }
    
    interface FilterSpecification
    {
        filter: string;
        inputs?: string | string[];
        outputs?: string | string[];
        options?: string | string | any;
    }
    
    interface CodecDataEventData
    {
        format: string;
        audio: string;
        video: string;
        duration: string;
        audio_details: string[];
        video_details: string[];
    }
    
    interface ProgressEventData
    {
        frames: number;
        currentFps: number;
        currentKbps: number;
        targetSize: number;
        timemark: string;
        percent: number;
    }
    
    interface Command extends NodeJS.EventEmitter
    {
        /**
        * Clone an ffmpeg command
        *
        * This method is useful when you want to process the same input multiple times.
        * It returns a new FfmpegCommand instance with the exact same options.
        *
        * All options set _after_ the clone() call will only be applied to the instance
        * it has been called on.
        *
        * @example
        *   var command = ffmpeg('/path/to/source.avi')
        *     .audioCodec('libfaac')
        *     .videoCodec('libx264')
        *     .format('mp4');
        *
        *   command.clone()
        *     .size('320x200')
        *     .save('/path/to/output-small.mp4');
        *
        *   command.clone()
        *     .size('640x400')
        *     .save('/path/to/output-medium.mp4');
        *
        *   command.save('/path/to/output-original-size.mp4');
        *
        * @method FfmpegCommand#clone
        * @return FfmpegCommand
        */
        clone(): Command;
        
        
        
        /**
        * ==================
        * file: ./ffprobe.js
        * ==================
        */
        
        /**
        * A callback passed to the {@link FfmpegCommand#ffprobe} method.
        *
        * @callback FfmpegCommand~ffprobeCallback
        *
        * @param {Error|null} err error object or null if no error happened
        * @param {Object} ffprobeData ffprobe output data; this object
        *   has the same format as what the following command returns:
        *
        *     `ffprobe -print_format json -show_streams -show_format INPUTFILE`
        * @param {Array} ffprobeData.streams stream information
        * @param {Object} ffprobeData.format format information
        */
        
        /**
        * Run ffprobe on last specified input
        *
        * @method FfmpegCommand#ffprobe
        * @category Metadata
        *
        * @param {FfmpegCommand~ffprobeCallback} callback callback function
        *
        */
        ffprobe<T>(callback: Ffprobe.Callback<T>): T;
        
        /**
        * Run ffprobe on last specified input
        *
        * @method FfmpegCommand#ffprobe
        * @category Metadata
        *
        * @param {Number} [index] 0-based index of input to probe (defaults to last input)
        * @param {FfmpegCommand~ffprobeCallback} callback callback function
        *
        */
        ffprobe<T>(index: number, callback: Ffprobe.Callback<T>): T;
        
        
        
        /**
        * ===================
        * file: ./receipes.js
        * ===================
        */
        
        /**
        * Execute ffmpeg command and save output to a file
        *
        * @method FfmpegCommand#save
        * @category Processing
        * @aliases saveToFile
        *
        * @param {String} output file path
        * @return FfmpegCommand
        */
        save(output: string): Command;
        
        /**
        * @see FfmpegCommand.saveToFile
        */
        saveToFile(output: string): Command;
        
        /**
        * Execute ffmpeg command and save output to a stream
        *
        * If 'stream' is not specified, a PassThrough stream is created and returned.
        * 'options' will be used when piping ffmpeg output to the output stream
        * (@see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options)
        *
        * @method FfmpegCommand#pipe
        * @category Processing
        * @aliases stream,writeToStream
        *
        * @param {stream.Writable} [stream] output stream
        * @param {Object} [options={}] pipe options
        * @return Output stream
        */
        pipe(stream?: NodeJS.WritableStream, options?);
        
        /**
        * @see FfmpegCommand.pipe
        */
        writeToStream(stream?, options?);
        
        /**
        * @see FfmpegCommand.pipe
        */
        stream(stream?, options?);
        
        /**
        * Generate images from a video
        *
        * Note: this method makes the command emit a 'filenames' event with an array of
        * the generated image filenames.
        *
        * @method FfmpegCommand#screenshots
        * @category Processing
        * @aliases takeScreenshots,thumbnail,thumbnails,screenshot
        *
        * @param {Number|Object} [config=1] screenshot count or configuration object with
        *   the following keys:
        * @param {Number} [config.count] number of screenshots to take; using this option
        *   takes screenshots at regular intervals (eg. count=4 would take screens at 20%, 40%,
        *   60% and 80% of the video length).
        * @param {String} [config.folder='.'] output folder
        * @param {String} [config.filename='tn.png'] output filename pattern, may contain the following
        *   tokens:
        *   - '%s': offset in seconds
        *   - '%w': screenshot width
        *   - '%h': screenshot height
        *   - '%r': screenshot resolution (same as '%wx%h')
        *   - '%f': input filename
        *   - '%b': input basename (filename w/o extension)
        *   - '%i': index of screenshot in timemark array (can be zero-padded by using it like `%000i`)
        * @param {Number[]|String[]} [config.timemarks] array of timemarks to take screenshots
        *   at; each timemark may be a number of seconds, a '[[hh:]mm:]ss[.xxx]' string or a
        *   'XX%' string.  Overrides 'count' if present.
        * @param {Number[]|String[]} [config.timestamps] alias for 'timemarks'
        * @param {Boolean} [config.fastSeek] use fast seek (less accurate)
        * @param {String} [config.size] screenshot size, with the same syntax as {@link FfmpegCommand#size}
        * @param {String} [folder] output folder (legacy alias for 'config.folder')
        * @return FfmpegCommand
        */
        screenshots(config?: number | ScreenshotsConfig, folder?: string): Command;
        
        /**
        * @see FfmpegCommand.screenshots
        */
        takeScreenshots(config?: number | ScreenshotsConfig, folder?: string): Command;
        
        /**
        * @see FfmpegCommand.screenshots
        */
        thumbnail(config?: number | ScreenshotsConfig, folder?: string): Command;
        
        /**
        * @see FfmpegCommand.screenshots
        */
        thumbnails(config?: number | ScreenshotsConfig, folder?: string): Command;
        
        /**
        * @see FfmpegCommand.screenshots
        */
        screenshot(config?: number | ScreenshotsConfig, folder?: string): Command;
        
        /**
        * Merge (concatenate) inputs to a single file
        *
        * @method FfmpegCommand#concat
        * @category Processing
        * @aliases concatenate,mergeToFile
        *
        * @param {String|Writable} target output file or writable stream
        * @param {Object} [options] pipe options (only used when outputting to a writable stream)
        * @return FfmpegCommand
        */
        concat(target: string | NodeJS.WritableStream, options?): Command;
        
        /**
        * @see FfmpegCommand.concat
        */
        mergeToFile(target: string | NodeJS.WritableStream, options?): Command;
        
        /**
        * @see FfmpegCommand.concat
        */
        concatenate(target: string | NodeJS.WritableStream, options?): Command;
        
        
        
        /**
        * ====================
        * file: ./processor.js
        * ====================
        */
        
        /**
        * Run ffmpeg command
        *
        * @method FfmpegCommand#run
        * @category Processing
        * @aliases exec,execute
        */
        run(): void;
        
        /**
        * @see FfmpegCommand.run
        */
        exec(): void;
        
        /**
        * @see FfmpegCommand.run
        */
        execute(): void;
        
        /**
        * Renice current and/or future ffmpeg processes
        *
        * Ignored on Windows platforms.
        *
        * @method FfmpegCommand#renice
        * @category Processing
        *
        * @param {Number} [niceness=0] niceness value between -20 (highest priority) and 20 (lowest priority)
        * @return FfmpegCommand
        */
        renice(niceness?: number): Command;
        
        /**
        * Kill current ffmpeg process, if any
        *
        * @method FfmpegCommand#kill
        * @category Processing
        *
        * @param {String} [signal=SIGKILL] signal name
        * @return FfmpegCommand
        */
        kill(signal?: string): Command;
        
        
        
        /**
        * =======================
        * file: ./capabilities.js
        * =======================
        */
        
        /**
        * Manually define the ffmpeg binary full path.
        *
        * @method FfmpegCommand#setFfmpegPath
        *
        * @param {String} ffmpegPath The full path to the ffmpeg binary.
        * @return FfmpegCommand
        */
        setFfmpegPath(ffmpegPath: string): Command;
        
        /**
        * Manually define the ffprobe binary full path.
        *
        * @method FfmpegCommand#setFfprobePath
        *
        * @param {String} ffprobePath The full path to the ffprobe binary.
        * @return FfmpegCommand
        */
        setFfprobePath(ffprobePath: string): Command;
        
        /**
        * Manually define the flvtool2/flvmeta binary full path.
        *
        * @method FfmpegCommand#setFlvtoolPath
        *
        * @param {String} flvtool The full path to the flvtool2 or flvmeta binary.
        * @return FfmpegCommand
        */
        setFlvtoolPath(flvtool: string): Command;
        
        /**
        * A callback passed to {@link FfmpegCommand#availableFilters}.
        *
        * @callback FfmpegCommand~filterCallback
        * @param {Error|null} err error object or null if no error happened
        * @param {Object} filters filter object with filter names as keys and the following
        *   properties for each filter:
        * @param {String} filters.description filter description
        * @param {String} filters.input input type, one of 'audio', 'video' and 'none'
        * @param {Boolean} filters.multipleInputs whether the filter supports multiple inputs
        * @param {String} filters.output output type, one of 'audio', 'video' and 'none'
        * @param {Boolean} filters.multipleOutputs whether the filter supports multiple outputs
        */
        
        /**
        * Query ffmpeg for available filters
        *
        * @method FfmpegCommand#availableFilters
        * @category Capabilities
        * @aliases getAvailableFilters
        *
        * @param {FfmpegCommand~filterCallback} callback callback function
        */
        availableFilters<T>(callback: FilterCallback<T>): T;
        
        /**
        * @see FfmpegCommand.availableFilters
        */
        getAvailableFilters<T>(callback: FilterCallback<T>): T;
        
        /**
        * A callback passed to {@link FfmpegCommand#availableCodecs}.
        *
        * @callback FfmpegCommand~codecCallback
        * @param {Error|null} err error object or null if no error happened
        * @param {Object} codecs codec object with codec names as keys and the following
        *   properties for each codec (more properties may be available depending on the
        *   ffmpeg version used):
        * @param {String} codecs.description codec description
        * @param {Boolean} codecs.canDecode whether the codec is able to decode streams
        * @param {Boolean} codecs.canEncode whether the codec is able to encode streams
        */
    
        /**
        * Query ffmpeg for available codecs
        *
        * @method FfmpegCommand#availableCodecs
        * @category Capabilities
        * @aliases getAvailableCodecs
        *
        * @param {FfmpegCommand~codecCallback} callback callback function
        */
        availableCodecs<T>(callback: CodecCallback<T>): T;
        
        /**
        * @see FfmpegCommand.availableCodecs
        */
        getAvailableCodecs<T>(callback: CodecCallback<T>): T;
        
        /**
        * A callback passed to {@link FfmpegCommand#availableEncoders}.
        *
        * @callback FfmpegCommand~encodersCallback
        * @param {Error|null} err error object or null if no error happened
        * @param {Object} encoders encoders object with encoder names as keys and the following
        *   properties for each encoder:
        * @param {String} encoders.description codec description
        * @param {Boolean} encoders.type "audio", "video" or "subtitle"
        * @param {Boolean} encoders.frameMT whether the encoder is able to do frame-level multithreading
        * @param {Boolean} encoders.sliceMT whether the encoder is able to do slice-level multithreading
        * @param {Boolean} encoders.experimental whether the encoder is experimental
        * @param {Boolean} encoders.drawHorizBand whether the encoder supports draw_horiz_band
        * @param {Boolean} encoders.directRendering whether the encoder supports direct encoding method 1
        */
    
        /**
        * Query ffmpeg for available encoders
        *
        * @method FfmpegCommand#availableEncoders
        * @category Capabilities
        * @aliases getAvailableEncoders
        *
        * @param {FfmpegCommand~encodersCallback} callback callback function
        */
        availableEncoders<T>(callback: EncoderCallback<T>): T;
        
        /**
        * @see FfmpegCommand.availableEncoders
        */
        getAvailableEncoders<T>(callback: EncoderCallback<T>): T;
        
        /**
        * A callback passed to {@link FfmpegCommand#availableFormats}.
        *
        * @callback FfmpegCommand~formatCallback
        * @param {Error|null} err error object or null if no error happened
        * @param {Object} formats format object with format names as keys and the following
        *   properties for each format:
        * @param {String} formats.description format description
        * @param {Boolean} formats.canDemux whether the format is able to demux streams from an input file
        * @param {Boolean} formats.canMux whether the format is able to mux streams into an output file
        */
    
        /**
        * Query ffmpeg for available formats
        *
        * @method FfmpegCommand#availableFormats
        * @category Capabilities
        * @aliases getAvailableFormats
        *
        * @param {FfmpegCommand~formatCallback} callback callback function
        */
        availableFormats<T>(callback: FormatCallback<T>): T;
        
        /**
        * @see FfmpegCommand.availableFormats
        */
        getAvailableFormats<T>(callback: FormatCallback<T>): T;
        
        
        
        /**
        * ========================
        * file: ./options/input.js
        * ========================
        */
        
        /**
        * Add an input to command
        *
        * Also switches "current input", that is the input that will be affected
        * by subsequent input-related methods.
        *
        * Note: only one stream input is supported for now.
        *
        * @method FfmpegCommand#input
        * @category Input
        * @aliases mergeAdd,addInput
        *
        * @param {String|Readable} source input file path or readable stream
        * @return FfmpegCommand
        */
        input(source: string | NodeJS.ReadableStream): Command;
        
        /**
        * @see FfmpegCommand.input
        */
        mergeAdd(source: string | NodeJS.ReadableStream): Command;
        
        /**
        * @see FfmpegCommand.input
        */
        addInput(source: string | NodeJS.ReadableStream): Command;
        
        /**
        * Specify input format for the last specified input
        *
        * @method FfmpegCommand#inputFormat
        * @category Input
        * @aliases withInputFormat,fromFormat
        *
        * @param {String} format input format
        * @return FfmpegCommand
        */
        inputFormat(format: string): Command;
        
        /**
        * @see FfmpegCommand.inputFormat
        */
        withInputFormat(format: string): Command;
        
        /**
        * @see FfmpegCommand.inputFormat
        */
        fromFormat(format: string): Command;
        
        /**
        * Specify input FPS for the last specified input
        * (only valid for raw video formats)
        *
        * @method FfmpegCommand#inputFps
        * @category Input
        * @aliases withInputFps,withInputFPS,withFpsInput,withFPSInput,inputFPS,inputFps,fpsInput
        *
        * @param {Number} fps input FPS
        * @return FfmpegCommand
        */
        FPSInput(fps: number): Command;
        
        /**
        * @see FfmpegCommand.FPSInput
        */
        withInputFps(fps: number): Command;
        
        /**
        * @see FfmpegCommand.FPSInput
        */
        withInputFPS(fps: number): Command;
        
        /**
        * @see FfmpegCommand.FPSInput
        */
        withFpsInput(fps: number): Command;
        
        /**
        * @see FfmpegCommand.FPSInput
        */
        withFPSInput(fps: number): Command;
        
        /**
        * @see FfmpegCommand.FPSInput
        */
        inputFPS(fps: number): Command;
        
        /**
        * @see FfmpegCommand.FPSInput
        */
        inputFps(fps: number): Command;
        
        /**
        * @see FfmpegCommand.FPSInput
        */
        fpsInput(fps: number): Command;
        
        /**
        * Use native framerate for the last specified input
        *
        * @method FfmpegCommand#native
        * @category Input
        * @aliases nativeFramerate,withNativeFramerate
        *
        * @return FfmmegCommand
        */
        native(): Command;
        
        /**
        * @see FfmpegCommand.native
        */
        nativeFramerate(): Command;
        
        /**
        * @see FfmpegCommand.native
        */
        withNativeFramerate(): Command;
        
        /**
        * Specify input seek time for the last specified input
        *
        * @method FfmpegCommand#seekInput
        * @category Input
        * @aliases setStartTime,seekTo
        *
        * @param {String|Number} seek seek time in seconds or as a '[hh:[mm:]]ss[.xxx]' string
        * @return FfmpegCommand
        */
        seekInput(seek: string | number): Command;
        
        /**
        * @see FfmpegCommand.seekInput
        */
        setStartTime(seek: string | number): Command;
        
        /**
        * Loop over the last specified input
        *
        * @method FfmpegCommand#loop
        * @category Input
        *
        * @param {String|Number} [duration] loop duration in seconds or as a '[[hh:]mm:]ss[.xxx]' string
        * @return FfmpegCommand
        */
        loop(duration?: string | number): Command;
        
        
        
        /**
        * ========================
        * file: ./options/audio.js
        * ========================
        */
        
        /**
        * Disable audio in the output
        *
        * @method FfmpegCommand#noAudio
        * @category Audio
        * @aliases withNoAudio
        * @return FfmpegCommand
        */
        noAudio(): Command;
        
        /**
        * @see FfmpegCommand.noAudio
        */
        withNoAudio(): Command;
        
        /**
        * Specify audio codec
        *
        * @method FfmpegCommand#audioCodec
        * @category Audio
        * @aliases withAudioCodec
        *
        * @param {String} codec audio codec name
        * @return FfmpegCommand
        */
        audioCodec(codec: string): Command;
        
        /**
        * @see FfmpegCommand.audioCodec
        */
        withAudioCodec(codec: string): Command;
        
        /**
        * Specify audio bitrate
        *
        * @method FfmpegCommand#audioBitrate
        * @category Audio
        * @aliases withAudioBitrate
        *
        * @param {String|Number} bitrate audio bitrate in kbps (with an optional 'k' suffix)
        * @return FfmpegCommand
        */
        audioBitrate(bitrate: string | number): Command;
        
        /**
        * @see FfmpegCommand.audioBitrate
        */
        withAudioBitrate(bitrate: string | number): Command;
        
        /**
        * Specify audio channel count
        *
        * @method FfmpegCommand#audioChannels
        * @category Audio
        * @aliases withAudioChannels
        *
        * @param {Number} channels channel count
        * @return FfmpegCommand
        */
        audioChannels(channels: number): Command;
        
        /**
        * @see FfmpegCommand.audioChannels
        */
        withAudioChannels(channels: number): Command;
        
        /**
        * Specify audio frequency
        *
        * @method FfmpegCommand#audioFrequency
        * @category Audio
        * @aliases withAudioFrequency
        *
        * @param {Number} freq audio frequency in Hz
        * @return FfmpegCommand
        */
        audioFrequency(freq: number): Command;
        
        /**
        * @see FfmpegCommand.audioFrequency
        */
        withAudioFrequency(freq: number): Command;
        
        /**
        * Specify audio quality
        *
        * @method FfmpegCommand#audioQuality
        * @category Audio
        * @aliases withAudioQuality
        *
        * @param {Number} quality audio quality factor
        * @return FfmpegCommand
        */
        audioQuality(quality: number): Command;
        
        /**
        * @see FfmpegCommand.audioQuality
        */
        withAudioQuality(quality: number): Command;
        
        /**
        * Specify custom audio filter(s)
        *
        * Can be called both with one or many filters, or a filter array.
        *
        * @example
        * command.audioFilters('filter1');
        *
        * @example
        * command.audioFilters('filter1', 'filter2=param1=value1:param2=value2');
        *
        * @method FfmpegCommand#audioFilters
        * @aliases withAudioFilter,withAudioFilters,audioFilter
        * @category Audio
        *
        * @param {...String} filters audio filter strings
        * @return FfmpegCommand
        */
        audioFilters(...filters: string[]): Command;
        
        /**
        * Specify custom audio filter(s)
        *
        * Can be called both with one or many filters, or a filter array.
        *
        * @example
        * command.audioFilters(
        *   {
        *     filter: 'filter1',
        *     options: ['value1', 'value2']
        *   },
        *   {
        *     filter: 'filter2',
        *     options: { param1: 'value1', param2: 'value2' }
        *   }
        * );
        *
        * @method FfmpegCommand#audioFilters
        * @aliases withAudioFilter,withAudioFilters,audioFilter
        * @category Audio
        *
        * @param {...Object} filters audio filter specifications with the following properties:
        * @param {String} filters.filter filter name
        * @param {String|String[]|Object} [filters.options] filter option string, array, or object
        * @return FfmpegCommand
        */
        audioFilters(...filters: FilterObject[]): Command;
        
        /**
        * Specify custom audio filter(s)
        *
        * Can be called both with one or many filters, or a filter array.
        *
        * @example
        * command.audioFilters(['filter1', 'filter2']);
        *
        * @example
        * command.audioFilters([
        *   {
        *     filter: 'filter1'
        *   },
        *   {
        *     filter: 'filter2',
        *     options: 'param=value:param=value'
        *   }
        * ]);
        *
        * @method FfmpegCommand#audioFilters
        * @aliases withAudioFilter,withAudioFilters,audioFilter
        * @category Audio
        *
        * @param {String[]|Object[]} filters audio filter string array or specification array, each with the following properties:
        * @param {String} filters.filter filter name
        * @param {String|String[]|Object} [filters.options] filter option string, array, or object
        * @return FfmpegCommand
        */
        audioFilters(filters: string[] | FilterObject[]): Command;
        
        /**
        * @see FfmpegCommand.audioFilters
        */
        withAudioFilter(...filters: string[]): Command;
        
        /**
        * @see FfmpegCommand.audioFilters
        */
        withAudioFilter(filters: string[]): Command;
        
        /**
        * @see FfmpegCommand.audioFilters
        */
        withAudioFilter(...filters: FilterObject[]): Command;
        
        /**
        * @see FfmpegCommand.audioFilters
        */
        withAudioFilter(filters: FilterObject[]): Command;
        
        /**
        * @see FfmpegCommand.audioFilters
        */
        withAudioFilters(...filters: string[]): Command;
        
        /**
        * @see FfmpegCommand.audioFilters
        */
        withAudioFilters(filters: string[]): Command;
        
        /**
        * @see FfmpegCommand.audioFilters
        */
        withAudioFilters(...filters: FilterObject[]): Command;
        
        /**
        * @see FfmpegCommand.audioFilters
        */
        withAudioFilters(filters: FilterObject[]): Command;
        
        /**
        * @see FfmpegCommand.audioFilters
        */
        audioFilter(...filters: string[]): Command;
        
        /**
        * @see FfmpegCommand.audioFilters
        */
        audioFilter(filters: string[]): Command;
        
        /**
        * @see FfmpegCommand.audioFilters
        */
        audioFilter(...filters: FilterObject[]): Command;
        
        /**
        * @see FfmpegCommand.audioFilters
        */
        audioFilter(filters: FilterObject[]): Command;
        
        
        
        /**
        * ========================
        * file: ./options/video.js
        * ========================
        */
        
        /**
        * Disable video in the output
        *
        * @method FfmpegCommand#noVideo
        * @category Video
        * @aliases withNoVideo
        *
        * @return FfmpegCommand
        */
        noVideo(): Command;
        
        /**
        * @see FfmpegCommand.noVideo
        */
        withNoVideo(): Command;
        
        /**
        * Specify video codec
        *
        * @method FfmpegCommand#videoCodec
        * @category Video
        * @aliases withVideoCodec
        *
        * @param {String} codec video codec name
        * @return FfmpegCommand
        */
        videoCodec(codec: string): Command;
        
        /**
        * @see FfmpegCommand.videoCodec
        */
        withVideoCodec(codec: string): Command;
        
        /**
        * Specify video bitrate
        *
        * @method FfmpegCommand#videoBitrate
        * @category Video
        * @aliases withVideoBitrate
        *
        * @param {String|Number} bitrate video bitrate in kbps (with an optional 'k' suffix)
        * @param {Boolean} [constant=false] enforce constant bitrate
        * @return FfmpegCommand
        */
        videoBitrate(bitrate: string | number, constant? : boolean): Command;
        
        /**
        * @see FfmpegCommand.videoBitrate
        */
        withVideoBitrate(bitrate: string | number, constant? : boolean): Command;
        
        /**
        * Specify custom video filter(s)
        *
        * Can be called both with one or many filters, or a filter array.
        *
        * @example
        * command.videoFilters('filter1');
        *
        * @example
        * command.videoFilters('filter1', 'filter2=param1=value1:param2=value2');
        *
        * @method FfmpegCommand#videoFilters
        * @category Video
        * @aliases withVideoFilter,withVideoFilters,videoFilter
        *
        * @param {...String} filters video filter strings
        * @return FfmpegCommand
        */
        videoFilters(...filters: string[]): Command;
        
        /**
        * Specify custom video filter(s)
        *
        * Can be called both with one or many filters, or a filter array.
        *
        * @example
        * command.videoFilters(
        *   {
        *     filter: 'filter1',
        *     options: ['value1', 'value2']
        *   },
        *   {
        *     filter: 'filter2',
        *     options: { param1: 'value1', param2: 'value2' }
        *   }
        * );
        *
        * @method FfmpegCommand#videoFilters
        * @category Video
        * @aliases withVideoFilter,withVideoFilters,videoFilter
        *
        * @param {...Object} filters video filter specifications with the following properties:
        * @param {String} filters.filter filter name
        * @param {String|String[]|Object} [filters.options] filter option string, array, or object
        * @return FfmpegCommand
        */
        videoFilters(...filters: FilterObject[]): Command;
        
        /**
        * Specify custom video filter(s)
        *
        * Can be called both with one or many filters, or a filter array.
        *
        * @example
        * command.videoFilters(['filter1', 'filter2']);
        *
        * @example
        * command.videoFilters([
        *   {
        *     filter: 'filter1'
        *   },
        *   {
        *     filter: 'filter2',
        *     options: 'param=value:param=value'
        *   }
        * ]);
        *
        * @method FfmpegCommand#videoFilters
        * @category Video
        * @aliases withVideoFilter,withVideoFilters,videoFilter
        *
        * @param {String[]|Object[]} filters video filter string array or specification array, each with the following properties:
        * @param {String} filters.filter filter name
        * @param {String|String[]|Object} [filters.options] filter option string, array, or object
        * @return FfmpegCommand
        */
        videoFilters(filters: string[] | FilterObject[]): Command;
        
        /**
        * @see FfmpegCommand.videoFilters
        */
        withVideoFilter(...filters: string[]): Command;
        
        /**
        * @see FfmpegCommand.videoFilters
        */
        withVideoFilter(filters: string[]): Command;
        
        /**
        * @see FfmpegCommand.videoFilters
        */
        withVideoFilter(...filters: FilterObject[]): Command;
        
        /**
        * @see FfmpegCommand.videoFilters
        */
        withVideoFilter(filters: FilterObject[]): Command;
        
        /**
        * @see FfmpegCommand.videoFilters
        */
        withVideoFilters(...filters: string[]): Command;
        
        /**
        * @see FfmpegCommand.videoFilters
        */
        withVideoFilters(filters: string[]): Command;
        
        /**
        * @see FfmpegCommand.videoFilters
        */
        withVideoFilters(...filters: FilterObject[]): Command;
        
        /**
        * @see FfmpegCommand.videoFilters
        */
        withVideoFilters(filters: FilterObject[]): Command;
        
        /**
        * @see FfmpegCommand.videoFilters
        */
        videoFilter(...filters: string[]): Command;
        
        /**
        * @see FfmpegCommand.videoFilters
        */
        videoFilter(filters: string[]): Command;
        
        /**
        * @see FfmpegCommand.videoFilters
        */
        videoFilter(...filters: FilterObject[]): Command;
        
        /**
        * @see FfmpegCommand.videoFilters
        */
        videoFilter(filters: FilterObject[]): Command;
        
        /**
        * Specify output FPS
        *
        * @method FfmpegCommand#fps
        * @category Video
        * @aliases withOutputFps,withOutputFPS,withFpsOutput,withFPSOutput,withFps,withFPS,outputFPS,outputFps,fpsOutput,FPSOutput,FPS
        *
        * @param {Number} fps output FPS
        * @return FfmpegCommand
        */
        fps(fps: number): Command;
        
        /**
        * @see FfmpegCommand.fps
        */
        withOutputFps(fps: number): Command;
        
        /**
        * @see FfmpegCommand.fps
        */
        withOutputFPS(fps: number): Command;
        
        /**
        * @see FfmpegCommand.fps
        */
        withFpsOutput(fps: number): Command;
        
        /**
        * @see FfmpegCommand.fps
        */
        withFPSOutput(fps: number): Command;
        
        /**
        * @see FfmpegCommand.fps
        */
        withFps(fps: number): Command;
        
        /**
        * @see FfmpegCommand.fps
        */
        withFPS(fps: number): Command;
        
        /**
        * @see FfmpegCommand.fps
        */
        outputFPS(fps: number): Command;
        
        /**
        * @see FfmpegCommand.fps
        */
        outputFps(fps: number): Command;
        
        /**
        * @see FfmpegCommand.fps
        */
        fpsOutput(fps: number): Command;
        
        /**
        * @see FfmpegCommand.fps
        */
        FPSOutput(fps: number): Command;
        
        /**
        * @see FfmpegCommand.fps
        */
        FPS(fps: number): Command;
        
        /**
        * Only transcode a certain number of frames
        *
        * @method FfmpegCommand#frames
        * @category Video
        * @aliases takeFrames,withFrames
        *
        * @param {Number} frames frame count
        * @return FfmpegCommand
        */
        frames(frames: number): Command;
        
        /**
        * @see FfmpegCommand.frames
        */
        takeFrames(frames: number): Command;
        
        /**
        * @see FfmpegCommand.frames
        */
        withFrames(frames: number): Command;
        
        
        
        /**
        * ============================
        * file: ./options/videosize.js
        * ============================
        */
        
        /**
        * Keep display aspect ratio
        *
        * This method is useful when converting an input with non-square pixels to an output format
        * that does not support non-square pixels.  It rescales the input so that the display aspect
        * ratio is the same.
        *
        * @method FfmpegCommand#keepDAR
        * @category Video size
        * @aliases keepPixelAspect,keepDisplayAspect,keepDisplayAspectRatio
        *
        * @return FfmpegCommand
        */
        keepDAR(): Command;
        
        /**
        * Only for compatibility, this is not about keeping _pixel_ aspect ratio
        * 
        * @see FfmpegCommand.keepDAR
        */
        keepPixelAspect(): Command;
        
        /**
        * @see FfmpegCommand.keepDAR
        */
        keepDisplayAspect(): Command;
        
        /**
        * @see FfmpegCommand.keepDAR
        */
        keepDisplayAspectRatio(): Command;
        
        /**
        * Set output size
        *
        * The 'size' parameter can have one of 4 forms:
        * - 'X%': rescale to xx % of the original size
        * - 'WxH': specify width and height
        * - 'Wx?': specify width and compute height from input aspect ratio
        * - '?xH': specify height and compute width from input aspect ratio
        *
        * Note: both dimensions will be truncated to multiples of 2.
        *
        * @method FfmpegCommand#size
        * @category Video size
        * @aliases withSize,setSize
        *
        * @param {String} size size string, eg. '33%', '320x240', '320x?', '?x240'
        * @return FfmpegCommand
        */
        size(size: string): Command;
        
        /**
        * @see FfmpegCommand.size
        */
        withSize(size: string): Command;
        
        /**
        * @see FfmpegCommand.size
        */
        setSize(size: string): Command;
        
        /**
        * Set output aspect ratio
        *
        * @method FfmpegCommand#aspect
        * @category Video size
        * @aliases withAspect,withAspectRatio,setAspect,setAspectRatio,aspectRatio
        *
        * @param {String|Number} aspect aspect ratio (number or 'X:Y' string)
        * @return FfmpegCommand
        */
        aspect(aspect: string | number): Command;
        
        /**
        * @see FfmpegCommand.aspect
        */
        withAspect(aspect: string | number): Command;
        
        /**
        * @see FfmpegCommand.aspect
        */
        withAspectRatio(aspect: string | number): Command;
        
        /**
        * @see FfmpegCommand.aspect
        */
        setAspect(aspect: string | number): Command;
        
        /**
        * @see FfmpegCommand.aspect
        */
        setAspectRatio(aspect: string | number): Command;
        
        /**
        * @see FfmpegCommand.aspect
        */
        aspectRatio(aspect: string | number): Command;
        
        /**
        * Enable auto-padding the output
        *
        * @method FfmpegCommand#autopad
        * @category Video size
        * @aliases applyAutopadding,applyAutoPadding,applyAutopad,applyAutoPad,withAutopadding,withAutoPadding,withAutopad,withAutoPad,autoPad
        *
        * @param {Boolean} [pad=true] enable/disable auto-padding
        * @param {String} [color='black'] pad color
        * @return FfmpegCommand
        */
        autopad(pad?: boolean, color?: string): Command;
        
        /**
        * @see FfmpegCommand.autopad
        */
        applyAutopadding(pad?: boolean, color?: string): Command;
        
        /**
        * @see FfmpegCommand.autopad
        */
        applyAutoPadding(pad?: boolean, color?: string): Command;
        
        /**
        * @see FfmpegCommand.autopad
        */
        applyAutopad(pad?: boolean, color?: string): Command;
        
        /**
        * @see FfmpegCommand.autopad
        */
        applyAutoPad(pad?: boolean, color?: string): Command;
        
        /**
        * @see FfmpegCommand.autopad
        */
        withAutopadding(pad?: boolean, color?: string): Command;
        
        /**
        * @see FfmpegCommand.autopad
        */
        withAutoPadding(pad?: boolean, color?: string): Command;
        
        /**
        * @see FfmpegCommand.autopad
        */
        withAutopad(pad?: boolean, color?: string): Command;
        
        /**
        * @see FfmpegCommand.autopad
        */
        withAutoPad(pad?: boolean, color?: string): Command;
        
        /**
        * @see FfmpegCommand.autopad
        */
        autoPad(pad?: boolean, color?: string): Command;
        
        
        
        /**
        * =========================
        * file: ./options/output.js
        * =========================
        */
        
        /**
        * Add output
        *
        * @method FfmpegCommand#output
        * @category Output
        * @aliases addOutput
        *
        * @param {String|Writable} target target file path or writable stream
        * @param {Object} [pipeopts={}] pipe options (only applies to streams)
        * @return FfmpegCommand
        */
        output(target: string | NodeJS.WritableStream): Command;
        
        /**
        * @see FfmpegCommand.output
        */
        addOutput(target: string | NodeJS.WritableStream): Command;
        
        /**
        * Specify output seek time
        *
        * @method FfmpegCommand#seek
        * @category Input
        * @aliases seekOutput
        *
        * @param {String|Number} seek seek time in seconds or as a '[hh:[mm:]]ss[.xxx]' string
        * @return FfmpegCommand
        */
        seek(seek: string | number): Command;
        
        /**
        * @see FfmpegCommand.seek
        */
        seekOutput(seek: string | number): Command;
        
        /**
        * Set output duration
        *
        * @method FfmpegCommand#duration
        * @category Output
        * @aliases withDuration,setDuration
        *
        * @param {String|Number} duration duration in seconds or as a '[[hh:]mm:]ss[.xxx]' string
        * @return FfmpegCommand
        */
        duration(duration: string | number): Command;
        
        /**
        * @see FfmpegCommand.duration
        */
        withDuration(duration: string | number): Command;
        
        /**
        * @see FfmpegCommand.duration
        */
        setDuration(duration: string | number): Command;
        
        /**
        * Set output format
        *
        * @method FfmpegCommand#format
        * @category Output
        * @aliases toFormat,withOutputFormat,outputFormat
        *
        * @param {String} format output format name
        * @return FfmpegCommand
        */
        format(format: string): Command;
        
        /**
        * @see FfmpegCommand.format
        */
        toFormat(format: string): Command;
        
        /**
        * @see FfmpegCommand.format
        */
        withOutputFormat(format: string): Command;
        
        /**
        * @see FfmpegCommand.format
        */
        outputFormat(format: string): Command;
        
        /**
        * Add stream mapping to output
        *
        * @method FfmpegCommand#map
        * @category Output
        *
        * @param {String} spec stream specification string, with optional square brackets
        * @return FfmpegCommand
        */
        map(spec: string): Command;
        
        /**
        * Run flvtool2/flvmeta on output
        *
        * @method FfmpegCommand#flvmeta
        * @category Output
        * @aliases updateFlvMetadata
        *
        * @return FfmpegCommand
        */
        flvmeta(): Command;
        
        /**
        * @see FfmpegCommand.flvmeta
        */
        updateFlvMetadata(): Command;
        
        
        
        /**
        * =========================
        * file: ./options/custom.js
        * =========================
        */
        
        /**
        * Add custom input option(s)
        *
        * When passing a single string or an array, each string containing two
        * words is split (eg. inputOptions('-option value') is supported) for
        * compatibility reasons.  This is not the case when passing more than
        * one argument.
        *
        * @example
        * command.inputOptions('option1');
        *
        * @example
        * command.inputOptions('option1', 'option2');
        *
        * @method FfmpegCommand#inputOptions
        * @category Custom options
        * @aliases addInputOption,addInputOptions,withInputOption,withInputOptions,inputOption
        *
        * @param {...String} options option string(s)
        * @return FfmpegCommand
        */
        inputOptions(...options: string[]): Command;
        
        /**
        * Add custom input option(s)
        *
        * When passing a single string or an array, each string containing two
        * words is split (eg. inputOptions('-option value') is supported) for
        * compatibility reasons.  This is not the case when passing more than
        * one argument.
        *
        * @example
        * command.inputOptions(['option1', 'option2']);
        *
        * @method FfmpegCommand#inputOptions
        * @category Custom options
        * @aliases addInputOption,addInputOptions,withInputOption,withInputOptions,inputOption
        *
        * @param {String[]} options option string array
        * @return FfmpegCommand
        */
        inputOptions(options: string[]): Command;
        
        /**
        * @see FfmpegCommand.inputOptions
        */
        addInputOption(...options: string[]): Command;
        
        /**
        * @see FfmpegCommand.inputOptions
        */
        addInputOption(options: string[]): Command;
        
        /**
        * @see FfmpegCommand.inputOptions
        */
        addInputOptions(...options: string[]): Command;
        
        /**
        * @see FfmpegCommand.inputOptions
        */
        addInputOptions(options: string[]): Command;
        
        /**
        * @see FfmpegCommand.inputOptions
        */
        withInputOption(...options: string[]): Command;
        
        /**
        * @see FfmpegCommand.inputOptions
        */
        withInputOption(options: string[]): Command;
        
        /**
        * @see FfmpegCommand.inputOptions
        */
        withInputOptions(...options: string[]): Command;
        
        /**
        * @see FfmpegCommand.inputOptions
        */
        withInputOptions(options: string[]): Command;
        
        /**
        * @see FfmpegCommand.inputOptions
        */
        inputOption(...options: string[]): Command;
        
        /**
        * @see FfmpegCommand.inputOptions
        */
        inputOption(options: string[]): Command;
        
        /**
        * Add custom output option(s)
        *
        * @example
        * command.outputOptions('option1');
        *
        * @example
        * command.outputOptions('option1', 'option2');
        *
        * @method FfmpegCommand#outputOptions
        * @category Custom options
        * @aliases addOutputOption,addOutputOptions,addOption,addOptions,withOutputOption,withOutputOptions,withOption,withOptions,outputOption
        *
        * @param {...String} options option string(s)
        * @return FfmpegCommand
        */
        outputOptions(...options: string[]): Command;
        
        /**
        * Add custom output option(s)
        *
        * @example
        * command.outputOptions(['option1', 'option2']);
        *
        * @method FfmpegCommand#outputOptions
        * @category Custom options
        * @aliases addOutputOption,addOutputOptions,addOption,addOptions,withOutputOption,withOutputOptions,withOption,withOptions,outputOption
        *
        * @param {String[]} options option string array
        * @return FfmpegCommand
        */
        outputOptions(options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        addOutputOption(...options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        addOutputOption(options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        addOutputOptions(...options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        addOutputOptions(options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        addOption(...options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        addOption(options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        addOptions(...options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        addOptions(options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        withOutputOption(...options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        withOutputOption(options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        withOutputOptions(...options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        withOutputOptions(options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        withOption(...options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        withOption(options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        withOptions(...options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        withOptions(options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        outputOption(...options: string[]): Command;
        
        /**
        * @see FfmpegCommand.outputOptions
        */
        outputOption(options: string[]): Command;
        
        /**
        * Specify a complex filtergraph
        *
        * Calling this method will override any previously set filtergraph, but you can set
        * as many filters as needed in one call.
        *
        * @example <caption>Overlay an image over a video (using a filtergraph string)</caption>
        *   ffmpeg()
        *     .input('video.avi')
        *     .input('image.png')
        *     .complexFilter('[0:v][1:v]overlay[out]', ['out']);
        *
        * @example <caption>Overlay an image over a video (using a filter array)</caption>
        *   ffmpeg()
        *     .input('video.avi')
        *     .input('image.png')
        *     .complexFilter([{
        *       filter: 'overlay',
        *       inputs: ['0:v', '1:v'],
        *       outputs: ['out']
        *     }], ['out']);
        *
        * @example <caption>Split video into RGB channels and output a 3x1 video with channels side to side</caption>
        *  ffmpeg()
        *    .input('video.avi')
        *    .complexFilter([
        *      // Duplicate video stream 3 times into streams a, b, and c
        *      { filter: 'split', options: '3', outputs: ['a', 'b', 'c'] },
        *
        *      // Create stream 'red' by cancelling green and blue channels from stream 'a'
        *      { filter: 'lutrgb', options: { g: 0, b: 0 }, inputs: 'a', outputs: 'red' },
        *
        *      // Create stream 'green' by cancelling red and blue channels from stream 'b'
        *      { filter: 'lutrgb', options: { r: 0, b: 0 }, inputs: 'b', outputs: 'green' },
        *
        *      // Create stream 'blue' by cancelling red and green channels from stream 'c'
        *      { filter: 'lutrgb', options: { r: 0, g: 0 }, inputs: 'c', outputs: 'blue' },
        *
        *      // Pad stream 'red' to 3x width, keeping the video on the left, and name output 'padded'
        *      { filter: 'pad', options: { w: 'iw*3', h: 'ih' }, inputs: 'red', outputs: 'padded' },
        *
        *      // Overlay 'green' onto 'padded', moving it to the center, and name output 'redgreen'
        *      { filter: 'overlay', options: { x: 'w', y: 0 }, inputs: ['padded', 'green'], outputs: 'redgreen'},
        *
        *      // Overlay 'blue' onto 'redgreen', moving it to the right
        *      { filter: 'overlay', options: { x: '2*w', y: 0 }, inputs: ['redgreen', 'blue']},
        *    ]);
        *
        * @method FfmpegCommand#complexFilter
        * @category Custom options
        * @aliases filterGraph
        *
        * @param {String|Array} spec filtergraph string or array of filter specification
        *   objects, each having the following properties:
        * @param {String} spec.filter filter name
        * @param {String|Array} [spec.inputs] (array of) input stream specifier(s) for the filter,
        *   defaults to ffmpeg automatically choosing the first unused matching streams
        * @param {String|Array} [spec.outputs] (array of) output stream specifier(s) for the filter,
        *   defaults to ffmpeg automatically assigning the output to the output file
        * @param {Object|String|Array} [spec.options] filter options, can be omitted to not set any options
        * @param {Array} [map] (array of) stream specifier(s) from the graph to include in
        *   ffmpeg output, defaults to ffmpeg automatically choosing the first matching streams.
        * @return FfmpegCommand
        */
        complexFilter(spec: string | FilterSpecification[], map: string[]): Command;
        
        /**
        * @see FfmpegCommand.complexFilter
        */
        filterGraph(spec: string | FilterSpecification[], map: string[]): Command;
        
        /**
        * Use preset
        *
        * @method FfmpegCommand#preset
        * @category Miscellaneous
        * @aliases usingPreset
        *
        * @param {String|Function} preset preset name or preset function
        * @return FfmpegCommand
        */
        preset(preset: string | Function): Command;
        
        /**
        * @see FfmpegCommand.preset
        */
        usingPreset(preset: string | Function): Command;
        
        on(event: 'codecData', listener: (data: CodecDataEventData) => any): Command;
        on(event: 'progress', listener: (info: ProgressEventData) => any): Command;
        on(event: 'end', listener: () => any): Command;
        on(event: 'error', listener: (error: any) => any): Command;
        on(event: string, listener: Function): Command;
    }
    
    interface CommandStatic
    {
        (options?: CommandOptions): Command;
        (file: string | NodeJS.ReadableStream, options?: CommandOptions): Command;
        new (options?: CommandOptions): Command;
        new (file: string | NodeJS.ReadableStream, options?: CommandOptions): Command;
        
        /**
        * @see (new FfmpegCommand(file)).ffprobe(callback)
        */
        ffprobe(file, callback: (error: any, metadata: Ffprobe.Metadata) => void);
        
        /**
        * @see (new FfmpegCommand()).setFfmpegPath(path)
        */
        setFfmpegPath(path: string): void;
        
        /**
        * @see (new FfmpegCommand()).setFfprobePath(path)
        */
        setFfprobePath(path: string): void;
        
        /**
        * @see (new FfmpegCommand()).setFlvtoolPath(path)
        */
        setFlvtoolPath(path: string): void;
        
        /**
        * @see (new FfmpegCommand()).availableFilters(callback)
        */
        availableFilters(callback: Function): void;
        /**
        * @see (new FfmpegCommand()).availableFilters(callback)
        */
        getAvailableFilters(callback: Function): void;
        
        /**
        * @see (new FfmpegCommand()).availableCodecs(callback)
        */
        availableCodecs(callback: Function): void;
        /**
        * @see (new FfmpegCommand()).availableCodecs(callback)
        */
        getAvailableCodecs(callback: Function): void;
        
        /**
        * @see (new FfmpegCommand()).availableFormats(callback)
        */
        availableFormats(callback: Function): void;
        /**
        * @see (new FfmpegCommand()).availableFormats(callback)
        */
        getAvailableFormats(callback: Function): void;
    }
}
 
declare module "fluent-ffmpeg"
{
    export = ffmpeg;
}
 
declare var ffmpeg: Ffmpeg.CommandStatic;

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎