FFmpeg基础简介
背景介绍
FFmpeg 是一款音视频编解码工具,同时也是一组音视频编解码开发套件,为音视频开发者提供了丰富的音视频处理的调用接口。
FFmpeg中的“FF”指的是“Fast Forward”,“mpeg”则是人们通常理解的Moving Picture Experts Group(动态图像专家组)。
FFmpeg的下载
作为一套开源音视频编解码套件,FFmepg可以从网上自由下载,官方网站:http://ffmpeg.org/download.html
源码官方下载地址
https://git.ffmpeg.org/ffmpeg.git 官方主git仓库
https://git.ffmpeg.org/ffmpeg-web 官方主网址仓库
https://git.ffmpeg.org/fateserver fate server软件仓库
镜像地址(下面三个都是github上的镜像网址)
https://github.com/FFmpeg/FFmpeg
https://github.com/FFmpeg/web
https://github.com/FFmpeg/fateserver
源代码的下载,可以通过github或者官网来下载。
(base) $ git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
Cloning into 'ffmpeg'...
remote: Enumerating objects: 25466, done.
remote: Counting objects: 100% (25466/25466), done.
remote: Compressing objects: 100% (10428/10428), done.
remote: Total 686019 (delta 19479), reused 19934 (delta 14986)
Receiving objects: 100% (686019/686019), 170.00 MiB | 4.23 MiB/s, done.
Resolving deltas: 100% (553363/553363), done.
Updating files: 100% (8037/8037), done.
到此,FFmpeg源代码库就算下载下来了。下面,我们选择一个稳定版本进行学习和研究,选择3.3的版本。
(base) $ cd ffmpeg/
(base) $ git branch -a
* masterremotes/origin/HEAD -> origin/master... ...remotes/origin/release/3.1remotes/origin/release/3.2remotes/origin/release/3.3remotes/origin/release/4.1remotes/origin/release/4.2remotes/origin/release/4.3
(base) $ git checkout -b release/3.3 remotes/origin/release/3.3
Updating files: 100% (4700/4700), done.
Branch 'release/3.3' set up to track remote branch 'release/3.3' from 'origin'.
Switched to a new branch 'release/3.3'
FFmpeg的基础组成
FFmpeg的基本组成包含:AVFormat、AVCodec、AVFilter、AVDevice、swscale、swresample等
下图是FFmpeg文件截图
(1)AVFormat的实现都在libavformat。其实现了目前多媒体领域的绝大部分封装格式,包括封装和解封装,如flv、mp4、ts等文件格式,rtmp、rtsp、hls等网络封装格式。
(2)AVCodec的实现都在libavcodec。其实现了目前多媒体领域绝大部分常用的编解码格式,包含编码和解码。AVCodec支持的编码格式有MPEG4、H264、H265、AAC、mp3等多种编码格式,它是FFmpeg的编解码模块。
(3)AVFilter的实现都在libavfilter。其提供了一个通用的音频、视频、字幕等滤镜处理框架,它可以有多个输入和多个输出,非常灵活,能够满足音视频开发者基础的滤镜需求。
(4)AVDevice的实现都在libavdevice。通过其方法可以读取电脑(或其他设备上)的多媒体设备的数据,或者输出到指定的多媒体设备上。
(5)swscale的实现都在libswscale。这一个视频图像转换计算模块,它可以帮助把图像缩放和格式转换,比如yuv转rgb、1080P转720P等
(6)swresample的实现都在libswresample。这是音频转换计算模块,它可以进行音频的重采样、声道变换、音频存储布局转换,比如48KHZ采用率转为44.1KHZ采样率、双声道数据转为单声道等。
FFmpeg的编译和安装
FFmpeg在官方网站上提供了已编译好的可执行文件。因为FFmpeg是开源的,所以使用者可根据自己的需要修改、增加或者减少相关功能,并进行手动编译。
FFmpeg是通过configure命令选择打开或者关闭一些功能,然后通过configure创建所需要编译功能的Makefile文件,configure成功后执行make,最后执行make install完成FFmpeg的安装。
通过configure命令查看FFmpeg所支持的音视频编码格式、文件封装格式与流媒体传输协议等。
(base) $ ./configure --help
- 通过Help options可以知道FFmpeg支持的编解码格式、封装格式、封装协议有哪些,比如想知道支持的解码器有哪些,可以使用命令
./configure --list-decoders
- 通过Individual component options,可以知道怎样打开或者关闭某个组建的编译
- 通过External library support,可以知道打开某个库,还需要依赖哪些第三方库
MAC编译
下面,我们在Mac电脑上编译一个FFmpeg。要求是:支持MP4、FLV、M3U8的封装和解封装,支持H264、H265格式的编码和解码,支持aac、mp3编码和解码,支持RTMP、HLS、HTTP-FLV的传输协议,支持基本filter的能力,支持图像格式的转换和音频重采样,编译ffmpeg、ffplay、ffprobe。
- brew install yasm
ffmpeg的编译过程依赖yasm - brew install sdl2
ffplay依赖于sdl2 - brew install fdk-aac
aac编解码库 - brew install x264
h264编码库 - brew install x265
h265编码库
configure
然后执行源码目录下的configure脚本,设置一些编译参数,做一些编译前的准备工作
./configure --prefix=/usr/local/ffmpeg3.3 --disable-asm --enable-static --disable-shared --enable-gpl --enable-nonfree --enable-ffplay --enable-sdl2 --enable-libfdk-aac --enable-libx264 --enable-libx265 --enable-decoder=aac --enable-decoder=h264 --enable-decoder=hevc --enable-muxers --enable-demuxers --enable-encoder=aac --enable-avcodec --enable-avformat --enable-avfilter --enable-network --enable-protocols --enable-protocol=rtmp --enable-protocol=hls --enable-protocol=http --enable-protocol=https --enable-protocol=ffrtmphttp
通过配置后的面板信息可知:编码、封装、协议、滤镜都满足了我们的需求。
编译
make -j8
安装
将编译好的库安装到指定的位置:/usr/local/ffmpeg3.3
make install
安装完毕后,/usr/local/ffmpeg3.3的目录结构如下所示
FFmpeg基础简介相关推荐
- VideoTool之FFmpeg:FFmpeg的简介、安装、使用方法之详细攻略
VideoTool之FFmpeg:FFmpeg的简介.安装.使用方法之详细攻略 目录 FFmpeg的简介 FFmpeg的安装 1.Windows下安装 第一步,下载软件 第二步,解压文件 第三步,将文 ...
- FFmpeg 基础知识
第一.FFmpeg 简介和基础知识 1.1 FFmpeg 简介 FFmpeg的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward",FF ...
- 网络分析概述之网络基础简介
网络分析概述之网络基础简介 本文转载自小白名的生统笔记,原文链接:https://mp.weixin.qq.com/s/Bp-u663WUhFxPfeP7pBh0w 从本节开始介绍网络分析.本篇暂且对 ...
- Linux下Web服务器应用之基础简介
Linux下Web服务器应用之基础简介 一.web服务器基本知识: WWW 是 World Wide Web 的缩写 URL:<协定>://<主机地址或主机名>[:port]/ ...
- JavaScript学习笔记01【基础——简介、基础语法、运算符、特殊语法、流程控制语句】
w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...
- jQuery基础简介
jQuery基础简介 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 开发工具与关键技术:Visual Studio 2015 jQuery ...
- Python基础—简介、变量、运算符
文章目录 一.基础简介 1.Python简介 2.执行过程 二.变量 三.数据类型 1.数字 2.字符串 3.布尔bool 4.空值对象None 5.列表 6.字典 7.数据类型转换 重点 四.格式化 ...
- Maven基础简介+安装说明
Maven基础简介 Maven简介 Maven是什么 下载与安装 小节 Maven简介 问题: 传统项目管理状态分析 jar包不统一,jar包不兼容 工程升级维护过程操作繁琐 Maven是什么 Mav ...
- 使用FFMPEG——4.2.2版本实现提取视频编码解码文件,ffmpeg基础学习。
FFMPEG基础学习 视频解码,并且输出到文件. 我通过雷霄骅的博客学习FFMPEG,在学习过程中发现"雷神"的代码由于版本的问题,很多代码已经无法在FFMPEG--4.2.2版本 ...
最新文章
- linux netstat端口占用,Linux系统使用 netstat 查看和检查系统端口占用情况
- PyTorch中的数据输入和预处理
- mysql数据库入门教程(9):数据的常见约束
- jquery.cookie 使用方法
- 如何在MyBatis中优雅的使用枚举
- Spring Boot系列(一) Spring Boot介绍和基础POM文件
- Golang实践录:调用C++函数
- python new_python __new__中单例的作用
- python基础语法加爬虫精进_从Python安装到语法基础,这才是初学者都能懂的爬虫教程...
- (2)I/O流对象-----FilterInputStream与FilterOutputStream
- linux 安装vlc源码包,linux Centons 6.5 下yum安装vlc
- 无人驾驶全局路径规划之A星算法
- UI设计流程是什么?来看看UI设计完整的设计流程吧
- java读文件在页面输出_Java读取html页面以文件流方式输出显示在页面
- python 图像扭曲 opencv仿射变换 cv2.getAffineTransform() cv2.warpAffine()应用实例
- 三原色图(最小生成树 kruskal)
- uni-app 分享给好友,生成小程序二维码海报
- 亚马逊中国公布2020年第一季度付费电子书畅销榜名单
- 百果园港交所上市:市值近百亿港元 80%营收来自加盟店
- 浅析安全启动(Secure Boot) —写得很好