使用 FFmpeg 开发的那些事

news2024/11/26 19:23:43

勇敢就是,在你还没开始的时候就知道自己注定会输,但依然义无反顾地去做,并且不管发生什么都坚持到底。一个人很少能赢,但也总会有赢的时候。《杀死一只知更鸟》

欢迎大家加入广州城市社区:https://devpress.csdn.net/guangzhou
与大家一起共建~

一.FFmpeg 介绍

1.何为 FFmpeg?

对于每一个音视频领域的开发者来说,FFmpeg 是再熟悉不过了。作为一套强大的开源工具,FFmpeg 包含了开发完成的工具、封装好的函数库以及源代码供我们按需使用。

Fmpeg 也是当前最领先的多媒体框架之一,支持解码、编码、转码、视频采集、解密、流媒体、过滤和播放人类和机器创造的几乎所有东西,简单来说,它几乎包括了涵盖音视频绝大部分领域。它支持最晦涩的古老格式,直到最尖端的格式。无论它们是由某个标准委员会、社区还是公司设计的, 都具有高度的便携性。

2.FFmpeg 组成
构成 FFmpeg 的主要有三个部分。

第一个部分是一些小工具,如下:

ffmpeg:一个命令行工具,用于处理、转换和流式传输多媒体内容。

ffplay:一个简约的多媒体播放器。

ffprobe:检查多媒体内容的简单分析工具。

其它的还有一些小工具和插件。

第二部分主要是供开发者使用的 SDK,在官网翻译过来也叫库文档,为每个不同平台编译完成的库。如果说上述的小工具是成品,那么下面的这些库就类似于半成品,可根据自己的需求开发成自己想要的应用程序。下面将简述库:

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

libavutil:用于辅助便携式多媒体编程的实用程序库,包含随机数生成器、数据结构、数学函数等功能。

libavformat:提供了一个通用框架,用于对音频,视频和字幕流进行多路复用和多路分解(多路复用和多路分解)。

libavfilter:提供了一个通用的音频/视频过滤框架,其中包含多个过滤器,源和接收器。

libavdevice:提供了用于从许多常见的多媒体输入/输出设备获取和呈现的通用框架,并支持多种输入和输出设备,包括 Video4Linux2,VfW,DShow 和 ALSA。

libswscale:执行高度优化的图像缩放以及色彩空间和像素格式转换操作。

libswresample:执行高度优化的音频重采样,重新矩阵化和样本格式转换操作。

第三部分是整个工程的源代码,无论是上述的小工具和库文件,其本质都是由这些源代码编译而来。FFmpeg 的源代码是由 C 语言实现,所以在运行时速度是可观的。由于 FFmpeg 本身受欢迎的程度,所以也还存在许多第三方来增强它自身的功能。

二.FFmpeg 下载及其安装

1.0下载 FFmpeg,首先找到官网https://ffmpeg.org/:
在这里插入图片描述

1.1 然后点击 Download,进入如下页面,这里以 Windows 系统为例,首先点击视窗的图标,然后找到 Windows build from gyan.dev 点击进去。

在这里插入图片描述

1.2 进去之后往下翻找到 ffmpeg-git-essentials.7z,点击进行下载,下载之后傻瓜式安装即可。

图片

1.3 然后再往下找到 Mirror,点击圈出来的链接。

图片

1.4 点击 Mirror 的链接,进去之后点击下图中的链接,下载完成后找到下载的文件。

To:当然,如果你电脑自带解压软件,那么下图中第二个后缀名为 zip 的文件也是可以的。

图片

1.5 如果你是下载的第一个,那么右键文件找到 7-Zip,并用第一个 Open archive 打开文件。之后在你的 C 盘或其它盘中的 Program Files 文件夹内新建一个名为 FFmpeg 的文件,将用 7-Zip 解压的文件拖到 FFmpeg 文件夹内,找到 bin 目录下,并将该文件路径复制下来。如下图中路径为:C:\Program Files\FFmpeg\bin

在这里插入图片描述

之前安装成功的图~

1.6 接下来是最重要的环节便是配置环境变量。

找到我的电脑,右键找到属性,点击进去找到高级系统设置。

图片

1.7 点击高级系统设置后在弹出的页面右下角找到环境变量。

图片

1.8 进入环境变量设置后,首先我们找到用户变量,再双击下面的 Path,进入步骤 3 的页面,再新建将复制的文件路径粘贴到环境变量中,再一直点确定即可。
图片

1.9 最后一步,便是检查我们的 FFmpeg 是否安装成功。快捷键 win+R,输入 cmd 打开命令行窗口,在窗口中输入 ffmpeg -version 查看是否安装成功。安装成功的页面如下:

图片

三.FFmpeg 使用
1.ffmpeg
正如和软件名一样,工具 ffmpeg 是该软件的核心工具。它的主要功能便是完成各种音视频转换和视频转码的操作,比如将不熟悉的 avi 格式转换成 mp4 格式。

举个简单的例子,比如我们要进行视频文件的格式转换,我们需要运行的命令为:

ffmpeg -i +视频文件路径 +转换后的文件格式如:

ffmpeg -i D:\test.MOV D:\output.mp4

2.ffplay
ffplay 作为一个简单的播放器,它使用了 ffmpeg 库和 SDK 库开发而成,平常用作 ffmpeg API 的测试工具。

它的使用也挺简单的,需要运行的命令为:ffplay -i +文件路径如:

ffplay -i D:\output.mp4

当然,ffplay 也支持传入各种参数来控制播放行为,如:

-i input_file:输入文件名。
-x width -y height:控制播放窗口的宽高。
-t duration:控制播放的时长。
-window_title title:播放窗口的标题,默认为输入文件名。
-showmode mode:设置显示模式,0:显示视频;1:显示音频波形;2:显示音频频谱
...关于其它的参数可自行查看官方文档。

3.ffprobe
ffprobe 是一个音视频文件分析功能,其使用方法和 ffplay 类似。如:

ffprobe -i D:\output.mp4

分析完成后 ffprobe 会为我们显示音视频文件中包含的每个码流的信息,如:编码格式,像素分辨率,码率等等。

To:作为音视频领域的老大哥,FFmpeg 可以在 Linux、Mac OS X、Microsoft Windows 等系统下构建环境、机器架构和配置下编译、运行,并通过测试基础设施 FATE。

关于 FFmpeg 的介绍就暂时到这里啦,想要查看更多的内容,还请关注后续内容哦。

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

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

相关文章

java面经

String, StringBuffer, StringBuilder区别 第一点是可变性。String不可变,String Buffer和StringBuider可变。这是因为String被final修饰,每次操作都生成新的对象。StringBuffer和StringBuilder的父类AbstractStringBuilder没有被final修饰。 第二点是…

MATLAB 之 非线性方程数值求解、最优化问题求解和常微分方程初值问题的数值求解

这里写目录标题 一、非线性方程数值求解1. 单变量非线性方程求解2. 非线性方程组的求解 二、最优化问题求解1. 无约束最优化问题求解2. 有约束最优化问题求解3. 线性规划问题求解 三、常微分方程初值问题的数值求解1. 龙格—库塔法简介2. 龙格—库塔法的实现 一、非线性方程数值…

Day975.如何使用JWT结构化令牌 -OAuth 2.0

如何使用JWT结构化令牌 Hi,我是阿昌,今天学习记录的是关于如何使用JWT结构化令牌的内容。 OAuth 2.0 规范并没有约束访问令牌内容的生成规则,只要符合唯一性、不连续性、不可猜性就够了。这就意味着,可以灵活选择令牌的形式&…

将递归函数转成非递归函数的通用方法

看到过一道非常不错的面试题:不支持递归的程序语言如何实现递归程序? 之所以说这道题好,是因为: 首先,它不是纯粹考概念和死记硬背,求职者在回答问题之前需要进行一定的思考; 其次&#xff0c…

vim粘贴出现多余的#

vim粘贴yaml格式时,出现多余的#,格式错误 解决:设置paste :set paste 然后再粘贴即可

final不可变性

一、什么是不可变性(Immutable) 如果对象在被创建后,状态就不能被修改,那么它就是不可变的这个对象不能被修改指: 对象指向(引用)不可变字段不可变成员变量不可变 案列演示: person对象,age和…

我的C++学习笔记

声明: 写本篇博客的目的是为了整理自己在找工作时学习的C相关知识点,博客整体内容会分为两种风格,第一章基础部分是以常见C面试问题解答的形式呈现;其余部分是知识点层层递进的方式展现,比较系统。其中,在第…

Avalon 学习系列(三)—— 数据和指令同步

Avalon 有很多个指令,通过这些指令可以对 DOM 进行一些事件操作、或者样式修改。 ms-duplex Avalon 实现数据与视图的同步的方式是用 ms-duplex 将元素跟数据绑定在一起,如果有其中一个的值改变另一个值也将改变。 ms-duplex 是 avalon 的双向绑定属性…

OpenCV(C++)创建图片绘制图形(矩形、圆、文字、线段等等)

一、OpenCV介绍 OpenCV 是基于开源许可证的跨平台计算机视觉库,提供了一组丰富、广泛的图像处理和计算机视觉算法。OpenCV 支持多种编程语言,包括 C++、Python、Java 等,可以运行在 Linux、Windows、Mac OS 等平台上。 OpenCV 能够在图像上绘制各种几何形状、文本和曲线,…

学习ESP32笔记

学习ESP32笔记 1.platform IO插件的下载(提前安装好python,不然在中间的一部分会一直报错) VS Code下载platform IO时,开加速器(VPN),并且关闭防火墙 这一步比较慢,大概等十来分钟…

Kendo UI for jQuery---02.开始---01.使用 Kendo UI for jQuery 的第一步

使用 Kendo UI for jQuery 的第一步 欢迎来到 Kendo UI for jQuery 入门的第一步指南! 本指南演示如何通过添加所需资源和初始化 Kendo UI 网格来开始使用套件。 该过程借鉴了以下里程碑: 1.下载控件 2.添加所需的 JavaScript 和 CSS 文件 3.将网格绑…

如何使用postman做接口测试

常用的接口测试工具主要有以下几种: Postman: 简单方便的接口调试工具,便于分享和协作。具有接口调试,接口集管理,环境配置,参数化,断言,批量执行,录制接口,Mock Server…

【每日挠头算法题(6)】二叉树的所有路径|神奇字符串

欢迎~ 一、二叉树的所有路径思路:深度优先搜索具体代码如下: 二、神奇字符串思路:模拟双指针具体代码如下: 总结 一、二叉树的所有路径 点我直达~ 思路:深度优先搜索 使用深度优先搜索:即二叉树的前序遍历…

设计模式(十二):结构型之享元模式

设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式…

编码生成矩阵与检错监督矩阵

本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。markdown版本已归档至【Github仓库:https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 线性分组码基本概念…

Elasticsearch快速入门及使用

Elasticsearch快速入门及使用 一.Elasticsearch是什么二.基本概念1.index (索引)2. type (类型)3.Document (文档) 三.为什么Elasticsearch可以从海量数据里快速检索出数据四.Elasticsearch安装1.解压2.运行3.显示以下内容就是启动成功14.Kibana可视化软件安装 五.入门(基本的操…

如何编写有效的接口测试?

在所有的开发测试中,接口测试是必不可少的一项。有效且覆盖完整的接口测试,不仅能保障新功能的开发质量,还能让开发在修改功能逻辑的时候有回归的能力,同时也是能优雅地进行重构的前提。编写接口测试要遵守哪些原则?测…

unity Ignis - Interactive Fire(完美模拟:森林火灾、草原火灾、建筑火灾)

Ignis 可以把任何物体、植被或带皮带骨的网状物转换为可燃物体,它就会自动着火。然后,火焰可以蔓延,点燃其他物体,被粒子或光线熄灭,或者自然烧尽。也可以被粒子点燃。还会收到风力影响WindZone。 WindZone文档&#…

轻量级性能测试工具 wrk 如何使用?

项目设计之初或者是项目快要结束的时候,大佬就会问我们,这个服务性能测试的结果是什么,QPS 可以达到多少,RPS 又能达到多少?接口性能可以满足未来生产环境的实际情况吗?有没有自己测试过自己接口的吞吐量&a…

磁盘详解(一文搞懂磁盘)

目录 一.磁盘的结构 二.磁盘的分类 2.1按照磁头是否可以移动分类 2.2按照盘片是否可以更换分类 三.磁盘的读写过程 四.磁盘的调度 4.1FCFS先来先服务算法 4.2SSTF最短寻找时间优先 4.3 SACN扫描算法 4.4C-SACN循环扫描算法 4.5 SPTF(最短定位时间优先&…