文档介绍:FFMpeg 的 例子分析 2010-07-26 16:47:22| 分类: ffmpeg 视频转换|标签: |字号大中小订阅该例子讲了如何输出一个 libavformat 库所支持格式的媒体文件。(1) av_register_all() ,初始化 libavcodec 库,并注册所有的编解码器和格式。(2) guess_format() ,根据文件名来获取输出文件格式,默认为 mpeg 。(3) av_alloc_format_context() 分配输出媒体内容。 ov->oformat = fmt; snprintf( oc->filename, sizeof(oc->filename), “%s ”, filename ); (4) add_video_stream() 使用默认格式的编解码器来增加一个视频流,并初始化编解码器。( ) av_new_stream() 增加一个新的流到一个媒体文件。( )初始化编解码器: c= st->codec; c->codec_id = codec_id; c->codec_type = CODEC_TYPE_VIDEO; c->bit_rate = 400000; c->width = 352; c->height = 288; c-> = STREAM_FRAME_RATE; //每秒 25 副图像 c-> = 1; c->gop_size = 12; c->pix_fmt = STREAM_PIX_FMT; //默认格式为 PIX_FMT_YUV420P …………(5) av_set_parameters() 设置输出参数,即使没有参数,该函数也必须被调用。(6) dump_format() 输出格式信息,用于调试。(7) open_video() 打开视频编解码器并分配必要的编码缓存。( ) avcodec_find_encoder() 寻找 c->codec_id 指定的视频编码器。( ) avcodec_open() 打开编码器。( )分配视频输出缓存: video_outbuf_size = 200000; video_outbuf = av_malloc( video_outbuf_size ); ( ) picture = alloc_picture() 分配原始图像。( ) avcodec_alloc_frame() 分配一个 AVFrame 并设置默认值。( ) size = avpicture_get_size() 计算对于给定的图片格式以及宽和高,所需占用多少内存。( ) picture_buf = av_malloc( size )分配所需内存。( ) avpicture_fill() 填充 AVPicture 的域。( )可选。如果输出格式不是 YUV420P ,那么临时的 YUV420P 格式的图像也是需要的, 由此再转换为我们所需的格式,因此需要为临时的 YUV420P 图像分配缓存: tmp_picture = alloc_picture() 说明: tmp_picture , p