Newest 'libx264' Questions - Stack Overflow

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

Les articles publiés sur le site

  • libvlc android build with mpeg 4 encoder and h264

    6 juin 2013, par jacob

    I am building libvlc for Android and I enabled sout (--enable-sout) but when I try to add sout transcode option, I get this error:

    cannot find encoder MPEG-4 Video
    *** Your Libav/FFmpeg installation is crippled. ***
    *** Please check with your Libav/FFmpeg packager. ***
    *** This is NOT a VLC media player issue. ***
    Streaming / Transcoding failed
    It seems your Libav/FFmpeg (libavcodec) installation lacks the following encoder:
    MPEG-4 Video.
    

    How can I add mpeg4 encoder support ?

    Another option is to add a h264 encoder but I don't know how to add that either.

  • Problems with frame rate on video conversion using ffmpeg with libx264 [migrated]

    29 mai 2013, par Lars Schroeter

    I have problems with transcoding some videos. I ran the most simple ffmpeg command and it takes very long time and the output file is about 10 times bigger. If I provide the frame rate parameter -r it works well (small file, fast transcoding). What is the problem and how can I solve it? I don't want to set a fixed frame rate because I guess it's better to leave it the same as source, isn't it?.

    Maybe the problem is something else, because I found many examples in web where the -r option isn't used. Also transcoding to a different format or with a different source works well without -r option (I tried with ffmpeg 0.7.15 and also 1.2.1). The videos are provided by the users of my website and automatically converted to be suitable for the web. So I need the most general command for automatic conversion.

    In the following ffmpeg output you will find this two suspicious messages:

    • Frame rate very high for a muxer not effciciently supporting it. Please consider specifiying a lower framerate, a different muxer or -vsync 2
    • MB rate (36000000) > level limit (983040)

    The ffmpeg command and output (without -r option):

    
        ffmpeg -i '/tmp/standort_aquarium.mp4' -vcodec libx264 output.mp4
        ffmpeg version 0.7.15, Copyright (c) 2000-2013 the FFmpeg developers  built on Feb 22 2013 07:18:58 with gcc 4.4.5  configuration: --enable-libdc1394 --prefix=/usr --extra-cflags='-Wall -g ' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree --disable-stripping --enable-avfilter --enable-libdirac --disable-decoder=libdirac --enable-libfreetype --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-libvpx --enable-librtmp --extra-libs=-lgcrypt --disable-altivec --disable-armv5te --disable-armv6 --disable-vis
          libavutil    50. 43. 0 / 50. 43. 0
          libavcodec   52.123. 0 / 52.123. 0
          libavformat  52.111. 0 / 52.111. 0
          libavdevice  52.  5. 0 / 52.  5. 0
          libavfilter   1. 80. 0 /  1. 80. 0
          libswscale    0. 14. 1 /  0. 14. 1
          libpostproc  51.  2. 0 / 51.  2. 0
        Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/tmp/standort_aquarium.mp4':
          Metadata:
            major_brand     : mp42
            minor_version   : 0
            compatible_brands: mp423gp4isom
            creation_time   : 2013-04-19 15:04:05
          Duration: 00:00:18.24, start: 0.000000, bitrate: 2095 kb/s
            Stream #0.0(und): Video: mpeg4, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 2001 kb/s, 14.97 fps, 30k tbr, 30k tbn, 30k tbc
            Metadata:
              creation_time   : 2013-04-19 15:04:05
            Stream #0.1(und): Audio: aac, 48000 Hz, mono, s16, 96 kb/s
            Metadata:
              creation_time   : 2013-04-19 15:04:05
        File 'output.mp4' already exists. Overwrite ? [y/N] y
        [mp4 @ 0x20eed80] Frame rate very high for a muxer not effciciently supporting it.
        Please consider specifiying a lower framerate, a different muxer or -vsync 2
        [buffer @ 0x20f8820] w:640 h:480 pixfmt:yuv420p tb:1/1000000 sar:1/1 sws_param:
        [libx264 @ 0x20efde0] Default settings detected, using medium profile
        [libx264 @ 0x20efde0] using SAR=1/1
        [libx264 @ 0x20efde0] MB rate (36000000) > level limit (983040)
        [libx264 @ 0x20efde0] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2
        [libx264 @ 0x20efde0] profile High, level 5.1
        [libx264 @ 0x20efde0] 264 - core 118 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
        Output #0, mp4, to 'output.mp4':
          Metadata:
            major_brand     : mp42
            minor_version   : 0
            compatible_brands: mp423gp4isom
            creation_time   : 2013-04-19 15:04:05
            encoder         : Lavf52.111.0
            Stream #0.0(und): Video: libx264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 30k tbn, 30k tbc
            Metadata:
              creation_time   : 2013-04-19 15:04:05
            Stream #0.1(und): Audio: libfaac, 48000 Hz, mono, s16, 64 kb/s
            Metadata:
              creation_time   : 2013-04-19 15:04:05
        Stream mapping:
          Stream #0.0 -> #0.0
          Stream #0.1 -> #0.1
        Press [q] to stop, [?] for help
        frame=542630 fps=132 q=33.0 Lsize=   77226kB time=00:00:18.08 bitrate=34976.2kbits/s dup=542358 drop=0
        video:68604kB audio:143kB global headers:0kB muxing overhead 12.333275%
        frame I:2174  Avg QP:18.72  size: 25040
        [libx264 @ 0x20efde0] frame P:136846 Avg QP:25.27  size:    56
        [libx264 @ 0x20efde0] frame B:403610 Avg QP:32.99  size:    20
        [libx264 @ 0x20efde0] consecutive B-frames:  0.8%  0.0%  0.1% 99.1%
        [libx264 @ 0x20efde0] mb I  I16..4:  5.5% 83.3% 11.1%
        [libx264 @ 0x20efde0] mb P  I16..4:  0.0%  0.0%  0.0%  P16..4:  0.5%  0.0%  0.0%  0.0%  0.0%    skip:99.4%
        [libx264 @ 0x20efde0] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  0.0%  0.0%  0.0%  direct: 0.0%  skip:100.0%  L0:21.2% L1:78.8% BI: 0.0%
        [libx264 @ 0x20efde0] 8x8 transform intra:83.1% inter:85.2%
        [libx264 @ 0x20efde0] coded y,uvDC,uvAC intra: 91.2% 95.8% 80.7% inter: 0.0% 0.1% 0.0%
        [libx264 @ 0x20efde0] i16 v,h,dc,p: 13% 40% 12% 35%
        [libx264 @ 0x20efde0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 34% 15%  4%  4%  5%  6%  7%  8%
        [libx264 @ 0x20efde0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 38%  6%  4%  6%  6%  8%  6%  6%
        [libx264 @ 0x20efde0] i8c dc,h,v,p: 39% 32% 19% 10%
        [libx264 @ 0x20efde0] Weighted P-Frames: Y:0.0% UV:0.0%
        [libx264 @ 0x20efde0] ref P L0: 91.5%  5.2%  2.8%  0.4%  0.0%
        [libx264 @ 0x20efde0] ref B L0: 55.7% 43.5%  0.8%
        [libx264 @ 0x20efde0] ref B L1: 97.9%  2.1%
        [libx264 @ 0x20efde0] kb/s:31071.04
    
    

    The ffmpeg command and output with the -r 24 option:

    
        ffmpeg -i '/tmp/standort_aquarium.mp4' -r 30000/1001 -vcodec libx264 output.mp4
        ffmpeg version 0.7.15, Copyright (c) 2000-2013 the FFmpeg developers
          built on Feb 22 2013 07:18:58 with gcc 4.4.5
          configuration: --enable-libdc1394 --prefix=/usr --extra-cflags='-Wall -g ' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree --disable-stripping --enable-avfilter --enable-libdirac --disable-decoder=libdirac --enable-libfreetype --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-libvpx --enable-librtmp --extra-libs=-lgcrypt --disable-altivec --disable-armv5te --disable-armv6 --disable-vis
          libavutil    50. 43. 0 / 50. 43. 0
          libavcodec   52.123. 0 / 52.123. 0
          libavformat  52.111. 0 / 52.111. 0
          libavdevice  52.  5. 0 / 52.  5. 0
          libavfilter   1. 80. 0 /  1. 80. 0
          libswscale    0. 14. 1 /  0. 14. 1
          libpostproc  51.  2. 0 / 51.  2. 0
        Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/tmp/standort_aquarium.mp4':
          Metadata:
            major_brand     : mp42
            minor_version   : 0
            compatible_brands: mp423gp4isom
            creation_time   : 2013-04-19 15:04:05
          Duration: 00:00:18.24, start: 0.000000, bitrate: 2095 kb/s
            Stream #0.0(und): Video: mpeg4, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 2001 kb/s, 14.97 fps, 30k tbr, 30k tbn, 30k tbc
            Metadata:
              creation_time   : 2013-04-19 15:04:05
            Stream #0.1(und): Audio: aac, 48000 Hz, mono, s16, 96 kb/s
            Metadata:
              creation_time   : 2013-04-19 15:04:05
        File 'output.mp4' already exists. Overwrite ? [y/N] y
        [buffer @ 0x132e820] w:640 h:480 pixfmt:yuv420p tb:1/1000000 sar:1/1 sws_param:
        [libx264 @ 0x1325de0] Default settings detected, using medium profile
        [libx264 @ 0x1325de0] using SAR=1/1
        [libx264 @ 0x1325de0] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2
        [libx264 @ 0x1325de0] profile High, level 3.0
        [libx264 @ 0x1325de0] 264 - core 118 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
        Output #0, mp4, to 'output.mp4':
          Metadata:
            major_brand     : mp42
            minor_version   : 0
            compatible_brands: mp423gp4isom
            creation_time   : 2013-04-19 15:04:05
            encoder         : Lavf52.111.0
            Stream #0.0(und): Video: libx264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 30k tbn, 29.97 tbc
            Metadata:
              creation_time   : 2013-04-19 15:04:05
            Stream #0.1(und): Audio: libfaac, 48000 Hz, mono, s16, 64 kb/s
            Metadata:
              creation_time   : 2013-04-19 15:04:05
        Stream mapping:
          Stream #0.0 -> #0.0
          Stream #0.1 -> #0.1
        Press [q] to stop, [?] for help
        frame=  542 fps= 36 q=29.0 Lsize=    2059kB time=00:00:18.01 bitrate= 936.3kbits/s dup=270 drop=0
        video:1904kB audio:143kB global headers:0kB muxing overhead 0.609224%
        frame I:3     Avg QP:22.39  size: 14773
        [libx264 @ 0x1325de0] frame P:514   Avg QP:23.98  size:  3675
        [libx264 @ 0x1325de0] frame B:25    Avg QP:27.44  size:   643
        [libx264 @ 0x1325de0] consecutive B-frames: 93.7%  0.0%  1.1%  5.2%
        [libx264 @ 0x1325de0] mb I  I16..4: 16.4% 78.3%  5.3%
        [libx264 @ 0x1325de0] mb P  I16..4:  1.6%  6.3%  0.3%  P16..4: 30.8%  8.6%  3.1%  0.0%  0.0%    skip:49.4%
        [libx264 @ 0x1325de0] mb B  I16..4:  0.4%  0.7%  0.0%  B16..8: 13.2%  1.6%  0.2%  direct: 0.3%  skip:83.6%  L0:50.0% L1:47.1% BI: 2.9%
        [libx264 @ 0x1325de0] 8x8 transform intra:77.1% inter:83.1%
        [libx264 @ 0x1325de0] coded y,uvDC,uvAC intra: 62.0% 76.4% 24.4% inter: 17.9% 26.3% 2.3%
        [libx264 @ 0x1325de0] i16 v,h,dc,p: 14% 60% 13% 13%
        [libx264 @ 0x1325de0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 35% 33%  2%  3%  3%  3%  3%  4%
        [libx264 @ 0x1325de0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 40% 12%  4%  7%  7%  7%  5%  4%
        [libx264 @ 0x1325de0] i8c dc,h,v,p: 46% 34% 16%  4%
        [libx264 @ 0x1325de0] Weighted P-Frames: Y:8.0% UV:4.5%
        [libx264 @ 0x1325de0] ref P L0: 65.6% 16.7%  8.8%  7.9%  0.9%
        [libx264 @ 0x1325de0] ref B L0: 85.9% 13.3%  0.8%
        [libx264 @ 0x1325de0] ref B L1: 88.7% 11.3%
        [libx264 @ 0x1325de0] kb/s:862.28
    
    

    The video source is temporarily available under: https://www.dropbox.com/s/4xg147z77u40g87/standort_aquarium.mp4

  • Where to find ffserver static for linux

    29 mai 2013, par sajad

    I need just to download ffserver static file for using in linux(ubuntu 12.04 x64), with libx264 library. I don't want to challenge compilation task on Linux and have just a portable static file. I have spent long time searching for that. Can anybody guide me?

  • libx264.dll exposes function x264_encoder_open_130, shouldnt this be x264_encoder_open ?

    18 mai 2013, par Kim Kardashian

    I checked in my version of x264 dll file that the open function is named 'x264_encoder_open_130' and 130 happens to be the specific build number of x264 that i use. I build using minGW on windows and link to it, so my program would crash if i try to use a newer dll.. is there a way to get around this ?

  • Decoding by libjpeg -> Encoding by x264, strange artefacts on frames

    15 mai 2013, par mmmaaak

    I have a collection of jpeg, which must be decoded by lib jpeg, and after it, encoded by x264 (after it encoded packets are streamed via rtmp). Code I used for decoding:

    struct my_error_mgr 
    {   
        struct jpeg_error_mgr pub;
        jmp_buf setjmp_buffer;
    };
    typedef my_error_mgr *my_error_ptr;
    
    METHODDEF(void) my_error_exit (j_common_ptr cinfo)
    {
        my_error_ptr myerr = (my_error_ptr) cinfo->err;
        (*cinfo->err->output_message) (cinfo);
        longjmp(myerr->setjmp_buffer, 1);   
    }
    
    void init_source(j_decompress_ptr ptr)
    {
        Q_UNUSED(ptr)
    }
    
    boolean fill_input_buffer(j_decompress_ptr ptr) 
    {
         Q_UNUSED(ptr)
        return TRUE;
    }
    
    void term_source(j_decompress_ptr ptr)
    {
        Q_UNUSED(ptr)
    }
    
    void skip_input_data(j_decompress_ptr ptr, long num_bytes)
    {
        if(num_bytes>0) 
        {
            ptr->src->next_input_byte+=(size_t)num_bytes;
            ptr->src->bytes_in_buffer-=(size_t)num_bytes;   
        }
    }
    
    EtherDecoder::EtherDecoder(QObject *parent):
    QObject(parent)
    {
    }
    
    void EtherDecoder::dataBlockReady(QByteArray data)
    {
        jpeg_decompress_struct decompressInfo;
        jpeg_create_decompress(&decompressInfo);
        my_error_mgr err;
        decompressInfo.do_fancy_upsampling = FALSE;
        decompressInfo.src = (jpeg_source_mgr *) (*decompressInfo.mem->alloc_small)       ((j_common_ptr) &decompressInfo, JPOOL_PERMANENT, sizeof(jpeg_source_mgr));
        decompressInfo.err = jpeg_std_error(&err.pub);
        err.pub.error_exit = my_error_exit;
        if (setjmp(err.setjmp_buffer))  
        {
            jpeg_destroy_decompress(&decompressInfo);
            return; 
        }
        decompressInfo.src->init_source = init_source;
        decompressInfo.src->resync_to_restart = jpeg_resync_to_restart;
        decompressInfo.src->fill_input_buffer = fill_input_buffer;
        decompressInfo.src->skip_input_data = skip_input_data;
        decompressInfo.src->term_source = term_source;
        decompressInfo.src->next_input_byte = reinterpret_cast(data.data());
        decompressInfo.src->bytes_in_buffer = data.size();
        jpeg_read_header(&decompressInfo, TRUE);
        jpeg_start_decompress(&decompressInfo);
        int size = 0;
        int n_samples = 0;
        char *samples = new char[5242880];
        char *reserv = samples;
        while (decompressInfo.output_scanline < decompressInfo.output_height)   
        {
            n_samples = jpeg_read_scanlines(&decompressInfo, (JSAMPARRAY) &samples, 1);
            samples += n_samples * decompressInfo.image_width * decompressInfo.num_components;
            size += n_samples * decompressInfo.image_width * decompressInfo.num_components; 
        }
        jpeg_finish_decompress(&decompressInfo);
        QByteArray output(reserv, size);
        emit frameReady(output, decompressInfo.output_width, decompressInfo.output_height);
        jpeg_destroy_decompress(&decompressInfo);
        delete[] reserv;
    }
    

    When I emit frameReady signal, I send data to Encoder, method, where I init Encedor looks like:

    bool EtherEncoder::initEncoder(unsigned int width, unsigned int height)
    {
        x264_param_t param;
        x264_param_default_preset(&param, "veryfast", "zerolatency");
        param.i_width=width;
        param.i_height=height;
        param.i_frame_total=0;
        param.i_csp=X264_CSP_I420;
        param.i_timebase_num=1;
        param.i_timebase_den=96000;
        param.b_annexb=true;
        param.b_repeat_headers=false;
        x264_param_apply_fastfirstpass(&param);
        x264_param_apply_profile(&param, "baseline");
        _context=x264_encoder_open(&param);
        if(!_context)
            return false;
        int nal_count;
        x264_nal_t *nals;
        if(x264_encoder_headers(_context, &nals, &nal_count)<0) 
        {
            x264_encoder_close(_context);
            _context=0;
            return false;   
        }
        _extradata=QByteArray();
        _width=width;
        _height=height;
        if(nal_count>0) 
        {
            _extradata=QByteArray(
                (const char *)nals[0].p_payload,
                nals[nal_count-1].p_payload+nals[nal_count-1].i_payload-nals[0].p_payload); 
        }
        return true;
    }
    

    And encoding method:

    void EtherEncoder::onFrameReady(QByteArray data, int width, int height)
    {
        while(data.size()>0)    
        {
            if(!_context && initEncoder(width, height))
            {
                _timestampDelta=realTimestamp();
            }
            if(_context)
            {
                x264_picture_t pic;
                x264_picture_init(&pic);
                pic.i_type=X264_TYPE_AUTO;
                pic.i_pts=_timestampDelta*96000;
                pic.img.i_csp=X264_CSP_I420;
                pic.img.i_plane=3;
                int planeSize = width*height;
                uint8_t *p = (uint8_t*)data.data();
                pic.img.plane[0]=p;
                p+=planeSize;
                pic.img.plane[1]=p;
                p+=planeSize/4;
                pic.img.plane[2]=p;
                pic.img.i_stride[0]=width;
                pic.img.i_stride[1]=width/2;
                pic.img.i_stride[2]=width/2;
                if(_forceKeyFrame)
                {
                    pic.i_type=X264_TYPE_I;
                    _forceKeyFrame=false;
                }
                int nal_count;
                x264_nal_t *nals;
                int rc=x264_encoder_encode(_context, &nals, &nal_count, &pic, &pic);
                if(rc>0)
                {
                    _mutex.lock();
                    _packets.push_back(
                        Packet(
                            QByteArray(
                                (const char *)nals[0].p_payload,         nals[nal_count-    1].p_payload+nals[nal_count-1].i_payload-nals[0].p_payload),
                            _timestampDelta/96.0,
                            _timestampDelta/96.0,
                            pic.b_keyframe));
                    _timestampDelta+=40;
                    data.clear();
                    _mutex.unlock();
                    emit onPacketReady();
                }
            }   
        }
    }
    

    Decoding and encoding proceeds without errors, at the end I get valid video stream, but, it seems that in one of this steps I set Invalid data for decoder/encoder. I get only 1/4 part of image (top-left, as I understood) and it has invalid color and come color stripes. Maybe I set invalid strides and planes when encode frame, or maybe my setting data for libjpeg decoder is incorrect.. Please ask questions about my code, I'll try to make some explanations for you. I explodes my brain.. Thank you.