FFmpeg的基本结构
FFmpeg框架可以简单分为两层,上层是以ffmpeg、ffplay、ffprobe为代表的命令行工具;其底层支撑是一些基础库,包含AVFormat、AVCodec、AVFilter、AVDevices、AVUtils等模块库。

常用函数如下:
1. AVFormat
封装/解封装模块
avformat_open_input() | 打开输入媒体文件或流,读取文件头并初始化相关信息。 |
avformat_find_stream_info() | 查找媒体流的信息,如音视频流的参数、编解码器等。 |
avformat_close_input() | 关闭输入文件并释放相关资源。 |
avformat_alloc_output_context2() | 为输出文件分配格式上下文。 |
avio_open() | 打开一个输出流或文件进行写入操作。 |
avformat_write_header() | 向输出文件写入头部信息(如流信息、编码设置等)。 |
av_write_frame() | 向输出文件写入音频或视频数据帧。 |
av_write_trailer() | 向输出文件写入尾部数据(如流结束标记)。 |
avformat_new_stream() | 在 AVFormatContext 中创建一个新的音视频流。 |
avformat_get_stream_info() | 获取流信息,通常在读取文件后调用,提供音视频流的详细数据。 |
av_read_frame() | 从输入文件中读取一个数据包(音频或视频帧)。 |
av_seek_frame() | 在输入媒体文件中定位到特定的时间点或帧。 |
avformat_seek_file() | 在文件中根据时间戳进行精确查找。 |
av_strerror() | 获取错误码的详细描述信息。 |
2. AVCodec
编/解码模块
avcodec_register_all() | 注册所有解码器 |
avcodec_find_decoder() | 查找解码器 |
avcodec_find_encoder() | 查找编码器 |
avcodec_alloc_context3() | 分配解码器上下文 |
avcodec_open2() | 打开解码器 |
avcodec_close() | 关闭解码器 |
avcodec_receive_frame() | 接收解码后的帧 |
avcodec_send_packet() | 发送编码数据包 |
avcodec_encode_video2() | 编码视频帧 |
avcodec_receive_packet() | 获取编码数据包 |
3. AVFilter
滤镜模块
avfilter_register_all() | 注册所有滤镜 |
avfilter_graph_alloc() | 分配滤镜图 |
avfilter_graph_free() | 释放滤镜图 |
avfilter_graph_config() | 配置滤镜图 |
avfilter_graph_create_filter() | 创建滤镜 |
avfilter_link() | 连接滤镜 |
avfilter_graph_parse() | 解析滤镜链描述 |
avfilter_graph_parse_ptr() | 解析滤镜链指针 |
avfilter_init_dict() | 初始化滤镜字典 |
av_buffersrc_add_frame() | 向源滤镜添加帧 |
4. AVDevice
设备模块
avdevice_register_all() | 注册所有设备 |
avdevice_capabilities_create() | 创建设备能力列表 |
avdevice_find_input_format() | 查找输入设备格式 |
avdevice_find_output_format() | 查找输出设备格式 |
avdevice_list_devices() | 列出设备信息 |
avdevice_input_create() | 创建输入设备 |
avdevice_output_create() | 创建输出设备 |
avdevice_set_input_format() | 设置输入设备格式 |
avdevice_set_output_format() | 设置输出设备格式 |
5. swscale
图像转换模块
sws_getContext() | 创建转换上下文 |
sws_scale() | 执行图像转换 |
sws_freeContext() | 释放转换上下文 |
sws_isSupportedInput() | 检查输入格式支持 |
sws_isSupportedOutput() | 检查输出格式支持 |
sws_setColorspaceDetails() | 设置色彩空间转换 |
6. swresample
音频转换模块
swr_alloc() | 分配重采样上下文 |
swr_alloc_set_opts() | 设置重采样选项 |
swr_init() | 初始化重采样上下文 |
swr_convert() | 执行音频重采样 |
swr_free() | 释放重采样上下文 |
swr_get_out_samples() | 获取输出样本数 |
swr_get_delay() | 获取延迟值 |
7. postproc
视频后处理模块
pp_get_context() | 创建后处理上下文 |
pp_free_context() | 释放后处理上下文 |
pp_postprocess() | 执行后处理操作 |
pp_set_parameter() | 设置后处理参数 |
pp_get_parameter() | 获取后处理参数 |
pp_init() | 初始化后处理 |
pp_close() | 关闭后处理 |
pp_apply_filter() | 应用后处理滤镜 |
相关文章:
FFmpeg的基本结构
FFmpeg框架可以简单分为两层,上层是以ffmpeg、ffplay、ffprobe为代表的命令行工具;其底层支撑是一些基础库,包含AVFormat、AVCodec、AVFilter、AVDevices、AVUtils等模块库。 常用函数如下: 1. AVFormat 封装/解封装模块 avf…...
react 受控组件和非受控组件
在 React 中,受控组件和非受控组件是两种处理表单元素(如输入框、选择框等)值的方式。 1. 受控组件 受控组件是指 React 组件的表单元素的值是由 React 组件的 state 来管理的。换句话说,React 会全程控制表单元素的值ÿ…...
C语言模块化概述
一、函数名的意义 1.c语言是一门面向过程的语言:所谓的过程就是动词,动作。 功能块动词1动词2……动词 2.功能块:就是一堆动词(动作)的组合,动作通过函数来实现。 3.函数的功能:承上启下 承…...
WPF 中的视觉层和逻辑层有什么区别?
在 WPF(Windows Presentation Foundation)中,视觉层和逻辑层是两个不同的概念,它们分别涉及到界面的展示和应用的行为。要理解这两个层次的区别,我们需要从 WPF 的设计背景、架构以及它们之间的相互关系来全面分析。 …...
Kafka简单实践
使用 Apache Kafka 和 Swoole 的 PHP 实践案例 一、引言 Apache Kafka 是一个开源的分布式流处理平台,能够处理大量的实时数据流。由于其高吞吐量、可扩展性和持久性,Kafka 成为构建微服务架构和大数据处理的重要工具。Swoole 是一个高性能的异步网络通…...
JS
文章目录 项目地址一、JS1.1 if语句1.2 for循环1.2 三元表达式1.3 switch1.4 数组的push方法1.5 fuction1.5.1 arguments1.6 匿名函数1.7 预解析1.8 js对象1.8.1创建一个类1.8.2 遍历对象1.9 js的内置对象1.9.1 随机整数二、DOM2.1 获取元素2.2 事件基础2.2.1 事件三要素2.2.2 …...
【原创】java+ssm+mysql商品库存管理系统(进销存)设计与实现
个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…...
three.js 杂记
欧拉角旋转变换 x,y,z 弧度单位 THREE.MathUtils.DEG2RAD 度数转弧度 new THREE.Euler( - 90 * THREE.MathUtils.DEG2RAD, 0, 0 ) radius:半径 setFromSphericalCoords ( radius : Float, phi : Float, theta : Float ) : this 从球坐标中的radius、phi和theta设置该向量…...
基于Hadoop、hive的数仓搭建实践
文章目录 架构图Hadoop搭建Hive 搭建MySQL搭建官网文档下载配置配置hive环境变量配置日志文件配置hive-site 复制mysql 驱动包删除日志包初始化元数据启动metastore服务使用hive CLI启动hiveServer2访问hiveserver2客户端连接beeline shell连接 Dbeaver连接经验 基于HDFS Hive…...
新的恶意软件活动通过游戏应用程序瞄准 Windows 用户
一种新的恶意软件 Winos4.0 被积极用于网络攻击活动。FortiGuard实验室发现,这种先进的恶意框架是从臭名昭著的 Gh0strat 演变而来的,配备了模块化组件,可在受感染的设备上进行一系列恶意活动。 这些攻击已在游戏相关应用程序中发现…...
【Hutool系列】反射工具-ReflectUtil
前言 反射是 Java 中一种强大的机制,可以在运行时动态地获取类的信息并操作类的属性和方法。在 Java 中,通过反射可以获取和设置类的字段、调用类的方法、创建类的实例等。Java的反射机制,可以让语言变得更加灵活,对对象的操作也更…...
【操作系统专业课】第二次作业
第1题(进程同步与互斥) 使用二值信号量实现 n 个进程之间的互斥。 1. 定义一个二值信号量 mutex= 1。 二值信号量:二值信号量只有两种取值,0 (资源已被占用)和 1(资源可用)。 2. 进程进入临界区前的操作:每个进程在进入临界区之前,都需要执行 P(mutex) 操作。 P 操作…...
Scala的迭代器
1.对比foreach 它的优点在于: (1) 内存效率高。迭代器采用延迟计算的方式,它不会将整个集合加载到内存中,而是在每次调用next方法时才计算并返回下一个元素。 (2) 统一的遍历方法。迭代器为不同类型的集合(如列表、集合、映射等…...
(RK3566驱动开发 - 1).pinctrl和gpio子系统
一.设备树 pinctrl部分可以参考 rockchip 官方的绑定文档 :kernel/Documentation/devicetree/bindings/pinctrl PIN_BANK:引脚所属的组 - 本次例程使用的是 GPIO3_A1 这个引脚,所以所属的组为 3; PIN_BANK_IDX:引脚的…...
css三角制作(二十课)
代码: <style>/* 边框原理 */.box1 {width: 0;height: 0;border-top: 100px solid pink;border-bottom: 100px solid blue;border-left: 100px solid yellow;border-right: 100px solid greenyellow;}/* 三角制作 */.box2 {width: 0;height: 0;border: 100px …...
C++_priority_queue(优先级队列)
✨✨ 欢迎大家来到小伞的大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 小伞的主页:xiaosan_blog 1. priority_queue的介绍和使用 priority_queue文档介绍 优先级队列的实现的关键…...
微信小程序——01开发前的准备和开发工具
文章目录 一、开发前的准备1注册小程序账号2安装开发者工具 二、开发者工具的使用1创建项目2 工具的使用3目录结构4各个页面之间的关系5 权限管理6提交审核和发布 一、开发前的准备 开发前需要进行以下准备: 1 注册小程序账号2激活邮箱3 信息登记4 登录小程序管理后…...
MySQL 的主从复制数据同步
一、什么是 MySQL 的主从复制 MySQL 的主从复制(Master-Slave Replication)是一种将数据从一个主数据库服务器(主库)复制到一个或多个从数据库服务器(从库)的技术。主库负责所有的数据写操作,从…...
python——面向对象
一、面向对象编程 1.1 面向过程与面向对象 面向过程和面向对象都是一种编程方式,只不过再设计上有区别。 1.1.1 面向过程pop: 举例:孩子上学 1. 妈妈起床 2. 妈妈洗漱 3. 妈妈做饭 4. 妈妈把孩子叫起来 5. 孩子起床 6. 孩子洗漱 7. 孩子吃…...
Microsoft 365 Exchange如何设置可信发件IP白名单
1、 进入到 Microsoft 365 admin center 管理中心 ,点击 管理中心 下的 安全 在弹出的新页面中,依次点击 策略和规则 – 威胁策略 – 反垃圾邮件 再单击 连接筛选器策略(默认) – 编辑连接筛选器策略 2、在 IP 允许列表 中添加可信邮件 IP 段࿰…...
深度解析TranslucentTB运行时依赖问题的创新解决方案
深度解析TranslucentTB运行时依赖问题的创新解决方案 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB TranslucentTB是一款广受欢迎的Wind…...
手把手教你用树莓派4B搭建个人服务器(保姆级图文教程,含SSH与远程桌面配置)
树莓派4B打造高性能个人服务器的终极指南 在当今数字化时代,拥有一个24小时在线的个人服务器不再是企业或技术巨头的专利。树莓派4B以其惊人的性价比和低功耗特性,正在重新定义个人服务器的可能性。想象一下,你的书架上安静运行着一台耗电仅5…...
【2026年华为暑期实习(AI)-5月20日-第二题- LLM 多源语料分级清洗预算分配】(题目+思路+JavaC++Python解析+在线测试)
题目内容 某 L L M LLM LLM 预训练团队从 N N N 个数据源收集语料,每个数据源 i i...
5G手机省电的秘密:一文搞懂NR C-DRX中的Inactivity Timer(附工作流程图解)
5G手机续航优化的核心技术:深入解析C-DRX中的Inactivity Timer机制 当你在咖啡厅刷社交媒体时,是否注意到手机屏幕熄灭后仍能即时收到消息?这种"随叫随到"的体验背后,是5G NR中一项精妙的省电技术——C-DRX(…...
Redis详解以应用场景
一、Redis简介 1.1 什么是Redis Redis Remote Dictionary Service(远程字典服务) 传统数据库:数据存储在磁盘,访问需要磁盘IO└── 速度慢,但数据持久化Redis:所有数据存储在内存└── 速度极快…...
SAP MIRO发票校验时,如何用增强LMR1M001自动检查供应商号?
SAP MIRO发票校验中供应商号自动检查的增强实战指南 在SAP系统中,发票校验(MIRO)是财务流程中的关键环节,而供应商号的准确性直接关系到后续的付款和账务处理。想象一下这样的场景:采购部门创建了一个采购订单,但财务人员在录入发…...
Angular-dragdrop与Bootstrap集成:构建响应式拖放界面的完美方案
Angular-dragdrop与Bootstrap集成:构建响应式拖放界面的完美方案 【免费下载链接】angular-dragdrop Implementing jQueryUI Drag and Drop functionality in AngularJS (with Animation) is easier than ever 项目地址: https://gitcode.com/gh_mirrors/an/angul…...
美股api的WebSocket偶尔断连,心跳间隔设多少秒最合适?
做美股相关的数据服务时,我碰到一个小烦恼:WebSocket连接偶尔断开。尤其是实时tick数据,程序明明还在跑,提示“断开”,有时候还挺突然的。我自己测试了不少方法,发现心跳设置是最容易影响稳定性的一个点。 …...
工业级AI计算机如何支撑机场eGate系统:BOXER-6646-ADP硬件与部署解析
1. 项目概述:当“刷脸通关”成为现实,背后是谁在支撑?每次在机场国际出发或到达大厅,看到那些排着长队等待人工查验护照、盖章的队伍,你是不是也幻想过能像科幻电影里那样,走到一个闸机前,刷一下…...
TPU核心引擎的‘血管网络’:用Python建模与可视化理解脉动阵列数据流
TPU核心引擎的‘血管网络’:用Python建模与可视化理解脉动阵列数据流 在AI加速器的世界里,TPU(张量处理单元)的脉动阵列就像一台精密的机械钟表,每个齿轮的咬合都遵循着严格的时序规律。但与硬件工程师通过RTL语言&qu…...
