多媒体编解码学习: ffmpeg(更新ffmpeg库使用方法)
2016-08-26 16:14
239 查看
文中内容部分参考大牛博客进行边操作边总结
一、ubuntu安装ffmpeg
1. 从ffmpeg官网:https://www.ffmpeg.org/download.html下载源代码,ffmpeg-3.1.3.tar.bz2
先安装yasm,ffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具,并且只有先安装yasm,才能安装ffmpeg
可以直接运行 yum
-y install yasm直接安装,或者官网http://yasm.tortall.net/Download.html下载源码yasm-1.3.0.tar.gz安装,解压进入yasm-1.3.0目录后直接运行./configure
&& make && make install即可。
2. 解压文件
3. 安装步骤
进入解压目录:
配置makefile:
其中--enable-share生产动态链接库,编程使用,并且相关可执行程序也依赖这些动态库;--prefix=/usr/local/ffmpeg制定安装目录为/usr/local/ffmpeg
编译:
我电脑是4核8G内存,大概10分钟编译完成
安装:
make install会把ffmpeg相关执行程序、头文件、lib库安装在/usr/local/ffmpeg下
软连接ffmpeg相关执行文件:
这样就不需要用./来执行ffmpeg、ffprobe、ffserver了
指定ffmpeg的lib路径:
在/etc/ld.so.conf.d
目录下vi创建一个ffmpeg.conf,并添加/usr/local/ffmpeg/lib,运行ldconfig,这样运行ffmpeg相关执行程序时,就不会出现找不到lib*的错误。
输入ffmpeg --help,显示以下ffmpeg版本信息和help信息,说明安装成功
二、ffmpeg相关库功能
看到ffmpeg相关的库主要是以下7个
libavutil:用于多媒体编程,主要包含安全合适的字符串操作函数、数学运算函数、随机数字生产器、数据结构、多媒体处理的相关函数(如对像素和采样格式的计数)等,但它不是libavcodec和libavformat所需的库代码;
libavcodec、libavformat:有些视频文件格式(如AVI)没有指出应该使用哪种编码(如h.264)来解析音频和视频数据,它们只是按视频格式封装音视频数据,所以经常碰到打开视频文件只能听到声音而没有画面,则用libavformat来解析视频文件并将编码流分离出来,libavcodec对流进行解码;
Libavdevice:为一些常见的多媒体输入或输出设备提供了抓取和渲染的通用架构,并且很多输入和输出设备,如Video4Linux2, VfW, DShow, and ALSA;
libavfilter:提供了一个通用规定音视频过滤架构,包括一些过滤器、源、汇(什么是源、汇,我也没搞清楚,待研究)
libswscale:执行高度优化的图像缩放、色彩、像素格式转换操作
libswresample:执行高度优化的音频重采样、重换算、样本格式转换操作
初步觉得ffmpeg的主要功能就在这些lib中,重点弄清楚lib中重要的接口。
三、代码调用ffmpeg库接口函数
代码文件ffmpegmain.c中
其中avcodec_register_all();是要使用的接口,要包含"libavcodec/avcodec.h"头文件,运行gcc
-o ffmpegmain ffmpegmain.c -lavcodec -L/usr/local/ffmpeg/lib -I/usr/local/ffmpeg/include即可
所以进行ffmpeg开发,则根据情况条用相关接口功能实现所需要的功能。
四、ffmpeg命令工具简单使用
1. MP4格式转换成avi视频格式:
运行后,会将mp4格式的视频文件转换成avi格式。
五、代码结构(待续)
一、ubuntu安装ffmpeg
1. 从ffmpeg官网:https://www.ffmpeg.org/download.html下载源代码,ffmpeg-3.1.3.tar.bz2
先安装yasm,ffmpeg编译中为了提高编译速度,使用了汇编指令,于是需要使用这个工具,并且只有先安装yasm,才能安装ffmpeg
可以直接运行 yum
-y install yasm直接安装,或者官网http://yasm.tortall.net/Download.html下载源码yasm-1.3.0.tar.gz安装,解压进入yasm-1.3.0目录后直接运行./configure
&& make && make install即可。
2. 解压文件
$tar -jxvf ffmpeg-3.1.3.tar.bz2
3. 安装步骤
进入解压目录:
$cd ffmpeg-3.1.3
配置makefile:
$./configure --enable-shared --prefix=/usr/local/ffmpeg
其中--enable-share生产动态链接库,编程使用,并且相关可执行程序也依赖这些动态库;--prefix=/usr/local/ffmpeg制定安装目录为/usr/local/ffmpeg
编译:
$make
我电脑是4核8G内存,大概10分钟编译完成
安装:
$sudo make install
make install会把ffmpeg相关执行程序、头文件、lib库安装在/usr/local/ffmpeg下
$ ls /usr/local/ffmpeg/ -l 总用量 16 drwxr-xr-x 2 root root 4096 2016-08-26 14:06 bin drwxr-xr-x 9 root root 4096 2016-08-26 14:06 include drwxr-xr-x 3 root root 4096 2016-08-26 14:06 lib drwxr-xr-x 4 root root 4096 2016-08-26 14:06 share
软连接ffmpeg相关执行文件:
$sudo ln -s /usr/local/ffmpeg/bin/ffmpeg /usr/local/bin/ $sudo ln -s /usr/local/ffmpeg/bin/ffprobe /usr/local/bin/ $sudo ln -s /usr/local/ffmpeg/bin/ffserver /usr/local/bin/
这样就不需要用./来执行ffmpeg、ffprobe、ffserver了
指定ffmpeg的lib路径:
在/etc/ld.so.conf.d
目录下vi创建一个ffmpeg.conf,并添加/usr/local/ffmpeg/lib,运行ldconfig,这样运行ffmpeg相关执行程序时,就不会出现找不到lib*的错误。
输入ffmpeg --help,显示以下ffmpeg版本信息和help信息,说明安装成功
$ ffmpeg --help 4000 ffmpeg version 3.1.2 Copyright (c) 2000-2016 the FFmpeg developers built with gcc 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1) configuration: --enable-shared --prefix=/usr/local/ffmpeg libavutil 55. 28.100 / 55. 28.100 libavcodec 57. 48.101 / 57. 48.101 libavformat 57. 41.100 / 57. 41.100 libavdevice 57. 0.101 / 57. 0.101 libavfilter 6. 47.100 / 6. 47.100 libswscale 4. 1.100 / 4. 1.100 libswresample 2. 1.100 / 2. 1.100 Hyper fast Audio and Video encoder usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}... Getting help: -h -- print basic options -h long -- print more options -h full -- print all options (including all format and codec specific options, very long) -h type=name -- print all options for the named decoder/encoder/demuxer/muxer/filter See man ffmpeg for detailed description of the options. Print help / information / capabilities: -L show license -h topic show help -? topic show help -help topic show help --help topic show help -version show version -buildconf show build configuration -formats show available formats -devices show available devices ...... ...... ......
二、ffmpeg相关库功能
$ ls /usr/local/ffmpeg/lib/ -l 总用量 130440 -rw-r--r-- 1 root root 70401082 2016-08-26 14:06 libavcodec.a lrwxrwxrwx 1 root root 23 2016-08-26 14:06 libavcodec.so -> libavcodec.so.57.48.101 lrwxrwxrwx 1 root root 23 2016-08-26 14:06 libavcodec.so.57 -> libavcodec.so.57.48.101 -rwxr-xr-x 1 root root 13904780 2016-08-26 14:06 libavcodec.so.57.48.101 -rw-r--r-- 1 root root 1037868 2016-08-26 14:06 libavdevice.a lrwxrwxrwx 1 root root 23 2016-08-26 14:06 libavdevice.so -> libavdevice.so.57.0.101 lrwxrwxrwx 1 root root 23 2016-08-26 14:06 libavdevice.so.57 -> libavdevice.so.57.0.101 -rwxr-xr-x 1 root root 63844 2016-08-26 14:06 libavdevice.so.57.0.101 -rw-r--r-- 1 root root 8925172 2016-08-26 14:06 libavfilter.a lrwxrwxrwx 1 root root 23 2016-08-26 14:06 libavfilter.so -> libavfilter.so.6.47.100 lrwxrwxrwx 1 root root 23 2016-08-26 14:06 libavfilter.so.6 -> libavfilter.so.6.47.100 -rwxr-xr-x 1 root root 1601956 2016-08-26 14:06 libavfilter.so.6.47.100 -rw-r--r-- 1 root root 30086672 2016-08-26 14:06 libavformat.a lrwxrwxrwx 1 root root 24 2016-08-26 14:06 libavformat.so -> libavformat.so.57.41.100 lrwxrwxrwx 1 root root 24 2016-08-26 14:06 libavformat.so.57 -> libavformat.so.57.41.100 -rwxr-xr-x 1 root root 2244728 2016-08-26 14:06 libavformat.so.57.41.100 -rw-r--r-- 1 root root 1415736 2016-08-26 14:06 libavutil.a lrwxrwxrwx 1 root root 22 2016-08-26 14:06 libavutil.so -> libavutil.so.55.28.100 lrwxrwxrwx 1 root root 22 2016-08-26 14:06 libavutil.so.55 -> libavutil.so.55.28.100 -rwxr-xr-x 1 root root 447884 2016-08-26 14:06 libavutil.so.55.28.100 -rw-r--r-- 1 root root 396728 2016-08-26 14:06 libswresample.a lrwxrwxrwx 1 root root 24 2016-08-26 14:06 libswresample.so -> libswresample.so.2.1.100 lrwxrwxrwx 1 root root 24 2016-08-26 14:06 libswresample.so.2 -> libswresample.so.2.1.100 -rwxr-xr-x 1 root root 111992 2016-08-26 14:06 libswresample.so.2.1.100 -rw-r--r-- 1 root root 2328734 2016-08-26 14:06 libswscale.a lrwxrwxrwx 1 root root 21 2016-08-26 14:06 libswscale.so -> libswscale.so.4.1.100 lrwxrwxrwx 1 root root 21 2016-08-26 14:06 libswscale.so.4 -> libswscale.so.4.1.100 -rwxr-xr-x 1 root root 570744 2016-08-26 14:06 libswscale.so.4.1.100 drwxr-xr-x 2 root root 4096 2016-08-26 14:06 pkgconfig
看到ffmpeg相关的库主要是以下7个
libavutil:用于多媒体编程,主要包含安全合适的字符串操作函数、数学运算函数、随机数字生产器、数据结构、多媒体处理的相关函数(如对像素和采样格式的计数)等,但它不是libavcodec和libavformat所需的库代码;
libavcodec、libavformat:有些视频文件格式(如AVI)没有指出应该使用哪种编码(如h.264)来解析音频和视频数据,它们只是按视频格式封装音视频数据,所以经常碰到打开视频文件只能听到声音而没有画面,则用libavformat来解析视频文件并将编码流分离出来,libavcodec对流进行解码;
Libavdevice:为一些常见的多媒体输入或输出设备提供了抓取和渲染的通用架构,并且很多输入和输出设备,如Video4Linux2, VfW, DShow, and ALSA;
libavfilter:提供了一个通用规定音视频过滤架构,包括一些过滤器、源、汇(什么是源、汇,我也没搞清楚,待研究)
libswscale:执行高度优化的图像缩放、色彩、像素格式转换操作
libswresample:执行高度优化的音频重采样、重换算、样本格式转换操作
初步觉得ffmpeg的主要功能就在这些lib中,重点弄清楚lib中重要的接口。
三、代码调用ffmpeg库接口函数
代码文件ffmpegmain.c中
#include <stdio.h> #include "<span style="font-family: Arial, Helvetica, sans-serif; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">libavcodec/avcodec.h</span><span style="font-family: Arial, Helvetica, sans-serif;">"</span> int main(int argc, char **argv) { printf("ffmpeg test!!!\n"); avcodec_register_all(); return 0; }
其中avcodec_register_all();是要使用的接口,要包含"libavcodec/avcodec.h"头文件,运行gcc
-o ffmpegmain ffmpegmain.c -lavcodec -L/usr/local/ffmpeg/lib -I/usr/local/ffmpeg/include即可
所以进行ffmpeg开发,则根据情况条用相关接口功能实现所需要的功能。
四、ffmpeg命令工具简单使用
1. MP4格式转换成avi视频格式:
运行后,会将mp4格式的视频文件转换成avi格式。
五、代码结构(待续)
相关文章推荐
- 获取版本号完成版本更新的过程步骤方法流程及Xutils的使用(项目实战学习总结)
- 从零开始学习音视频编程技术(五) 使用FFMPEG解码视频之保存成图片
- 从零开始学习音视频编程技术(五) 使用FFMPEG解码视频之保存成图片
- Android音视频学习第2章:使用ffmpeg进行音频解码
- 学习在新线程中使用Handler更新UI的方法
- 视频编解码之windows平台下编译ffmpeg的方法和使用教程
- ffmpeg系列:使用C++类封装ffmpeg,封装视频帧解码功能Decode()方法
- jQuery学习笔记--jqGrid的使用方法(编辑,删除,更新,新增)
- Android音视频学习第1章:使用ffmpeg进行视频解码
- jQuery学习笔记--jqGrid的使用方法(编辑,删除,更新,新增)
- 用例题来学习java中Timer和timertask使用方法
- 关于ASP.NET“操作必须使用一个可更新的查询”问题的解决方法
- java:log4j学习(5)-转帖:Log4j基本使用方法
- JSF学习(二)——托管Bean的使用方法和技巧
- "执行SQL语句时出现问题操作必须使用一个可更新的查询"错误的解决方法
- 学习CSS中background-position的使用方法
- AJAX学习基础:简单介绍数据岛使用方法
- ffmpeg 使用方法
- [学习笔记]java web ServletContext.getRealPath(String str)方法的使用
- [ASP.NET学习笔记之四]数据集的使用方法和技巧