关于FFmepg的冷知识,这一篇就够了

这篇具有很好参考价值的文章主要介绍了关于FFmepg的冷知识,这一篇就够了。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

每一个从事音视频技术开发的工程师对FFmpeg都不会感到陌生,即使是刚刚踏入这个行业的初学者,但对他们来说这条路上好像有着一条不可逾越的鸿沟,“雷神”和许多大神都总结过一些FFmpeg的学习方法,小编在这里为大家做一个整理,方便大家有一个清晰的思路。

以下是截取自CSDN对“雷神”的悼念:

中国传媒大学通信与信息系统专业攻读博士雷霄骅,CSDN的老朋友、连续两届CSDN博客之星、微软MVP、博客排名52位,他的博客帮助了很多人,除了在博客上回复大家的问题,以及还有自己的技术交流群,旨在为视音频技术同行方便交流提供一个平台。不幸的是,2016年7月17日凌晨猝死在学校主楼五层,据相关报道称,事发前雷霄骅一直泡在实验室忙碌,怀疑其是劳累过度导致猝死。

基本介绍

FFmpeg是一套非常知名的音视频处理的开源工具,它包含了开发完成的工具软件、封装好的函数库以及源代码供我们按需使用。FFmpeg提供了非常强大的功能,可以完成视频采集、音视频的编码、解码、转码、后处理(抓图、水印、封装/解封装、格式转换等),还有流媒体服务等诸多功能,可以说涵盖了音视频开发中绝大多数的领域。

使用FFmpeg作为内核视频播放器:

Mplayer,ffplay,暴风影音,QQ影音,KMplayer……

使用FFmpeg作为内核的Directshow Filter:

ffdshow,lav filters……

使用FFmpeg作为内核的转码工具:

ffmpeg,格式工厂……

原生的FFmpeg是在Linux环境下开发的,但是通过各种方法(比如交叉编译等)可以使它运行在多种平台环境上,具有比较好的可移植性。

FFmpeg历史

FFmpeg项目最初是由Fabrice Bellard发起的,从2004年起由Michael Niedermayer领导进行维护。许多FFmpeg的开发者同时也是MPlayer项目的成员,FFmpeg在MPlayer项目中是被设计为服务器版本进行开发。

2011年3月13日,FFmpeg部分开发人员决定另组Libav,同时制定了一套关于项目继续发展和维护的规则。

FFmpeg编解码器的演进

迄今为止,在FFmpeg项目中已经创建了具有相应编解码器和一种容器格式的两种视频编码格式。两个视频编解码器是无损FFV1,以及无损和有损的Snow编解码器。

2010年夏天,FFmpeg团队的Fiona Glaser,Ronald Bultje和David Conrad宣布退出ffvp8解码器,通过测试证明ffvp8比Google的libvpx解码器更快,从0.6版本开始,FFmpeg也开始支持WebM和VP8。

2013年10月,原生VP9和OpenHEVC解码器——一个开源的高效率视频编码解码器,被添加到FFmpeg中。

2016年,本地AAC编码器被认为是最稳定的,消除了对来自VisualOn和FAAC的两个外部AAC编码器的支持。FFmpeg3.0(昵称“爱因斯坦”)保留了Fraunhofer FDK AAC编码器的构建支持。

FFmpeg的耻辱柱

由于FFmpeg和Libav是在LGPL、GPL下发布的,任何人都可以遵守协议的情况下自由使用。目前有很多播放软件都使用了FFmpeg和Libav的代码,但却没有将任何源代码公开。FFmpeg和Libav社区便将这些违反协议的公司、组织、个人的网址贴在“耻辱柱”上,并与这些公司、组织、个人商讨如何解决版权争议。

文末名片免费领取音视频开发学习资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

FFmpeg组成

FFmpeg主要由三个部分构成。

第一部分是四个不同作用的工具软件,分别是:

  • ffmpeg.exe:音视频转码器;

  • ffplay.exe:简单的音视频播放器;

  • ffserver.exe:流媒体服务器;

  • ffprobe.exe:简单的多媒体码流分析器。

第二部分是为各个不同平台编译完成的库,开发者可以根据自己的需求使用这些库开发自己的应用程序。

  • libavcodec:包含音视频编码器和解码器;

  • libavutil:包含多媒体应用常用的简化编程的工具,如随机数生成器、数据结构、数学函数等。

  • libavformat:包含多种多媒体容器格式的封装、解封装工具;

  • libavfilter:包含多媒体处理常用的滤镜功能;

  • libavdevice:用于音视频数据采集和渲染等功能的设备相关;

  • libswscale:用于图像缩放、色彩空间、像素格式转换等功能;

  • libswresample:用于音频重采样和格式转换等功能。

第三部分是整个工程的源代码,无论是编译好的可执行程序还是SDK,都是使用这些源代码进行编译的。FFmpeg的源代码由C语言实现,主要在Linux平台进行开发。

FFmpeg工具的使用

ffmpeg工程包可以从官网“Download”页面下载,它提供了三种不同的模式:Static、Shared和Dev。前面两个版本可以直接在命令行中使用,区别在于:Static中只有3个应用程序(ffmpeg.exe,ffplay.exe和ffprobe.exe),而且每个体积都很大,相关的Dll已经被编译到exe中;而Shared中除了上面提到的3个应用程序外还有一些Dll,比如avcodec-54.dll。而且Shared中的exe体积很小。相对于前两个版本,Dev版本是用于开发的,没有exe文件,而是包含了库文件.lib和头文件.h。

1.ffmpeg.exe

ffmpeg.exe可以说是整个工程的核心,它的主要功能是完成音视频的转码:ffmpeg.exe可以将视频文件由原格式转换为其他格式,如从.avi转为.mp4:

ffmpeg -i ../video/IMG_001.MOV../video/output_mpeg4_mp3.avi

ffmpeg默认将视频编码格式选择为mpeg4,音频编码格式为mp3。如果希望保留原始编码,则需要增加参数“-c”(copy,表明不做任何转码操作)。如果需要将视频转换为其他编码格式,则需要在参数中指定目标格式-c:v libx265或-vcodec libx265。

ffmpeg支持的所有编码器格式可以通过以下命令查看:

ffmpeg.exe -encoders

在视频解封装方面,ffmpeg可以将视频中的音频和视频流分别提取出来:需要在命令行中添加参数-an和-vn,分别表示屏蔽音频和视频流。

2.ffplay.exe

ffplay.exe是使用ffmpeg库和SDL库开发的,可以用作FFmpeg API的测试工具。ffplay最简单的使用方法是直接按照默认格式播放一个音视频文件或流:

ffplay.exe -i../video/IMG_001.MOV

除此以外,ffplay还支持传入各种参数来控制播放行为,具体参数可以参考官网的文档。

3.ffprobe.exe

ffprobe.exe可以用于查看音视频文件格式。最简单的使用方法和ffplay类似:

ffprobe.exe -i../video/IMG_001.MOV

分析完成后,ffprobe会显示音视频文件中包含的每个码流的信息,包括编码格式、分辨率、码率、帧率等信息。

FFmpeg源代码分析

了解了FFmpeg库的使用之后就可以开始看源代码,需要注意的是FFmpeg的源代码只有在Linux下才能编译,如果是在Windows环境下就需要使用MinGW进行编译。推荐使用Eclipse查看FFmpeg的源代码。

小编献上雷神分享的一份很完整的ffmpeg源代码的分析文档:

http://download.csdn.net/download/leixiaohua1020/6377803

关于FFmepg的冷知识,这一篇就够了

 文章来源地址https://www.toymoban.com/news/detail-411783.html

到了这里,关于关于FFmepg的冷知识,这一篇就够了的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker入门,这一篇就够了。

    Docker容器虚拟化平台。 今天跟大家分享一下我的docker学习历程,也算是我的独特的复习笔记,我会在这一篇中讲清楚docker几乎所有的功能。不过也是我第一次写,而且是一篇两万多字的长文,花了我半个月里所有的休闲娱乐时间,所以写的不好的地方请大家见谅,也请在评论

    2024年02月03日
    浏览(56)
  • 学习SpringSecurity这一篇就够了

    案例源码地址:https://gitee.com/gzl_com/spring-security.git 1.1、概要 Spring Security 是 Spring 家族中的成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。 安全方面的两个主要区域是“ 认证 ”和“ 授权 ”。在Web 应用又称之为 用户认证 和 用户授权 两个部

    2024年02月11日
    浏览(54)
  • 精通线程池,看这一篇就够了

    当我们运用多线程技术处理任务时,需要不断通过new的方式创建线程,这样频繁创建和销毁线程,会造成cpu消耗过多。那么有没有什么办法 避免频繁创建线程 呢? 当然有,和我们以前学习过多连接池技术类似,线程池通过提前创建好线程保存在线程池中, 在任务要执行时取

    2023年04月17日
    浏览(90)
  • CSS基础——看这一篇就够了

    目录 一、CSS简介 1.CSS是什么? 2.CSS的作用 3.CSS的构成 二、CSS选择器 1.基础选择器 (1).标签选择器 (2)类选择器 (3)标签选择器 (4) 通配符选择器 2.复合选择器 (1)后代选择器(包含选择器) (2)子选择器 (3)并集选择器 (4)伪类选择器  三、基本属性 1.字体属性

    2024年02月09日
    浏览(60)
  • kafka入门用这一篇就够了!

    目录 1,kafka简单介绍 2,kafka使用场景 3,kafka基本概念 kafka集群 数据冗余 分区的写入 读取分区数据 顺序消费 提交策略 零拷贝技术(netty) kafka是一款分布式、支持分区的、多副本,基于zookeeper协调的分布式消息系统。最大的特性就是可以实时处理大量数据来满足需求。

    2024年01月25日
    浏览(38)
  • 学习C++这一篇就够了(进阶篇)

    C++在执行程序的时候,将内存方向划分为4个区域: 代码区:存放二进制代码,由操作系统进行管理 全局区:存放全局变量、静态变量、常量,程序结束后由操作系统释放 栈区:存放函数参数、局部变量,由编译器自动分配和释放 堆区:由开发者申请分配和释放,若程序员

    2024年02月12日
    浏览(43)
  • 超图(HyperGraph)学习,看这一篇就够了

    最近事多,好久没更新了,随便写写(Ctrl+V)点 一、超图定义 通常图论中的图,一条edge只能连接2个vertex,在超图中,不限量 如何理解呢,就用我正在做的KT问题来看:7道题目-7个顶点;4种概念-4条超边,其中第1,2,3题都是考察概念1的,则构建一个包含了这仨的超边,以此类

    2024年02月02日
    浏览(58)
  • 还不会二分查找?看这一篇就够了

    二分查找分为整数二分和浮点数二分,一般所说的二分查找都是指整数二分。 满足单调性的数组一定可以使用二分查找,但可以使用二分查找的数组不一定需要满足单调性。 不妨假设我们找到了条件 C 1 C_1 C 1 ​ ,它和它的 对立条件 C 2 C_2 C 2 ​ 能够将数组 a a a 一分为二,

    2024年01月19日
    浏览(48)
  • SourceTree使用看这一篇就够了

     你梦想有一天成为git大师,然而面对复杂的git命令,你感觉TMD这我能记得住吗?你曾经羡慕从命令行敲git命令,才会更加炫酷,然而时间一长,TMD命令我有忘了。那么今天我介绍的这款工具会让你从git命令中解救出来,这就是git可视化工具SourcTree。 事实上Git的功能十分强大

    2024年02月08日
    浏览(60)
  • C语言结构体(这一篇就够了)

    目录 一、结构体变量 1.含义 2.一般形式: 3.结构体类型变量的定义方法 4.结构体的初始化 6.结构体成员的访问: 二、结构体指针: 1.概念 2.定义 3.使用 三、结构体数组: 1.概念 2.定义 3.使用 三、结构体指针数组: 1.概念 2.定义 3.使用 是一种构造数据类型 ,可以用于存储多个 不

    2023年04月17日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包