对于每一个刚開始学习的人,刚開始接触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. Session,有没有必要使用它?

    阅读目录 开始 Session的来龙去脉 Session对并发访问的影响 Session的缺点总结 不使用Session的替代方法 Asp.net MVC 中的Session 现有的代码怎么办? 今天 ...

  2. Golang性能调优入门

    如何利用golang自带的profile工具进行应用程序的性能调优,前一段时间我做的日志分析系统在线上遇到了一个问题,就是分任务的系统down机了,日志处理延迟了10几个小时,这个时候任务分发系统重启 ...

  3. 在Ubuntu上为Android系统编写Linux内核驱动程序

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6568411 在智能手机时代,每个品牌的手机都有 ...

  4. HDU 1085 Holding Bin-Laden Captive! (母函数)

    Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

  5. java 自动装箱、自动拆箱

    /** * @描述:自动装箱,自动拆箱 * @date 2017年1月10日下午1:30:01 * 结论:包装类的"=="运算在不遇到算术运算的情况下不会自动拆箱, * 以及他们的 ...

  6. Qt 'void QWidget::show()' is inaccessible

    今天在编写Qt窗体头文件时,尽然碰到了这样的报错,'void QWidget::show()' is inaccessible,'QWidget' is not an accessible base ...

  7. fddd

    <script language="JavaScript" type="text/javascript"> function exportChart ...

  8. httpd-vhosts.conf的配置

    <VirtualHost *:80> DocumentRoot "D:\product\web\Public" ServerName demo.web.com Dire ...

  9. oracle中anyData数据类型的使用实例

    ---创建waterfallcreate or replace type waterfall is object(name varchar2(30),height number); --创建river ...

  10. OER 7451 in Load Indicator : Error Code = OSD-04500:指定了非法选项

    alert 日志错误OER 7451 in Load Indicator : Error Code = OSD-04500:指定了非法选项 Sun Apr 22 11:15:51 2012 OER 7 ...