对于每一个刚開始学习的人,刚開始接触ffmpeg时,想必会有三个问题最为关心,即ffmpeg是什么?能干什么?怎么開始学习?本人前段时间開始接触ffmpeg,在刚開始学习过程中。这三个问题尤其最后一个问题着实困扰了我一下。如今将我对ffmpeg的一点理解分享出来。希望对正在学习ffmpeg编程的同学有帮助。

       1. ffmpeg是什么?
       (1)你能够把ffmpeg理解成一套音视频解决方式。而且还是免费、开源、跨平台的解决方式。它提供了录制、转换以及流化音视频等等功能。

同一时候还包括了很先进的音频/视频编解码库,这样使用ffmpeg能够对採集的原始音视频进行编码存储,或者将已有的音视频文件解码播放。这里简单提一下,ffmpeg中视频h264编码依赖x264第三方视频编码库,音频MP3编码依赖lame mp3第三方编码库。

       (2)同一时候。ffmpeg更是一组使用c语言开发的开源程序,与许很多多的开源程序一样。它有自己的社区、有活跃的维护者。尤其是近2年。版本号更新非常快。差点儿相同每一个月都有更新。打开ffmpeg源文件,看到成千上万行的c代码。在佩服作者的聪明才智同一时候。也不禁为自己的智商捉急。看到源文件。也就能够了解ffmpeg api的实现细节。这样就能够依照自己的需求进行改动,实现一个定制版的ffmpeg。当然。走到这一步还是须要点功夫的。从本人的学习过程来看,别说改动ffmpeg,刚開始面对ffmpeg一堆api,真是一头雾水,无从下手,后面会讲怎样学习ffmpeg。
       2. ffmpeg能干什么?
       (1)你能够下载安装ffmpeg,例如以下图所看到的,然后在控制台命令行中输入ffmpeg相关命令,这样就能够实现播放歌曲、视频。甚至通过命令实现对音视频文件转换、混合、剪辑等各种复杂处理。这样的ffmpeg使用情景在server端比較多。相信非常多视频类站点都架设了基于ffmpeg的流媒体server,比方给server上保存的视频加个水印,尽管我没搞过,但相信就是一组命令的事吧。
                                          

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3JhZng=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

       (2)你还能够下载ffmpeg源代码,例如以下图所看到的,在windows平台、android平台等各种平台下编译ffmpeg源代码,以获取不同平台下ffmpeg静态库或者动态库。供自己的程序调用,以实现基于ffmpeg的音视频编解码等程序开发。这样的ffmpeg使用情景在client比較多,比方短视频类app应用《微视》,它的音视频编解码工作就是调用ffmpeg完毕的。当然,我最近正在搞的短视频类app应用编解码也是调用ffmpeg完毕的。


       3. 怎样学习ffmpeg?
       在网上搜索ffmpeg的学习资源,大体能够搜出两大类,一个是ffmpeg相关命令学习资料,也就是上一节中提到的在server端安装ffmpeg。然后通过命令的方式调用ffmpeg完毕音视频转换、转播等工作。这方面资料较多。另外因为本人没深入去研究这些命令使用方法,这里就不多讲了。还有一个就是ffmpeg api学习资料,api学习资料要比前者偏少些。对于ffmpeg api学习,在网上查来查去。回过头会发现最好的入门学习资料事实上是源代码doc/examples文件下的几个程序。这几个程序都是独立的demo演示样例程序。分别实现了媒体文件打开、音视频混合、音视频编解码等等基础且常见的功能,通过分析这几个demo演示样例程序,会逐渐掌握ffmpeg的api使用方法。这几个demo演示样例程序每一个文件大小不一样。推荐从体积最小的文件看起,即代码行数最少,这样也不会产生望而生畏的心态了。当然,仅仅分析源代码是远远不够的。还须要把这些demo执行起来,这样才干对ffmpeg的參数及调用逻辑有更深入的了解。后面会讲讲怎样在windows环境下搭建ffmpeg开发环境。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3JhZng=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">



ffmpeg学习笔记的更多相关文章

  1. ffmpeg学习笔记-多线程音视频解码

    之前的视频解码仍然存在问题,那就是是在主线程中去完成解码的,会造成线程阻塞,这里将其改为多线程解码,使其主线程不被阻塞 前面介绍了音视频的主线程解码,那样会阻塞主线程,在前面学习了多线程以后,就可以对 ...

  2. ffmpeg学习笔记-编译脚本

    之前已经用他人的编译脚本对ffmpeg进行了成功编译,那么在裁剪ffmpeg的时候需要指定文件,这时候应该怎么编写编译脚本呢?本文目的在于说明ffmpeg编译脚本的编写 首先在ffmpeg的目录下新建 ...

  3. ffmpeg学习笔记-音频播放

    前文讲到音频解码,将音频解码,并且输入到PCM文件,这里将音频通过AudioTrack直接输出 音频播放说明 在Android中自带的MediaPlayer也可以对音频播放,但其支持格式太少 使用ff ...

  4. ffmpeg学习笔记-音频解码

    在之前的文章已经初步对视频解码有个初步的认识了,接下来来看一看音频解码 音频解码步骤 音频解码与视频解码一样,有者固有的步骤,只要按照步骤来,就能顺利的解码音频 以上是ffmpeg的解码流程图,可以看 ...

  5. ffmpeg学习笔记-native原生绘制

    上次已将ffmpeg的动态库编译出来了,并且使用了ffmpeg的转码功能,成功将mp4格式视频转化为yuv视频,这篇文章基于上次测试的demo,使用surfaceview显示解码完成的像素数据 布局设 ...

  6. ffmpeg学习笔记-Linux下编译Android动态库

    Android平台要使用ffmpeg就需要编译生成动态库,这里采用Ubuntu编译Android动态库 文件准备 要编译生成Android需要以下文件 NDK ffmpeg源代码 NDK下载 NDK可 ...

  7. ffmpeg学习笔记-ffmpeg在VS下的运用

    ffmpeg官网提供了window平台下额开发工具供开发者使用,这篇文章主要以3.2版本的ffmpeg作为演示,记录在VS2013下,怎么去编译ffmpeg 下载 在官网中,按照以下步骤下载 下载Wi ...

  8. ffmpeg学习笔记-初识ffmpeg

    ffmpeg用来对音视频进行处理,那么在使用ffmpeg前就需要ffmpeg有一个大概的了解,这里使用雷神的ppt素材进行整理,以便于复习 音视频基础知识 视频播放器的原理 播放视频的流程大致如下: ...

  9. FFmpeg学习笔记之安装

    本随笔原文出自:一叶知秋0830链接:https://www.jianshu.com/p/ab469a2ffd28 1.下载FFmpeg 先进入要存放下载文件的目录,比如要放在/Users/qinji ...

随机推荐

  1. Android——SQLite实现面向对象CRUD

    android中SQLite的使用,事实上倒也不难.可是与JDBC操作数据库相比,这个还是有点不顺手,并且我好久没写底层的封装了,使用SSM框架这些都不须要考虑......好了,废话不多说.以下直接建 ...

  2. Weblogic的Admin server进程将CPU消耗尽问题解决

    1.serverCPU被耗尽,持续100% 以下附nmon图 2.两个weblogicadmin server进程将CPU耗尽 问题:24298进程,占用百分之四千多的CPU资源 23529进程,占用 ...

  3. ACM-简单题之Ignatius and the Princess II——hdu1027

    转载请注明出处:http://blog.csdn.net/lttree Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Othe ...

  4. 设计模式之八:外观模式(Facade)

    外观模式: 为子系统中的一系列接口提供了一个统一的界面.外观模式定义了一个高层次的接口以使子系统更加easy使用. Provide a unified interface to a set of in ...

  5. 改动mac环境变量,并配置gradle

    由于项目中要用到gradle命令,可是没有配置环境变量.这里记录一下解决过程. 过程例如以下: 1. 启动终端Terminal 2. 进入当前用户的home文件夹 输入cd ~ 3. 创建.bash_ ...

  6. 【js】判断设备类型,访问相应的网站

    引入 function uaredirect(f) { try { if (document.getElementById("bdmark") != null) { return ...

  7. doT.js 声明

    // 模板引擎配置项 var tmplOptions = { evaluate: /\{\{([\s\S]+?\}?)\}\}/g, interpolate: /\{\{=([\s\S]+?)\}\} ...

  8. hdu3998 Sequence(最大流,LIS)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Sequence Time Limit: 2000/1000 MS (Java/O ...

  9. PHP--变量部分知识点

    PHP全局变量 PHP全局变量作用域不同与C,在函数内部不可以使用全局变量,要在函数内部使用全局变量需要,global $var或者使用超全局变量数组$GLOBALS['var']. 静态变量 PHP ...

  10. Android SDK 更新时修改hosts文件仍然无法更新,可试试这个方法……

    Android SDK 更新时修改hosts文件仍然无法更新,此时必定万分蛋疼.在hosts文件中更换了各种ip,仍然解决不了!!!!!!!!!!!!!!? 第一步: 打开此软件,等待服务器连接 第二 ...