Newest 'ffmpeg' Questions - Stack Overflow

http://stackoverflow.com/questions/tagged/ffmpeg

Les articles publiés sur le site

  • Optimizing Painting video encoding in Android

    26 octobre 2013, par coder000001

    I want to create live painting video as export feature for a painting application.

    I can create a video with a series of images, with the use of a library ( FFMPEG or MediaCodec). But, this would require too much processing power to compare the images and encode the video.

    While drawing, I know exactly which pixels are changed. So, I can save lot of processing if I can pass this info to FFMPEG, instead of having the FFMPEG figure this out from the images.

    Is there away to efficiently encode the video for this purpose ?

  • How to convert video or audio directly through php5-ffmpeg API [on hold]

    25 octobre 2013, par user2719515

    How to convert video or audio directly through php5-ffmpeg API without using exec()?

  • FFMPEG enocde flv with alpha channel

    25 octobre 2013, par tree

    I'm trying to encode a video (mov) to an flv with alpha channel in FFMPEG but I can't seem to either

    1. find a codec that is supported
    2. find one that actually maintains the alpha

    Does anyone know how to set that up?

    Thanks,

    ffmpeg -i abc_btr_1280x800_Takeover.mov -vcodec flv -pix_fmt yuv444p -s 1280x800 test4.flv

    here is the report...

    ffmpeg started on 2013-10-25 at 15:47:30
    Report written to "ffmpeg-20131025-154730.log"
    Command line: 
    ffmpeg -i abc_btr_1280x800_Takeover.mov -vcodec flv -pix_fmt yuv444p -s 1280x800     test4.flv -report
    ffmpeg version N-57367-g2f31b73 Copyright (c) 2000-2013 the FFmpeg developers
      built on Oct 23 2013 20:34:17 with gcc 4.8.2 (GCC)
      configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --    disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --    enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-    libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --    enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
      libavutil      52. 47.101 / 52. 47.101
      libavcodec     55. 38.101 / 55. 38.101
      libavformat    55. 19.104 / 55. 19.104
      libavdevice    55.  4.100 / 55.  4.100
      libavfilter     3. 89.100 /  3. 89.100
      libswscale      2.  5.101 /  2.  5.101
      libswresample   0. 17.104 /  0. 17.104
      libpostproc    52.  3.100 / 52.  3.100
    Splitting the commandline.
    Reading option '-i' ... matched as input file with argument     'abc_btr_1280x800_Takeover.mov'.
    Reading option '-vcodec' ... matched as option 'vcodec' (force video codec ('copy' to     copy stream)) with argument 'flv'.
    Reading option '-pix_fmt' ... matched as option 'pix_fmt' (set pixel format) with argument 'yuv444p'.
    Reading option '-s' ... matched as option 's' (set frame size (WxH or abbreviation)) with argument '1280x800'.
    Reading option 'test4.flv' ... matched as output file.
    Reading option '-report' ... matched as option 'report' (generate a report) with argument '1'.
    Finished splitting the commandline.
    Parsing a group of options: global .
    Applying option report (generate a report) with argument 1.
    Successfully parsed a group of options.
    Parsing a group of options: input file abc_btr_1280x800_Takeover.mov.
    Successfully parsed a group of options.
    Opening an input file: abc_btr_1280x800_Takeover.mov.
    [mov,mp4,m4a,3gp,3g2,mj2 @ 000000000085ac00] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
    [mov,mp4,m4a,3gp,3g2,mj2 @ 000000000085ac00] ISO: File Type Major Brand: qt  
    [mov,mp4,m4a,3gp,3g2,mj2 @ 000000000085ac00] File position before avformat_find_stream_info() is 281624339
    [mov,mp4,m4a,3gp,3g2,mj2 @ 000000000085ac00] All info found
    [mov,mp4,m4a,3gp,3g2,mj2 @ 000000000085ac00] File position after avformat_find_stream_info() is 288732
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'abc_btr_1280x800_Takeover.mov':
      Metadata:
        major_brand     : qt  
        minor_version   : 537199360
        compatible_brands: qt  
        creation_time   : 2013-09-22 02:50:18
      Duration: 00:00:10.00, start: 0.000000, bitrate: 225299 kb/s
        Stream #0:0(eng), 1, 1/24: Video: qtrle (rle  / 0x20656C72), bgra, 1280x800, 225293 kb/s, SAR 1280:1280 DAR 8:5, 24 fps, 24 tbr, 24 tbn, 24 tbc (default)
        Metadata:
          creation_time   : 2013-09-22 02:50:18
          handler_name    : Apple Alias Data Handler
          timecode        : 00:00:00:00
        Stream #0:1(eng), 0, 1/24: Data: none (tmcd / 0x64636D74), 0 kb/s (default)
        Metadata:
          creation_time   : 2013-09-22 02:50:22
          handler_name    : Apple Alias Data Handler
          timecode        : 00:00:00:00
    Successfully opened the file.
    Parsing a group of options: output file test4.flv.
    Applying option vcodec (force video codec ('copy' to copy stream)) with argument flv.
    Applying option pix_fmt (set pixel format) with argument yuv444p.
    Applying option s (set frame size (WxH or abbreviation)) with argument 1280x800.
    Successfully parsed a group of options.
    Opening an output file: test4.flv.
    Successfully opened the file.
    detected 4 logical cores
    [graph 0 input from stream 0:0 @ 0000000000303bc0] Setting 'video_size' to value '1280x800'
    [graph 0 input from stream 0:0 @ 0000000000303bc0] Setting 'pix_fmt' to value '30'
    [graph 0 input from stream 0:0 @ 0000000000303bc0] Setting 'time_base' to value '1/24'
    [graph 0 input from stream 0:0 @ 0000000000303bc0] Setting 'pixel_aspect' to value '1280/1280'
    [graph 0 input from stream 0:0 @ 0000000000303bc0] Setting 'sws_param' to value 'flags=2'
    [graph 0 input from stream 0:0 @ 0000000000303bc0] Setting 'frame_rate' to value '24/1'
    [graph 0 input from stream 0:0 @ 0000000000303bc0] w:1280 h:800 pixfmt:bgra tb:1/24 fr:24/1 sar:1/1 sws_param:flags=2
    [scaler for output stream 0:0 @ 00000000003056a0] Setting 'w' to value '1280'
    [scaler for output stream 0:0 @ 00000000003056a0] Setting 'h' to value '800'
    [scaler for output stream 0:0 @ 00000000003056a0] Setting 'flags' to value '0x4'
    [scaler for output stream 0:0 @ 00000000003056a0] w:1280 h:800 flags:'0x4' interl:0
    Incompatible pixel format 'yuv444p' for codec 'flv', auto-selecting format 'yuv420p'
    [format @ 00000000002f8320] compat: called with args=[yuv420p]
    [format @ 00000000002f8320] Setting 'pix_fmts' to value 'yuv420p'
    [AVFilterGraph @ 000000000085bc60] query_formats: 5 queried, 4 merged, 0 already done, 0 delayed
    [scaler for output stream 0:0 @ 00000000003056a0] w:1280 h:800 fmt:bgra sar:1/1 -> w:1280 h:800 fmt:yuv420p sar:1/1 flags:0x4
    [flv @ 0000000000374be0] intra_quant_bias = 0 inter_quant_bias = -64
    Output #0, flv, to 'test4.flv':
      Metadata:
        major_brand     : qt  
        minor_version   : 537199360
        compatible_brands: qt  
        encoder         : Lavf55.19.104
        Stream #0:0(eng), 0, 1/1000: Video: flv1 (flv) ([2][0][0][0] / 0x0002), yuv420p,             1280x800 [SAR 1:1 DAR 8:5], q=2-31, 200 kb/s, 1k tbn, 24 tbc (default)
        Metadata:
          creation_time   : 2013-09-22 02:50:18
              handler_name    : Apple Alias Data Handler
              timecode        : 00:00:00:00        
        Stream mapping:
          Stream #0:0 -> #0:0 (qtrle -> flv)
    Press [q] to stop, [?] for help
    frame=   27 fps=0.0 q=31.0 size=     351kB time=00:00:01.12 bitrate=2554.2kbits/s    
    frame=   46 fps= 45 q=31.0 size=     477kB time=00:00:01.91 bitrate=2039.5kbits/s    
    frame=   60 fps= 39 q=31.0 size=     543kB time=00:00:02.50 bitrate=1779.4kbits/s    
    frame=   74 fps= 36 q=31.0 size=     629kB time=00:00:03.08 bitrate=1672.4kbits/s    
    frame=   96 fps= 37 q=31.0 size=     795kB time=00:00:04.00 bitrate=1627.4kbits/s    
    frame=  123 fps= 40 q=31.0 size=     924kB time=00:00:05.12 bitrate=1477.0kbits/s    
    frame=  149 fps= 41 q=31.0 size=    1133kB time=00:00:06.20 bitrate=1494.7kbits/s    
    frame=  175 fps= 43 q=31.0 size=    1224kB time=00:00:07.29 bitrate=1375.5kbits/s    
    frame=  201 fps= 44 q=31.0 size=    1352kB time=00:00:08.37 bitrate=1322.7kbits/s    
    frame=  228 fps= 45 q=31.0 size=    1461kB time=00:00:09.50 bitrate=1260.1kbits/s    
    [output stream 0:0 @ 00000000003053c0] EOF on sink link output stream 0:0:default.
    No more output streams to write to, finishing.
    frame=  240 fps= 45 q=31.0 Lsize=    1600kB time=00:00:10.00 bitrate=1310.4kbits/s    
    
    video:1596kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.252476%
    240 frames successfully decoded, 0 decoding errors
    [AVIOContext @ 000000000032dfc0] Statistics: 3 seeks, 242 writeouts
    [AVIOContext @ 000000000085bde0] Statistics: 281664506 bytes read, 3 seeks
    
  • ffmpeg error on decode

    25 octobre 2013, par ademar111190

    I'm developing an android app with the libav and I'm trying decode a 3gp with code below:

    #define simbiLog(...) __android_log_print(ANDROID_LOG_DEBUG, "simbiose", __VA_ARGS__)
    

    ...

    AVCodec *codec;
    AVCodecContext *c = NULL;
    int len;
    FILE *infile, *outfile;
    uint8_t inbuf[AUDIO_INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
    AVPacket avpkt;
    AVFrame *decoded_frame = NULL;
    
    simbiLog("inbuf size: %d", sizeof(inbuf) / sizeof(inbuf[0]));
    
    av_register_all();
    av_init_packet(&avpkt);
    
    codec = avcodec_find_decoder(AV_CODEC_ID_AMR_NB);
    if (!codec) {
        simbiLog("codec not found");
        return ERROR;
    }
    
    c = avcodec_alloc_context3(codec);
    if (!c) {
        simbiLog("Could not allocate audio codec context");
        return ERROR;
    }
    
    int open = avcodec_open2(c, codec, NULL);
    if (open < 0) {
        simbiLog("could not open codec %d", open);
        return ERROR;
    }
    
    infile = fopen(inputPath, "rb");
    if (!infile) {
        simbiLog("could not open %s", inputPath);
        return ERROR;
    }
    
    outfile = fopen(outputPath, "wb");
    if (!outfile) {
        simbiLog("could not open %s", outputPath);
        return ERROR;
    }
    
    avpkt.data = inbuf;
    avpkt.size = fread(inbuf, 1, AUDIO_INBUF_SIZE, infile);
    int iterations = 0;
    
    while (avpkt.size > 0) {
        simbiLog("iteration %d", (++iterations));
        simbiLog("avpkt.size %d avpkt.data %X", avpkt.size, avpkt.data);
        int got_frame = 0;
    
        if (!decoded_frame) {
            if (!(decoded_frame = avcodec_alloc_frame())) {
                simbiLog("out of memory");
                return ERROR;
            }
        } else {
            avcodec_get_frame_defaults(decoded_frame);
        }
    
        //below the error, but it isn't occur on first time, only in 4th loop interation
        len = avcodec_decode_audio4(c, decoded_frame, &got_frame, &avpkt); 
        if (len < 0) {
            simbiLog("Error while decoding error %d frame %d duration %d", len, got_frame, avpkt.duration);
            return ERROR;
        } else {
            simbiLog("Decoding length %d frame %d duration %d", len, got_frame, avpkt.duration);
        }
    
        if (got_frame) {
            int data_size = av_samples_get_buffer_size(NULL, c->channels, decoded_frame->nb_samples, c->sample_fmt, 1);
            size_t* fwrite_size = fwrite(decoded_frame->data[0], 1, data_size, outfile);
            simbiLog("fwrite returned %d", fwrite_size);
        }
        avpkt.size -= len;
        avpkt.data += len;
        if (avpkt.size < AUDIO_REFILL_THRESH) {
            memmove(inbuf, avpkt.data, avpkt.size);
            avpkt.data = inbuf;
            len = fread(avpkt.data + avpkt.size, 1, AUDIO_INBUF_SIZE - avpkt.size, infile);
            if (len > 0)
                avpkt.size += len;
            simbiLog("fread returned %d", len);
        }
    }
    
    fclose(outfile);
    fclose(infile);
    
    avcodec_close(c);
    av_free(c);
    av_free(decoded_frame);
    

    but I'm getting the follow log and error:

    inbuf size: 20488
    iteration 1
    avpkt.size 3305 avpkt.data BEEED40C
    Decoding length 13 frame 1 duration 0
    fwrite returned 640
    fread returned 0
    iteration 2
    avpkt.size 3292 avpkt.data BEEED40C
    Decoding length 13 frame 1 duration 0
    fwrite returned 640
    fread returned 0
    iteration 3
    avpkt.size 3279 avpkt.data BEEED40C
    Decoding length 14 frame 1 duration 0
    fwrite returned 640
    fread returned 0
    iteration 4
    avpkt.size 3265 avpkt.data BEEED40C
    Error while decoding error -1052488119 frame 0 duration 0
    

    the audio file I'm trying decode:

    $ avprobe blue.3gp 
    avprobe version 0.8.6-6:0.8.6-1ubuntu2, Copyright (c) 2007-2013 the Libav developers
      built on Mar 30 2013 22:23:21 with gcc 4.7.2
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'blue.3gp':
      Metadata:
        major_brand     : 3gp4
        minor_version   : 0
        compatible_brands: isom3gp4
        creation_time   : 2013-09-19 18:53:38
      Duration: 00:00:01.52, start: 0.000000, bitrate: 17 kb/s
        Stream #0.0(eng): Audio: amrnb, 8000 Hz, 1 channels, flt, 12 kb/s
        Metadata:
          creation_time   : 2013-09-19 18:53:38
    

    thanks a lot!


    EDITED

    I read on ffmper documentation about the method avcodec_decode_audio4 the follow:

    @warning The input buffer, avpkt->data must be FF_INPUT_BUFFER_PADDING_SIZE larger than the actual read bytes because some optimized bitstream readers read 32 or 64 bits at once and could read over the end.
    @note You might have to align the input buffer. The alignment requirements depend on the CPU and the decoder.
    

    and I see here a solution using posix_memalign, to android i founded a similar method called memalign, so i did the change:

    removed:

    uint8_t inbuf[AUDIO_INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
    

    inserted:

    int inbufSize = sizeof(uint8_t) * (AUDIO_INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE);
    uint8_t *inbuf = memalign(FF_INPUT_BUFFER_PADDING_SIZE, inbufSize);
    simbiLog("inbuf size: %d", inbufSize);
    for (; inbufSize >= 0; inbufSize--)
        simbiLog("inbuf position: %d index: %p", inbufSize, &inbuf[inbufSize]);
    

    I'm getting the correct memory sequence position, but the error not changed.

    A piece of outpout:

    inbuf position: 37 index: 0x4e43d745
    inbuf position: 36 index: 0x4e43d744
    inbuf position: 35 index: 0x4e43d743
    inbuf position: 34 index: 0x4e43d742
    inbuf position: 33 index: 0x4e43d741
    inbuf position: 32 index: 0x4e43d740
    inbuf position: 31 index: 0x4e43d73f
    inbuf position: 30 index: 0x4e43d73e
    inbuf position: 29 index: 0x4e43d73d
    inbuf position: 28 index: 0x4e43d73c
    inbuf position: 27 index: 0x4e43d73b
    inbuf position: 26 index: 0x4e43d73a
    inbuf position: 25 index: 0x4e43d739
    inbuf position: 24 index: 0x4e43d738
    inbuf position: 23 index: 0x4e43d737
    inbuf position: 22 index: 0x4e43d736
    inbuf position: 21 index: 0x4e43d735
    inbuf position: 20 index: 0x4e43d734
    inbuf position: 19 index: 0x4e43d733
    
  • SYNTAX ERROR : missing '(' before '{'

    25 octobre 2013, par JAYANTHI

    THIS IS MY PIECE OF CODE

    if ((test->duration >= 0) &&(
            av_rescale_q(test->pts, test->time_base, AV_TIME_BASE_Q) >= test->duration))  
            return AVERROR_EOF;
    

    AV_TIME_BASE_Q defined by,

    #define AV_TIME_BASE_Q          (AVRational){1, AV_TIME_BASE}
    

    I m getting error on AV_TIME_BASE_Q like

    2>c:\users\awki6\desktop\ffmpeg\libavfilter\vsrc_testsrc.cpp(146): error C2143: syntax error : missing ')' before '{'