ffmpeg是强大且完全开源的音视频处理工具,下文主要说明在windows下vs开发工具集成ffmpeg进行相关开发工作
一、将ffmpeg相关的api放入工程
二、配置包含目录、引用目录、链接器等环境
三、动态链接库dll文件可以放到debug目录下
四、代码开发
比如,一个简单的求输入视频文件时长的函数
头文件:
extern "C"
{
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
};
函数实现:
float getvideolen(string strInputVideo){ float VideoLen =-1; AVFormatContext *pFormatCtx=NULL; pFormatCtx = avformat_alloc_context(); int nerrnum = avformat_open_input(&pFormatCtx,strInputVideo.c_str(),NULL,NULL); if( nerrnum!=0 ) { return -2; } nerrnum = avformat_find_stream_info(pFormatCtx,NULL); if( nerrnum<0 ) { return -3; } if (pFormatCtx->nb_streams >0) { if(pFormatCtx->duration >0) { VideoLen= pFormatCtx->duration; } else { VideoLen= -4; } } else { VideoLen = -5; } avformat_close_input(&pFormatCtx); avformat_free_context(pFormatCtx); return VideoLen/1000000; //ffmpeg返回的是微秒,转换成秒}
主函数时记得要初始化av_register_all();
int main(int argc, char* argv[]){ av_register_all(); if(NULL==argv[1]) { cout<<"No such Input file"<<endl; return -1; } float videolen=getvideolen(argv[1]); cout<<"videolen="<<videolen<<endl; return 0;}
如果出现错误 fatal error C1189: #error : missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS
在common.h文件头部加入以下定义
#ifdef __cplusplus
#define __STDC_CONSTANT_MACROS
#ifdef _STDINT_H
#undef _STDINT_H
#endif
# include "stdint.h"
#endif
#ifndef INT64_C
#define INT64_C(c) (c ## LL)
#define UINT64_C(c) (c ## ULL)
#endif
运行截图:
完整项目工程包下载:http://download.csdn.net/download/sm9sun/9687608
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦