FFMpeg的output_example.c例子分析.docVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
FFMpeg的output_example.c例子分析

FFMpeg的output_example.c例子分析?? 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()使用默认格式的编解码器来增加一个视频流,并初始化编解码器。   (4.1)av_new_stream()增加一个新的流到一个媒体文件。   (4.2)初始化编解码器:     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-time_base.den = STREAM_FRAME_RATE; //每秒25副图像     c-time_base.num = 1;     c-gop_size = 12;     c-pix_fmt = STREAM_PIX_FMT; //默认格式为PIX_FMT_YUV420P     …… …… (5)av_set_parameters()设置输出参数,即使没有参数,该函数也必须被调用。 (6)dump_format()输出格式信息,用于调试。 (7)open_video()打开视频编解码器并分配必要的编码缓存。   (7.1)avcodec_find_encoder()寻找c-codec_id指定的视频编码器。   (7.2)avcodec_open()打开编码器。   (7.3)分配视频输出缓存:     video_outbuf_size = 200000;     video_outbuf = av_malloc( video_outbuf_size );   (7.4)picture = alloc_picture()分配原始图像。     (7.4.1)avcodec_alloc_frame()分配一个AVFrame并设置默认值。     (7.4.2)size = avpicture_get_size()计算对于给定的图片格式以及宽和高,所需占用多少内存。     (7.4.3)picture_buf = av_malloc( size )分配所需内存。     (7.4.4)avpicture_fill()填充AVPicture的域。   (7.5)可选。如果输出格式不是YUV420P,那么临时的YUV420P格式的图像也是需要的,由此再转换为我们所需的格式,因此需要为临时的YUV420P图像分配缓存:   tmp_picture = alloc_picture() 说明:tmp_picture,picture,video_outbuf。如果输出格式为YUV420P,则直接通过avcodec_ encode_video()函数将picture缓存中的原始图像编码保存到video_outbuf缓存中;如果输出格式不是YUV420P,则需要先通过sws_scale()函数,将YUV420P格式转换为目标格式,此时tmp_picture缓存存放的是YUV420P格式的图像,而picture缓存为转换为目标格式后保存的图像,进而再将picture缓存中的图像编码保存到video_outbuf缓存中。 (8)url_fopen()打开输出文件,如果需要的话。 (9)av_write_header()写流动头部。 (10)LOOP循环{     计算当前视频时间video_pts     是否超时退出循环?     write_video_frame()视频编码   }   (10.1)write_video_frame()     如果图片不是YUV420P,则需要用sws_scale()函数先进行格式转换。     若需要原始图像:       av_init_packet()初始化一个包的选项域。       av_write_frame()向输出媒体文件写一个包,该包会包含一个视频帧。     若需要编码图像:       avcod

您可能关注的文档

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档