图像视频编码和FFmpeg(1)-----FFmpeg使用介绍

        本系列的博文会简单介绍一下图像视频编码和FFmpeg这个库的一些简单使用。本文将介绍一下怎么下载和使用FFmpeg和它的一些资料。

 

        FFmpeg是一个开源视音频编码和解码库,具体的介绍可以看维基百科的介绍。它的源码可以在这里下载。

        做开发的话,只需FFmpeg的头文件和库文件即可。这些文件可以到http://ffmpeg.zeranoe.com/builds/下载(下载那个Dev版本)最新版的SDK。那个Shared版本也下载吧,后面会用到的。记得要配置编译器的头文件查找路径和库文件查找路径。

        因为FFmpeg用C语言写的,并且在FFmpeg的头文件里面,并没有加入和C++兼容使用的extern “C”,所以在用C++写FFmpeg程序,编译的时候会碰到很多坑爹的错误提示。解决的方法也很简单,在C++的源文件加入extern “C”即可。即使加入了,还会出现#error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS 和 'UINT64_C' was not declared in this scope 之类的错误。可以加入一些宏定义来解决。如下面代码:

#ifdef __cplusplus
 #define __STDC_CONSTANT_MACROS
 #ifdef _STDINT_H
  #undef _STDINT_H
 #endif
 # include <stdint.h>
#endif


extern "C"
{
#include<libavcodec/avcodec.h>
#include<libavformat/avformat.h>
#include<libswscale/swscale.h>
}

        我已经用静态库进行编译了(我是在Windows环境下用Qt Creator,其他环境我没有测试过是不是有这个问题),但不知道为什么其在运行其还是需要动态库,弹出的错误提示如下图。对应的解决的方法也非常简单,把刚才下载到的动态库放到一个文件夹里面,然后把动态库所在的目录路径添加到Windows系统的环境变量里面即可。

         

        FFmpeg有一个很烦人的地方:很多旧版本的接口,在新版本中会废弃,在编译的时候会提示,某某函数或者宏定义没有定义。解决这个问题有两个方法,一是使用旧版本的FFmpeg,这里可以下载到旧版本的FFmpeg SDK。第二个方法是,查看FFmpeg源代码里面的一个APIchanges文件(在doc目录),这个文件会说明API函数从哪个变成哪个了。当然有些函数直接丢弃,并且没有对应的替代函数。比如av_set_parameters。

        学开源库少不了帮助文档,可以在这里找到各个版本的帮助文档。我用的2.2版本,可以点击这里,直接到2.2版本的帮助文档。

        有个老外专门为FFmpeg写了一个教程。在一开始,老外就说了这个教程有点老了。不过这并不妨碍我们通过这个教程学习FFmpeg。老外写的例子里面,很多API函数都已经被新版本的FFmpeg废弃了。不过可以在这里下载到最新的代码。

        学习图像视频编码,有个很郁闷的问题,就是找不到合适的文件,比如YUV文件。这里可以下载到一些YUV文件,是YUV420格式的。可能会用到YUYV422格式的文件,我上传了一些YUYV422格式的文件。http://download.csdn.net/detail/luotuo44/7377249http://download.csdn.net/detail/luotuo44/7377341

        学习FFmpeg,大家可以去逛一下FFmpeg工程组。也可以到这里下载一些帮助文档。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值