当前位置:   article > 正文

FFmpeg学习:截取视频为图片_ffmpeg ppm

ffmpeg ppm

概述

视频文件有几个基本组件。 首先,文件本身称为容器,容器的类型决定了文件中信息的位置。 比如AVI和Quicktime。 是一系列的streams, 通常有一个音频流和一个视频流。流中的数据元素称为帧。 每个流由不同种类的编解码器编码。 编解码器定义了数据是如何编码和解码的 - 因此称为CODEC。比如DivX和MP3. 数据包是可以包含数据的数据片段,这些数据可以被解码为原始帧,每个数据包包含完整的帧,在音频流下可能包含多个帧。

处理音视频数据不比较简单,主要分为以下几个步骤:

10 打开视频文件,获取streams
20 从video_stram中获取数据包,转换为帧
30 帧未读取完继续执行20
40 处理帧
50 跳转20

使用FFmpeg处理视频非常简单,本文介绍如何将一个视频文件的帧数据保存为一张ppm格式图片(ppm是一种非常简单的原始RGB数据文件,它包含一个非常简单的头信息,其余的数据全部是RGB数据).

打开文件

首先我们要将用到的库引入进来,编写一个错误输出函数:

  1. #include <libavcodec/avcodec.h>
  2. #include <libavutil/imgutils.h>
  3. #include <libswscale/swscale.h>
  4. #include <libavformat/avformat.h>
  5. #include <libavutil/error.h>
  6. void showErrMsg(int errNum, char *msg, size_t msgSize) {
  7. memset(msg, 0, msgSize);
  8. av_strerror(errNum, msg, msgSize);
  9. fprintf(stderr, msg);
  10. }

该函数将FFmpeg内部的错误代码转换为了字符串,提高可读性.下面编写主函数,要求传入至少一个参数,并将该参数作为文件路径来打开.

  1. fileName = argv[1];
  2. if (argc < 2) {
  3. fprintf(stderr, "Please use FFmpegDemo1 <file> to open a video file");
  4. return -1;
  5. }
  6. if ((errNum = avformat_open_input(&pFormatCtx, fileName, NULL, NULL)) != 0) {
  7. showErrMsg(errNum, errMsg, 400);
  8. return -1;
  9. }

在4版本中av_aregister_all()函数已经被废弃,不需要再编写任何信息

int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options)函数的作用是打开url指向的文件

AVFormatContext是FFmepg非

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/833994
推荐阅读
相关标签
  

闽ICP备14008679号