下面是我搭建FFmpeg学习环境的步骤。

一、在Ubuntu下

http://www.ffmpeg.org/download.html下载最新的FFmpeg版本,我的版本是ffmpeg-2.7.2。

编译:

tar -xf ffmpeg-2.7..tar.bz2
mkdir build
cd build/
../ffmpeg-2.7./configure --enable-shared
make
sudo make install

在build/config.mak中可以看到将动态库和静态库安装到什么位置了:

# Automatically generated by configure - do not modify!
ifndef FFMPEG_CONFIG_MAK
FFMPEG_CONFIG_MAK=
FFMPEG_CONFIGURATION= --enable-shared
prefix=/usr/local
LIBDIR=$(DESTDIR)${prefix}/lib
SHLIBDIR=$(DESTDIR)${prefix}/lib
INCDIR=$(DESTDIR)${prefix}/include
BINDIR=$(DESTDIR)${prefix}/bin
DATADIR=$(DESTDIR)${prefix}/share/ffmpeg
DOCDIR=$(DESTDIR)${prefix}/share/doc/ffmpeg
MANDIR=$(DESTDIR)${prefix}/share/man
PKGCONFIGDIR=$(DESTDIR)${prefix}/lib/pkgconfig
SRC_PATH=/home/pengdl/work/study/FFmpeg/ffmpeg-2.7.
... ...

可以看到,拷贝到了/usr/local/lib下。

ls /usr/local/lib
icu libavdevice.a libavfilter.so. libavutil.a libswresample.so. ocaml tmp
lib64OpenglRender.so libavdevice.so libavfilter.so.5.16. libavutil.so libswresample.so.1.2. openssl
libavcodec.a libavdevice.so. libavformat.a libavutil.so. libswscale.a p4v
libavcodec.so libavdevice.so.56.4. libavformat.so libavutil.so.54.27. libswscale.so pkgconfig
libavcodec.so. libavfilter.a libavformat.so. libswresample.a libswscale.so. python2.
libavcodec.so.56.41. libavfilter.so libavformat.so.56.36. libswresample.so libswscale.so.3.1. python3.

下面写个简单的测试程序,分别用静态库和动态库测试,二者的区别主要在Makefile上。

测试文件 demo.c

#include <stdio.h>
#include <libavcodec/avcodec.h> int main(int argc, const char *argv[])
{
printf("%s\n", avcodec_configuration());
return ;
}

1、动态库

Makefile的内容如下:

LIBS_DIR=-L/usr/local/lib

LIBS=-lavcodec
LIBS+=-lavfilter
LIBS+=-lavdevice
LIBS+=-lswresample
LIBS+=-lswscale
LIBS+=-lavformat
LIBS+=-lavutil INC=-I/usr/local/include
INC+=-I/usr/local/include/libavcodec
INC+=-I/usr/local/include/libavdevice
INC+=-I/usr/local/include/libavfilter
INC+=-I/usr/local/include/libavformat
INC+=-I/usr/local/include/libavutil
INC+=-I/usr/local/include/libswresample
INC+=-I/usr/local/include/libswscale demo:demo.o
gcc demo.o -o $@ $(LIBS_DIR) $(LIBS) demo.o:demo.c
gcc $(INC) -c $^ -o $@ clean:
rm demo

运行:

ls -lh demo
-rwxrwxr-x pengdl pengdl .5K 12月 : demo
./demo
--arch=amd64 --enable-pthreads --enable-runtime-cpudetect --extra-version='6:11-1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --disable-avserver --enable-bzlib --enable-libdc1394 --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-swscale --enable-libcdio --enable-x11grab --enable-libx264 --enable-libxvid --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static

2、静态库

现将/usr/local/lib下的动态库移动到其他位置,Makefile的内容如下:

LIBS_DIR=-L/usr/local/lib

LIBS=-lavcodec
LIBS+=-lavfilter
LIBS+=-lavdevice
LIBS+=-lswresample
LIBS+=-lswscale
LIBS+=-lavformat
LIBS+=-lavutil LIBS+=-lpthread
LIBS+=-lm INC=-I/usr/local/include
INC+=-I/usr/local/include/libavcodec
INC+=-I/usr/local/include/libavdevice
INC+=-I/usr/local/include/libavfilter
INC+=-I/usr/local/include/libavformat
INC+=-I/usr/local/include/libavutil
INC+=-I/usr/local/include/libswresample
INC+=-I/usr/local/include/libswscale demo:demo.o
gcc demo.o -o $@ $(LIBS_DIR) $(LIBS) demo.o:demo.c
gcc $(INC) -c $^ -o $@ clean:
rm demo

注意,其中静态库的顺序如果排列有问题,会导致编译错误,如将libavutil放在libavcodec的前面,就会导致编译错误。

运行:

ls -lh demo
-rwxrwxr-x pengdl pengdl 3.8M 12月 : demo
pengdl@pengdl-HP:~/work/study/FFmpeg/FFmpeg/demo$ ./demo
--enable-shared

二、在wind7下

在win7下使用的开发工具VS2013,我的win7是64位的。

可以从http://ffmpeg.zeranoe.com/builds/下载需要的动态库和静态库,这里需要注意的是32位和64位要搞清楚。

1、32位

下载如果所示的两个,shared的下载包里有ffmpeg的动态库,dev的下载包里有静态库。

ffmpeg-20151231-git-4160900-win32-dev.7z

ffmpeg-20151231-git-4160900-win32-shared.7z

打开vs2013,新建一个控制台应用程序,将shared包里bin目录下的动态库拷贝到C:\Windows\system下,如下图:

将dev下的lib和include拷贝到工程目录下,如下图:

右击工程名,选择属性,作如下设置:

1. C/C++ --> 附加包含目录 ---> 设置为include 或者设置为include的绝对路径 E:\VC++\FFmpeg\testFFmpeg_32\testFFmpeg\include

2. 链接器 --> 常规 ---> 附加库目录 ---> 设置为lib 或者 设置为lib的绝对路径 E:\VC++\FFmpeg\testFFmpeg_32\testFFmpeg\lib

3. 链接器 --> 输入 ---> 附加依赖项 --->  设置为刚才添加的静态库

点击确定。

测试程序 testFFmpeg.cpp :

#include "stdafx.h"

//Windows
extern "C"
{
#include "libavcodec/avcodec.h"
}; int _tmain(int argc, _TCHAR* argv[])
{
printf("\n<<Configuration>>\n%s", avcodec_configuration()); return ;
}

运行

点击 调试 ---> 开始执行(不调试) 或者 Ctrl + F5

2、64位

下面是用到的两个下载包:

ffmpeg-20151231-git-4160900-win64-dev.7z

ffmpeg-20151231-git-4160900-win64-shared.7z

配置方法与32位类似,不同的是建立的工程需要是x64位的,同时再将用到的动态库拷贝到 C:\Windows\system 下。

完。

FFmpeg学习起步 —— 环境搭建的更多相关文章

  1. hive_学习_01_hive环境搭建(单机)

    一.前言 本文承接上一篇:hbase_学习_01_HBase环境搭建(单机),主要是搭建 hive 的单机环境 二.环境准备 1.说明 hive 的下载来源有: 官方版本:http://archive ...

  2. hbase_学习_01_HBase环境搭建(单机)

    一.前言 本文承接上一篇:hadoop_学习_02_Hadoop环境搭建(单机)  ,主要是搭建HBase的单机环境 二.环境准备 1.说明 hbase 的下载来源有: 官方版本:http://arc ...

  3. hadoop_学习_02_Hadoop环境搭建(单机)

    一.环境准备 1.说明 hadoop的下载来源有: 官方版本:http://archive.apache.org/dist/hadoop/ CDH版本:http://archive.cloudera. ...

  4. 从0开始学爬虫9之requests库的学习之环境搭建

    从0开始学爬虫9之requests库的学习之环境搭建 Requests库的环境搭建 环境:python2.7.9版本 参考文档:http://2.python-requests.org/zh_CN/l ...

  5. Ubuntu16.04深度学习基本环境搭建,tensorflow , keras , pytorch , cuda

    Ubuntu16.04深度学习基本环境搭建,tensorflow , keras , pytorch , cuda Ubuntu16.04安装 参考https://blog.csdn.net/flyy ...

  6. ubuntu 深度学习cuda环境搭建,docker-nvidia 2019-02

    ubuntu 深度学习cuda环境搭建 ubuntu系统版本 18.04 查看GPU型号(NVS 315 性能很差,比没有强) 首先最好有ssh服务,以下操作都是远程ssh执行 lspci | gre ...

  7. Python基础学习之环境搭建

    Python如今成为零基础编程爱好者的首选学习语言,这和Python语言自身的强大功能和简单易学是分不开的.今天我们将带领Python零基础的初学者完成入门的第一步——环境搭建.本文会先来区分几个在P ...

  8. 001-深度学习Pytorch环境搭建(Anaconda , PyCharm导入)

    001-深度学习Pytorch环境搭建(Anaconda , PyCharm导入) 在开始搭建之前我们先说一下本次主要安装的东西有哪些. anaconda 3:第三方包管理软件. 这个玩意可以看作是一 ...

  9. 人工智能之深度学习-初始环境搭建(安装Anaconda3和TensorFlow2步骤详解)

    前言: 本篇文章主要讲解的是在学习人工智能之深度学习时所学到的知识和需要的环境配置(安装Anaconda3和TensorFlow2步骤详解),以及个人的心得体会,汇集成本篇文章,作为自己深度学习的总结 ...

随机推荐

  1. express添加拦截器

    var express = require('express')   , routes = require('./routes')   , http = require('http')   , pat ...

  2. Spring 4 + Hibernate 4 下 getCurrentSession()的使用情况

    前言:1 getCurrentSession创建的session会和绑定到当前线程,而openSession不会.   2 getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭 ...

  3. Spring - IoC(4): p-namespace & c-namespace

    p 命名空间 p 命名空间允许你使用 bean 元素的属性而不是 <property/>子元素来描述 Bean 实例的属性值.从 Spring2.0 开始,Spring 支持基于 XML ...

  4. 愚蠢的LCAAAAA~~~~(>_<)~~~~

    很愤怒!特别愤怒!超级愤怒!!! 我LCA居然错了!!而且是那种特别愚蠢的错误 我把代码都交错了!!! silasila 话不多说,代码上特别详细了 #include<bits/stdc++.h ...

  5. [ Python - 2 ] 常见内置函数

    1. abs(): 绝对值 In [1]: abs(-10) Out[1]: 10 2. all(): 当参数中任何一个值为False时,all() 都为False    all(iterable) ...

  6. JAVA 批量执行测试用例

    如果多个测试用例在不同的类中,又需要一次性执行完所有的测试用例,则可以使用到Junit中的批量执行测试方法. 方法一 这种方式非常简单,不需要额外多写一行代码,Eclipse 本来就支持以项目或包为单 ...

  7. MATLAB的简单动画制作

    这里介绍两种类型的动画实现,一种使用getframe和movie命令实现帧动画,另一种使用comet(comet3)命令实现画图过程的动画. ①getframe和movie命令实现帧动画 例如,创建一 ...

  8. Interface与abstract类的区别

    含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象.含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必 ...

  9. [libgdx游戏开发教程]使用Libgdx进行游戏开发(2)-游戏框架搭建

    让我们抛开理论开始code吧. 入口类CanyonBunnyMain的代码: package com.packtpub.libgdx.canyonbunny; import com.badlogic. ...

  10. 《javascript高级程序设计》读书小延伸

    这本书已经读了几章了,想着试试能不能做出点东西,就简单的练了把手.觉得对于初学者,自己试着练练,效果还不错的. 挥刀要从轻的开始,起初的原因是和同事谈起曾经的逝水年华(小时候干的坏事)时说起了曾经的一 ...