ffmpeg总体介绍

Dreaming-in-Gottingen 2020-10-27 原文


ffmpeg总体介绍

  先总体介绍一下FFmpeg,后面有时间了,再分类介绍一些工具,如转码、滤镜、视频截断与合并等功能。本文分如下几个章节来介绍。

1.FFmpeg是什么?

  它的官网为:https://ffmpeg.org/,由Fabrice Bellard(法国著名程序员Born in 1972)于2000年发起创建的开源项目。该人是个牛人,在很多领域都有很大的贡献。

  FFmpeg是多媒体领域的万能工具。只要涉及音视频领域的处理,基本上没有它做不了的事情!通俗点讲,从视频录制、视频编辑再到播放,它都能做!

  最近比较火的抖音,还有国内的一些视频点播厂商,像爱奇艺、腾讯视频、优酷视频,还有播放器,像QQ影音、暴风影音等,都离不开它!否则非常痛苦!为什么呢?

  因为又要招一大帮人来把多媒体领域内的基础工具(音视频编解码器、文件格式和协议库、滤镜库等等)实现掉。

2.FFmpeg的版权问题如何?

  它是一个开源、免费、跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证。而LGPL或GPL许可证又要求,基于该许可证进行开发的代码,也有义务和责任GPL你的代码,无论是你直接使用它的代码,还是不修改代码而链接它的库。

  很多厂商,尤其国内的,都不太care版权问题,以致于上了耻辱柱。一些播放器,像KMPlayer(韩国的)、Potplayer、暴风影音、QQ影音等,使用了ffmpeg但没开源,还有一些视频直播短视频类的,像tiktok客户端,也使用了ffmpeg的库。

  FFmpeg有耻辱柱公示栏,但目前已下线。从历史记录里,我们依然可以看到这些名单,但这个名单到2014年就停止更新了,不知道出于何种原因。

3.FFmpeg工具包括什么?

  FFmpeg包含的工具众多。通俗来说,例如录制,从采集到编码再到封装,它都能干!例如视频播放,从解封装到解码再到输出,它也能干。例如给视频加各种滤镜(水印,字幕等等),对它来说也都是小菜一碟。再比如视频编解码格式的转码,还有文件格式的转换,对它来说,都不在话下。

  从专业角度上,以功能分类,它包含了如下几个库(ffmpeg -h命令可以查看):

libavutil —— 基础工具库,用于辅助多媒体编程。例如,数学函数、字符串操作、内存管理相关、数据结构相关、错误码及错误处理、日志输出,以及其他辅助信息(比如密钥、哈希值、宏、库版本、常量等)。

libavcodec ——音频、视频的编码和解码库,这是它的强项,很多codec都是从头开发,包含很多类型的编解码器!

libavformat ——文件格式和协议库,例如很多视频文件名都是以.mp4、.mkv、.avi后缀名结尾,该库包含众多用于文件封装(录制时)和解封装(播放时)的库。

libavdevice ——输入和输出的设备库,例如mic采集pcm数据,或pcm数据输出到声卡,视频帧输出渲染相关(又需要依赖SDL库,只有检测到SDL库才能编译相关的代码,例如ffplay编译出就需要依赖更底层的SDL库)。

libavfilter ——音视频滤镜库,例如音频里的变声不变调、变调不变声,视频领域内的添加水印、去水印、添加logo等,功能由该库完成。

libswscale ——图像格式转换库,例如视频帧的缩放、色彩空间转换等。

libswresample ——音频重采样库。

libpostproc ——视频后处理库。

4.下载时几个版本介绍(只针对win平台)

  去官网下载,可以下载三种类型(目前好像已不按照这种方式提供了)的压缩包:Dev版本、Static版本、Shared版本。

  “Dev版本”,提供:dll库+头文件。这个是已经编译出来的动态库(window下是dll,对应于linux下的so,上面列出来的按功能各有一个动态库),供第三方做二次开发,开发者的代码中引用提供的头文件,编译时链接这些dll库,即可让自己的exe跑起来。

  “static版本”,只包含编译出来的exe文件(其实就三个——ffmpeg/ffplay/ffprobe),不包含各种动态库(因为各种库已经打包进了exe文件中,这导致了这些exe文件的size非常大)。这个版本是为懒人准备的,直接拿来就可以跑,不用去解决各种编译及依赖问题。注意,里面不仅仅集成了由FFmpeg源码编译出来的东西,还集成了之外的内容(各种第三方库)。例如常用的x264编码器,本不属于FFmpeg所维护的范围,但其可以将其集成到ffmpeg.exe中。还有显示的SDL2,也被集成到ffplay.exe中。参考链接

  “shared版本”,提供:dll库+exe可执行文件。其中dll库和exe文件的size都很小。注意测试exe文件时,dll库路径要加载进系统环境变量中,否则执行时会导致链接库找不到而停止。

 

版权声明:本文为Dreaming-in-Gottingen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Dreaming-in-Gottingen/p/13882305.html

ffmpeg总体介绍的更多相关文章

随机推荐

  1. opencv实战——机器视觉检测和计数

    引言 在机器视觉中,有时需要对产品进行检测和计数。其难点无非是对于产品的图像分割。 由于之前网购的维生素片,有 […]...

  2. 数据库管理工具DataGrip使用总结(一) – 申城异乡人

    数据库管理工具DataGrip使用总结(一) 2019-03-23 22:23  申城异乡人  阅读(9070 […]...

  3. 如何判断链表有环

                                                        如何判 […]...

  4. Webservice、WSDL三种服务访问的方式【转】

    http://www.cnblogs.com/yongfeng/archive/2013/01/30/2883 […]...

  5. Java知多少(29)覆盖和重载

    在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称 […]...

  6. 日常英语—八、REBOOT – What is the difference? -MapleStory

    日常英语—八、REBOOT – What is the difference? -Ma […]...

  7. taskAffinity 属性详解

    一、本文目的 本篇文章的目的是为了 搞清楚,哪些情况下开启一个 Activity 会在新的 task 运行,哪 […]...

  8. 【笔记】ThreadPoolExecutor源码阅读(三)

    线程数量的维护 线程池的大小有两个重要的参数,一个是corePoolSize(核心线程池大小),另一个是max […]...

展开目录

目录导航