Newest 'x264' Questions - Stack Overflow
Les articles publiés sur le site
-
Compiling x264 for i386
28 novembre 2012, par user293895How 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 theateistI'm developing on using VS2010 with ffmpeg and tried the code from here. But VS says that it cannot find
CODEC_FLAG2_BPYRAMID+CODEC_FLAG2_MIXED_REFS+CODEC_FLAG2_WPRED+CODEC_FLAG2_8X8DCT+CODEC_FLAG2_FASTPSKIP; // flags2=+bpyramid+mixed_refs+wpred+dct8x8+fastpskip
X264_PART_I8X8+X264_PART_I4X4+X264_PART_P8X8+X264_PART_B8X8
avCodecContext.crf
Where are they located?
-
fps porblem when saving video in mp4 container
26 novembre 2012, par theateistWhen 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 melihIs 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 user1794936For 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?