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

news2025/7/17 20:14:57

每一个从事音视频技术开发的工程师对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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/36324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《恋上数据结构与算法》第1季:动态数组原理实现(图文并茂,一文带你了解ArrayList底层实现)

动态数组原理实现一、数组(Array)二、动态数组三、动态数组的设计四、动态数组的实现1. 添加元素2. 数组扩容3. 删除元素4. 数组缩容5. 清空元素6. 修改元素7. 查询元素8. 插入元素9. 查看元素位置10. 是否包含某个元素11. 元素的数量12. 数组是否为空13…

win11的C/C++环境配置——基于MinGW-W64 GCC-8.1.0

首先给出MinGW-W64 GCC-8.1.0的下载地址:MinGW8.1.0 Win11下的C/C环境配置下载MinGW-W64 GCC-8.1.0添加bin文件和include文件到path变量中测试下载MinGW-W64 GCC-8.1.0 网页截图如下: 可以复制下载地址到迅雷中加速,下载完成后的文件如下&a…

MCE | “神药”二甲双胍后,糖尿病药物研究谁将是下一个顶流?

说到糖尿病药物,就不得不提一嘴“神药”二甲双胍,但除了二甲双胍,抗糖尿病药物的研究难道就没有点新玩意儿?当然有! 糖尿病 (Diabetes) 是一种以高血糖为特征的慢性代谢病,是由于胰岛素分泌缺陷或者其生物…

美团闪购:闪电仓商户如狼似虎,传统商超便利店坐享其成?

近日,考研网红教师张雪峰一句“外卖员这个职业5-10年内可能会消失”再度登上热搜。 其实,他的这个推论,只是看到了目前外卖骑手的保有量,截至2021年,中国外卖骑手约1300万名。并没有看到炙手可热的“即时消费”新趋势&…

【Shell 脚本速成】05、Shell 运算详解

目录 一、赋值运算 二、算术运算[四则运算] 2.1 运算符与命令 2.2 整形运算 expr 命令:只能做整数运算,格式比较古板,运算符号两边注意空格 let命令:只能做整数运算,且运算元素必须是变量,无法直接对…

MySQL窗口函教-序号函数(row_number、rank、dense_rank)

MySQL窗门函教-序号函数(row_number、rank、dense_rank) 前言 mysql8.0中新增窗口函数(开窗函数) 窗口函数和普通聚合函数的区别 ①聚合函数是将多条记录聚合为一条;窗口函数是每条记录都会执行,有几条记…

代码源每日一题div1 区间和

区间和 - 题目 - Daimayuan Online Judge 题意: 思路: 根据前缀和的性质:当已知的前缀和区间是整个区间的划分时,才能求出整个区间的和 因为如果两个区间之间有交叉,交叉部分的和求不出来 因此,如果已知…

DeFi收益来源全面概述

去中心化金融一个主要的优势就是它对所有人开放,任何人在任何时间、任何地点都可以参与其中。这样一来,作为DeFi参与者就有机会获得在传统金融领域很难获得或根本不可能获得的收益。 加密货币的特性是开源的、无需许可的,这将DeFi变成了一个…

【Linux】进程创建/终止/等待/替换

目录 一、子进程的创建 1、fork函数的概念 2、如何理解fork拥有两个返回值 3、fork调用失败的场景 二、进程的终止 1、main函数返回值 1.1main函数的返回值的意义 1.2将错误码转化为错误信息 1.3查看进程的退出码 2、进程退出的情况 1、进程的正常退出与异常退出 2…

Principal branch

In mathematics, a principal branch is a function which selects one branch (“slice”) of a multi-valued function. Most often, this applies to functions defined on the complex plane. Contents1 Examples1.1 Trigonometric inverses1.2 Exponentiation to fraction…

255-261BFC,媒体的类型,媒体的特性,浏览器前缀,媒体查询,逻辑操作符,

◼ 有时候可能会看到有些CSS属性名前面带有:-o-、-xv-、-ms-、mso-、-moz-、-webkit- ◼ 官方文档专业术语叫做:vendor-specific extensions(供应商特定扩展) ◼ 为什么需要浏览器前缀了?  CSS属性刚开始并没有成为标准,浏览器为了防止后续会修改名字给新的属性添加了浏…

树莓派学习笔记(一)

树莓派学习笔记 笔记来自B站UP主【树小悉】的树莓派系列视频的听课笔记,通俗易懂,风趣幽默,适合新手入门,强烈推荐!!! 关机命令 sudo poweroff 关闭电源sodo shutdown -h now 立刻关机sudp shut…

二、进程管理(四)经典同步互斥问题

目录 4.1生产者-消费者问题 4.1.1单类生产者-单类消费者问题 4.1.2多类生产者-多类消费者问题 4.1.3吸烟者问题 4.2读者-写者问题 4.3哲学家进餐问题 分析进程同步和互斥问题的三步: 关系分析:分析问题中的同步(前驱关系)、…

端口渗透篇:Java RMI 远程代码执行漏洞

转载https://cloud.tencent.com/developer/article/2149191 前言持续更新:整理下渗透测试工作中发现过的漏洞(包含漏洞描述、漏洞等级、漏洞验证、修复建议),这里不深究漏洞产生的各种后利用或者绕过方式,漏洞验证过程…

【Python游戏】Python各大游戏合集(5):塔防游戏、飞机大战、连连看、打地鼠、记忆翻牌 | 附带源码

相关文件 关注小编,私信小编领取哟! 当然别忘了一件三连哟~~ 公众号:Python日志 可以关注小编公众号,会不定时的发布一下Python小技巧,还有很多资源可以免费领取哟!! 源码领取:加P…

【高速数字化仪应用案例系列】虹科数字化仪在通信领域的应用

通信应用 随着国际社会要求以越来越快的速度传输更多信息,电子通信也在不断发展。模拟和数字技术用于无线、光纤和有线网络系统提供的点对点和广播通信。为了开发和维护这些系统,工程师需要能够测试和鉴定接收和传输的信号。需要减少信号损失或衰减&…

SpringBoot SpringBoot 原理篇 1 自动配置 1.2 bean 的加载方式【二】

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇1 自动配置1.2 bean 的加载方式【二】1.2.1 第二种方式1 自动配置 1.2 bean …

idea 项目代码打包为jar包详解

目录前言一、将所有依赖和模块代码打包为一个jar二、只将模块代码打包为一个jar前言 假设我有如下简单 maven 项目 点击 File > Project Structure > Artifacts > 点击加号 > 选择JAR > 选择From modules with dependencies 一、将所有依赖和模块代码打包为一…

【树莓派不吃灰】命令篇⑨ 记录学习文件系统

目录1. 外部存储设备1.1 分区挂载1.2 查看磁盘信息(包括未挂载磁盘)1.2.1 mmcblk0p01.2.2 sda1(额外了解)1.3 查看UUID1.4 查看文件系统挂载情况2. 文件系统2.1 索引式文件系统2.1.1 EXT2 文件系统(了解)2.…

Android 序列化框架 Gson 原理分析,可以优化吗?

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 前言 大家好,我是小彭。 Gson 是 Google 推出的 Java Json 解析库,具有接入成本低、使用便捷、功能扩展性良好等优点,想必大家都很熟悉了。…