FFmpeg介绍及入门知识

news2024/9/28 9:27:30

1、简介

  FFmpeg是一套由c语言编写的,可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,自身采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案,包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

  • FFmpeg项目由Fabrice Bellard创建于2000年,使用C语言和汇编语言编写。
  • FFmpeg名称中的"FF"是“Fast Forward”的缩写,是快进的意思。“mpeg” 则是标准化组织“Moving
    Pictures Experts Group”的缩写。
  • 属于自由软件, 采用 LGPL 或GPL 许可证(依据你选择的组件)。

  FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward",FFmpeg编码库可以使用GPU加速。

  Libav 和 FFmpeg 是什么关系
  答:原始FFmpeg的一群开发者不满FFmpeg的项目管理方式,所以fork了新的一个项目,叫libav。结果是增加了竞争,让FFmpeg更新的更频繁,FFmpeg经常把Libav的提交合并回FFmpeg;但是就链接作者所说,libav的开发也有很多自己的问题,所以FFmpeg与Libav哪个发展最好也很难判断。

2、功能介绍

  多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。下面简单介绍一些常用功能。

  • 音视频播放器内核
      ffmpeg可以作为核心库文件,制作音视频播放器。

  • 视频采集功能
      ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或 USB 摄像头的图像,还可以进行屏幕录制,同时还支持以 RTP 方式将视频流传送给支持RTSP、RTMP的流媒体服务器,支持直播应用。

  • 视频格式转换功能
      ffmpeg 视频格式转换功能。ffmpeg 可以轻易地实现多种视频格式之间的相互转换(wma,rm,avi,mod 等),例如可以将摄录下的视频 avi 等转成视频网站所采用的 flv 格式。

  • 音视频截取功能
      对于选定的音视频,截取指定时间的缩略图或者声音。

3、下载

  官网下载地址:http://ffmpeg.org/download.html#build-windows下载地址
在这里插入图片描述
在这里插入图片描述

  可以下载源码,也可以依据不同操作系统下载编译好的版本,编译好的版本目前分为两种,一种是静态编译 ffmpeg-6.0-full_build.7z,文件包内只包含3个exe文件,如下图所示:
在这里插入图片描述
  另外一种带shared后缀的是开发包,包含lib和dll文件。例如ffmpeg-6.0-full_build-shared.7z。
在这里插入图片描述

4、SDK介绍

4.1 工具exe

  四个作用不同的工具软件,分别是:ffmpeg.exe,ffplay.exe,ffserver.exe和 ffprobe.exe。其中从4.0版本移除了ffserver流媒体服务

  • ffmpeg:对视频音频和图片进行编解码、格式转换、分割和合并等。
  • ffplay:简单的媒体播放器,使用了ffmpeg 和 sdl 库。
  • ffprobe:简单的多媒体码流分析器。
  • ffserver.exe:流媒体服务器

4.2 SDK介绍

  SDK主要包含以下8个lib库,其中avresample.lib在新版本已经不存在被废弃了。所以说新版只有7个lib。
在这里插入图片描述

  • libavcodec:包含音视频编码器和解码器。编解码库,封装了 Codec 层,但是有一些 codec 是具备自己的 License的,FFmpe 不会默认添加像 libx264、FDK-AAC、Lame 等库,但是 FFmpeg 是一个平台,可以将其他的第三方codec 以插件的方式添加进来,为开发者提供统一接口。
  • libavutil:包含多媒体应用常用的简化编程的工具,如随机数生成器、数据结构、数学函数等功能。核心工具库,最基础模块之一,其他模块都会依赖该库做一些基本的音视频处理操作。
  • libavformat:包含多种多媒体容器格式的封装、解封装工具。文件格式和协议库,封装了 Protocol 层和Demuxer、Muxer 层,使得协议和格式对于开者来说是透明的。
  • libavfilter:包含多媒体处理常用的滤镜功能。音视频滤镜库,该模块包含了音频特效和视频特效的处理,在使用 FFmpeg 的 API进行编解码的过程中,可以使用该模块高效的为音视频数据做特效处理。
  • libavdevice:用于音视频数据采集和渲染等功能的设备相关。输入输出设备库,比如需要编译出播放声音或者视频的工具 ffplay,就需要确保该模块是打开的,同事也需要 libsdl 的预先编译,该设备模块播放声音和视频都又是使用 libsdl 库。
  • libswscale:用于图像缩放和色彩空间和像素格式转换功能。该模块用于图像格式转换,可以将 YUV 的数据转换为 RGB 的数据。
  • libswresample:用于音频重采样和格式转换等功能。用于音频重采样,可以对数字音频进行声道数、数据格式、采样率等多种基本信息的转换。
  • libpostproc:该模块用于进行后期处理,当我们使用 filter 的时候,需要打开这个模块,filter
    会用到这个模块的一些基础函数。

  比较老的 ffmpeg 还会编译出 avresamle 模块,也是用于对音频原始出具进行重采样的,但是已经被废弃,推荐使用 libswresample 替代。另外,库里还可以包含对 H.264/MPEG-4 AVC 视频编码的 X264 库,是最常用的有损视频编码器,支持 CBR、VBR 模式,可以在编码的过程中直接改变码率的设置,在直播的场景中非常适用!可以做码率自适应的功能。

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

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

相关文章

【Unity Android Platform:关于Android权限来源(安卓)如何查找】

Android权限来源 问题描述:当项目接入的插件逐渐变多,不仅仅是AndroidManifest会影响Android Permission的个数,甚至有些API也会影响最终的权限个数,例如下图所示: 当国内权限问题涉及到一些安全隐私问题时&#xff0…

构造函数与普通函数,显式原型与隐式原型,原型与原型链

原型与原型链1 学前先了解一些概念1.1 构造函数和普通函数的区别1.1.1 调用方式1.1.2 函数中this的指向不同1.1.3 写法不同1.2 问题明确2 原型与原型链2.1 原型2.2 显式原型与隐式原型2.3 原型链3 原型链环形结构1 学前先了解一些概念 1.1 构造函数和普通函数的区别 构造函数…

全流程基于最新导则下的生态环境影响评价技术方法及图件制作与案例

目录 专题一、生态环境影响评价框架及流程 专题二、基于遥感解译的土地利用现状图的编制 专题三、生物多样性测定及R语言分析 专题四、植被类型及植被覆盖度图的编制 专题五、生物量与净初级生产力测定:实测及模型 专题六、生态系统类型及服务价值评估 专题七…

MOT学习笔记 — 行人检测及行人跟踪数据集总结

1. 行人红外数据集总结 (1)OSU Thermal Pedestrian Database 下载链接:http://vcipl-okstate.org/pbvs/bench/Data/01/download.html (2)IRIS Thermal/Visible Face Database 下载链接:http://vcipl-o…

React 服务端渲染

React 服务器端渲染概念回顾什么是客户端渲染CSR(Client Side Rendering)服务器端只返回json数据,Data和Html的拼接在客户端进行(渲染)。什么是服务器端渲染SSR(Server Side Rendering)服务器端返回数据拼接过后的HTML,Data和Html…

Ubuntu20.04下安装vm17+win10/11

一、安装vmware17 1、官网下载 vmware官网:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html 2、安装依赖 sudo apt update sudo apt install build-essential linux-headers-generic gcc make3、权限和安装 到下载的目录下…

vector你得知道的知识

vector的基本使用和模拟实现 一、std::vector基本介绍 1.1 常用接口说明 std::vector是STL中的一个动态数组容器,它可以自动调整大小,支持在数组末尾快速添加和删除元素,还支持随机访问元素。 以下是std::vector常用的接口及其说明&#xf…

品牌软文怎么写?教你几招

软文是什么?软文的本质就是广告,当然不是明晃晃的推销,而是自然隐晦地植入产品信息,引导更多用户自愿下单。 品牌软文对于写手的经验、内容的质量要求都相对较高,否则写出来的软文无法达到预期的效果。品牌软文怎么写…

一个古老的html后台的模板代码

效果图下: css部分代码:/* CSS Document / body{font-family:“宋体”, Arial,Verdana, sans-serif, Helvetica;font-size:12px;margin:0;background:#f4f5eb;color:#000;} dl,ul,li{list-style:none;} a img{border:0;} a{color:#000;} a:link,a:visit…

[css]通过网站实例学习以最简单的方式构造三元素布局

文章目录二元素布局纵向布局横向布局三元素布局b站直播布局实例左右-下 布局左-上下 布局上下-右 布局方案一方案二后言二元素布局 在学习三元素布局之前,让我们先简单了解一下只有两个元素的布局吧 两个元素的相对关系非常简单,不是上下就是左右 纵向布…

Anaconda配置Python科学计算库SciPy的方法

本文介绍在Anaconda环境中,安装Python语言SciPy模块的方法。 SciPy是基于Python的科学计算库,用于解决科学、工程和技术计算中的各种问题。它建立在NumPy库的基础之上,提供了大量高效、易于使用的功能,包括统计分析、信号处理、优…

用一个例子告诉你 怎样在spark中创建累加器

目录 1.说明 1.1 什么是累加器 1.2 累加器的功能 2. 使用累加器 3. 累加器和reduce、fold算子的区别 1.说明 1.1 什么是累加器 累加器是Spark提供的一个共享变量(Shared Variables) 默认情况下,如果Executor节点上使用到了Driver端定义的变量(通过算子传…

Redis常用命令及数据类型参数

1. 针对于string SET key value / GET key SET k1 v1 GET k1 // v1String是二进制安全的,是可变长度的, 底层类似于ArrayList 是可扩容的,最大存储内存为 512MB。 2. 判断key中是否存在某个内容 EXISTS key SET k1 v1 EXISTS k1 // …

Noah-MP陆面过程模型建模方法与站点、区域模拟

陆表过程的主要研究内容以及陆面模型在生态水文研究中的地位和作用 熟悉模型的发展历程,常见模型及各自特点; Noah-MP模型的原理 Noah-MP模型所需的系统环境与编译环境的搭建方法您都了解吗?? linux系统操作环境您熟悉吗&…

Linux驱动中的fasync(异步通知)和fsync

一、fsync用来同步设备的写入操作,考虑把一块设局写入到硬盘的操作,如果使用write函数,函数返回后只能保证数据被写入到驱动程序或者内核管理的数据缓存中,而无法保证数据被真正写入到硬盘的存储块里。但是fync可以做到这一点&…

查找、排序、二叉树的算法,统统记录于此。

文章目录一、查找1. 无序表的顺序查找2. 折半查找3. 分块查找4. 二叉排序树BST5. 哈希表查找二、排序1. 不带哨兵的直接插入排序2. 带哨兵的直接插入排序3. 带哨兵、折半查找的直接插入排序4. 希尔排序5. 冒泡排序6. 快速排序7. 选择排序8. 堆排序9. 归并排序二叉树1. 递归先序…

八,iperf3源代码分析:状态机及状态转换过程--->运行正向TCP单向测试时的客户端代码

本文目录一、测试用命令二、iperf3客户端状态机中各个状态解析状态机迁移图运行正向TCP单向测试时的客户端的状态列表三、iperf3客户端状态机迁移分析A-初始化测试对象(NA--->初始化状态):B-建立控制连接,等待服务端PARAM_EXCHANGE的指令&…

西电机试数据结构核心算法与习题代码汇总(机考真题+核心算法)

文章目录前言一、链表问题1.1 反转链表1.1.1 题目1.1.2 代码1.2 多项式加减法1.2.1 题目1.2.2 代码二、队列和栈2.1 学生退学2.1.1 问题2.1.2 代码三、矩阵和串题目3.1 矩阵对角线求和3.1.1 问题3.1.2 代码四、排序问题4.1 多元素排序4.1.1 问题4.1.2 代码五、二叉树5.1 相同二…

synchronize优化偏向锁

偏向锁 轻量级锁在没有竞争时(只有自己一个线程),仍然会尝试CAS替换mark word; 会造成一定的性能的损耗; JDK6之中引入了偏向锁进行优化,第一次使用时线程ID注入到Mark word中,之后重入不再进…

旅游预约APP开发具有什么优势和功能

旅游活动目前正在作为广大用户休闲娱乐的一个首选内容,不仅是公司团建活动可以选择旅游,而且一些节假日也可以集结自己的亲朋好友来一次快乐有趣的旅游活动,随着当代人对于旅游的需求呈现上升的趋势,也让旅游预约APP开发开始流行并…