Newest 'x264' Questions - Stack Overflow

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

Les articles publiés sur le site

  • Compiling x264 for i386

    28 novembre 2012, par user293895

    How would I compile the x264 library for the i386 architecture? Usually to force an architecture I would use the follow command:

    ./configure CC="gcc -arch i386" CXX="g++ -arch i386"
    

    But it doesn't seem to work for x264.

    To compile x264 I configure it and make it, this produces an x86_64 library. When I attempt to use the above command to force the i386 architecture I receive the following message:

    Unknown option CC=gcc -arch i386, ignored Unknown option CXX=g++ -arch i386, ignored

    The configure script then prints that it is configured for the X86_64 platform. I want to see it configured for the i386 platform and to produce an i386 binary.

  • Where ffmpeg flags like CODEC_FLAG2_BPYRAMID are located ?

    27 novembre 2012, par theateist

    I'm developing on using VS2010 with ffmpeg and tried the code from here. But VS says that it cannot find

    1. CODEC_FLAG2_BPYRAMID+CODEC_FLAG2_MIXED_REFS+CODEC_FLAG2_WPRED+CODEC_FLAG2_8X8DCT+CODEC_FLAG2_FASTPSKIP; // flags2=+bpyramid+mixed_refs+wpred+dct8x8+fastpskip
    2. X264_PART_I8X8+X264_PART_I4X4+X264_PART_P8X8+X264_PART_B8X8
    3. avCodecContext.crf

    Where are they located?

  • fps porblem when saving video in mp4 container

    26 novembre 2012, par theateist

    When I decode frames from avi file and then decode them in x264 and save to mp4 file, the fps of the output file is always 12,800. Therefore the file is played very fast. But, when I save the encoded in h264 frames in avi format and not mp4, so the fps is as I wanted - 25.

    What could be the problem?

    Here the code I wrote:

    #include "stdafx.h"
    #include "inttypes.h"
    
    extern "C" {
    #include "libavcodec/avcodec.h"
    #include "libavformat/avformat.h"
    #include "libavutil/avutil.h"
    #include swscale.h>
    #include opt.h>
    #include swscale.h>
    #include imgutils.h>
    }
    
    #include 
    using namespace std;
    
    int main(int argc, char* argv[])
    {
       const char* inFileName = "C:\\000227_C1_GAME.avi";
       const char* outFileName = "c:\\test.avi";
       const char* outFileType = "avi";
    
       av_register_all();
    
       AVFormatContext* inContainer = NULL;   
       if(avformat_open_input(&inContainer, inFileName, NULL, NULL) < 0)   
          exit(1);
    
       if(avformat_find_stream_info(inContainer, NULL) < 0)
          exit(1);
    
       // Find video stream
       int videoStreamIndex = -1;
       for (unsigned int i = 0; i < inContainer->nb_streams; ++i)
       {
          if (inContainer->streams[i] && inContainer->streams[i]->codec &&
             inContainer->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
          {
             videoStreamIndex = i;
             break;
          }
       }
       if (videoStreamIndex == -1) exit(1);
    
       AVFormatContext* outContainer = NULL;
       if(avformat_alloc_output_context2(&outContainer, NULL, outFileType, outFileName) < 0)
          exit(1);
    
       // ---------------------------- 
       // Decoder
       // ---------------------------- 
       AVStream const *const inStream = inContainer->streams[videoStreamIndex];
       AVCodec *const decoder = avcodec_find_decoder(inStream->codec->codec_id);
       if(!decoder) 
          exit(1);
       if(avcodec_open2(inStream->codec, decoder, NULL) < 0) 
          exit(1);
    
       // ---------------------------- 
       // Encoder
       // ----------------------------             
       AVCodec *encoder = avcodec_find_encoder(AV_CODEC_ID_H264);
       if(!encoder) 
          exit(1);
       AVStream *outStream = avformat_new_stream(outContainer, encoder);      
       if(!outStream)
          exit(1);
       avcodec_get_context_defaults3(outStream->codec, encoder);   
    
       // Construct encoder
       if(outContainer->oformat->flags & AVFMT_GLOBALHEADER) 
          outStream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;   
    
       outStream->codec->coder_type = AVMEDIA_TYPE_VIDEO;
       outStream->codec->pix_fmt = AV_PIX_FMT_YUV420P;
       outStream->codec->width = inStream->codec->width;
       outStream->codec->height = inStream->codec->height;
       outStream->codec->codec_id = encoder->id;
       outStream->codec->bit_rate = 500000;
       //outStream->codec->rc_min_rate = 600000;
       //outStream->codec->rc_max_rate = 800000;
    
       outStream->codec->time_base.den = 25;
       outStream->codec->time_base.num = 1;
       outStream->codec->gop_size = 250; // Keyframe interval(=GOP length). Determines maximum distance distance between I-frames
       outStream->codec->keyint_min = 25; // minimum GOP size
       outStream->codec->max_b_frames = 3;//16; // maximum number of B-frames between non-B-frames
       outStream->codec->b_frame_strategy = 1; // decides the best number of B-frames to use. Default mode in x264.
       outStream->codec->scenechange_threshold = 40;
       outStream->codec->refs = 6; // abillity to reference frames other than the one immediately prior to the current frame. specify how many references can be used.
       outStream->codec->qmin = 0;//10;
       outStream->codec->qmax = 69;//51;
       outStream->codec->qcompress = 0.6;
       outStream->codec->max_qdiff = 4;
       outStream->codec->i_quant_factor = 1.4;//0.71;   
    
       outStream->codec->refs=1;//3;
       outStream->codec->chromaoffset = -2;
       outStream->codec->thread_count = 1;   
       outStream->codec->trellis = 1;
       outStream->codec->me_range = 16;
       outStream->codec->me_method = ME_HEX; //hex
       outStream->codec->flags2 |= CODEC_FLAG2_FAST;   
       outStream->codec->coder_type = 1;
    
    
       if(outStream->codec->codec_id == AV_CODEC_ID_H264)
       {
            av_opt_set(outStream->codec->priv_data, "preset", "slow", 0);
       }
    
       // Open encoder
       if(avcodec_open2(outStream->codec, encoder, NULL) < 0) 
          exit(1);
    
       // Open output container
       if(avio_open(&outContainer->pb, outFileName, AVIO_FLAG_WRITE) < 0)
          exit(1);
    
       //close_o
    
       AVFrame *decodedFrame = avcodec_alloc_frame();
       if(!decodedFrame) 
          exit(1);
       AVFrame *encodeFrame = avcodec_alloc_frame();
       if(!encodeFrame) 
          exit(1);
       encodeFrame->format = outStream->codec->pix_fmt;
       encodeFrame->width = outStream->codec->width;
       encodeFrame->height = outStream->codec->height;
       if(av_image_alloc(encodeFrame->data, encodeFrame->linesize, 
                     outStream->codec->width, outStream->codec->height, 
                     outStream->codec->pix_fmt, 1) < 0)
          exit(1);
    
       av_dump_format(inContainer, 0, inFileName,0);
    
       //Write header to ouput container
       avformat_write_header(outContainer, NULL);
    
       AVPacket decodePacket, encodedPacket;
       int got_frame, len;
       while(av_read_frame(inContainer, &decodePacket)>=0)
       {      
          if (decodePacket.stream_index == videoStreamIndex)
          {                  
             len = avcodec_decode_video2(inStream->codec, decodedFrame, &got_frame, &decodePacket);
             if(len < 0)
                exit(1);
             if(got_frame)
             {
                av_init_packet(&encodedPacket);
                encodedPacket.data = NULL;
                encodedPacket.size = 0;         
                if(avcodec_encode_video2(outStream->codec, &encodedPacket, decodedFrame, &got_frame) < 0)
                   exit(1);
                if(got_frame)
                {
                   if (outStream->codec->coded_frame->key_frame)
                      encodedPacket.flags |= AV_PKT_FLAG_KEY;
    
                   encodedPacket.stream_index = outStream->index;
    
                   if(av_interleaved_write_frame(outContainer, &encodedPacket) < 0)
                      exit(1);
    
                   av_free_packet(&encodedPacket);
                }
             }
          }
    
          av_free_packet(&decodePacket);
       }
       av_write_trailer(outContainer);
       avio_close(outContainer->pb);
    
       avcodec_free_frame(&encodeFrame);
       avcodec_free_frame(&decodedFrame);
    
       avformat_free_context(outContainer);
       av_close_input_file(inContainer);
       return 0;
    }
    
  • Dump libx264 encoding parameters in ffmpeg

    23 novembre 2012, par melih

    Is it possible to get a list of parameter values used in libx264 while encoding a stream? I am using a ffmpeg binary to encode.

  • how to reduce the size of the moov atom in mp4 files

    18 novembre 2012, par user1794936

    For fast streaming, I would like to know how to reduce the size of moov atom (sometimes 2-6 MB). Are there any settings in ffmpeg or x264? I understand the need to reduce the frequency of keyframes, but how would I do it?