首页
学习
活动
专区
工具
TVP
发布

FFMPEG小白-day04

首先,向雷霄骅,雷神致敬

cover

昨天插了一条html的东西,今天补档ffmpeg的编程,通过ffmpeg编写一个最简单的程序,今天的程序主要的功能是

打印视频文件的相关信息输出H.264文件输出YUV文件

不过在编程之前,再来将前天的ffmpeg结构体框架图拿出来

FFMPEG解码的结构.png

ok这张图能够对下面的编程有所帮助,你可以根据这张图去知道哪个结构体或者数组是属于那个大的结构体的。

再来介绍下该结构体中的一些重要的信息

AVStream(在AVFormatContext结构体下方)

AVCodecContext(编解码器的一些信息)

AVCodec

AVPacket(可以理解成装H.264的结构体)

AVFrame(可以理解成装YUV的结构体)

下文中要用到的小知识:解码后的数据需要经过sws_scale()函数处理

该函数效果如下图

经过sws_scale()函数处理过程.png

ok,先把大体的代码 up 上来,我这里做了必要的注释,应该都能看懂,看不懂的话可以留言联系我

//

include "stdio.h"

define __STDC_CONSTANT_MACROS

include "stdafx.h"

//引入ffmpeg中的相关头文件

extern "C" {

include "libavcodec\avcodec.h"

include "libavformat/avformat.h"

include "libswscale/swscale.h"

}

int main(int argc, char* argv[])

{

//声明了AVFormatContext视频数据指针

AVFormatContext *pFormatCtx;

//声明变量i和视频的位置索引

int i, videoindex;

//解码器信息指针

AVCodecContext *pCodecCtx;

//解码器指针

AVCodec *pCodec;

//像素数据指针

AVFrame *pFrame, *pFrameYUV;

//可以理解成缓冲数组

uint8_t *out_buffer;

//h.264数据指针

AVPacket *packet;

int y_size;

int ret, got_picture;

struct SwsContext *img_convert_ctx;

//输入文件路径

char filepath[] = "Titanic.ts";

}

ok,注释都加上了,然后就是要做一些输出了,我们先把一个ts视频文件的时长 格式打印一下。

输出文件信息.png

ok,现在,我们先尝试下把这些信息输出到一个文件里面去

输出视频信息到文件.png

ok,现在剩下输出h264文件和yuv文件了,不过这里先不帖出来了,下篇文章会贴出来的,有跟着学的同学们可以自己试一下,如何输出h264文件和yuv文件~~

持续更新,欢迎关注~~~

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180301G0MIWG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券