FFMPEG学习【libavutil】:视频相关

FFmpeg常见命令行(五):FFmpeg滤镜使用 本文是音视频系列blog的其中一个, 对应的要学习的内容是:如何使用FFmpeg命令行进行滤镜的处理。 阅读详情

一、显示变换矩阵函数

显示变换矩阵指定应适用于视频帧以进行正确预处理的仿射变换。

它与存储在ISO / IEC 14496-12容器格式中的矩阵兼容。

数据是一个3x3矩阵,表示为9元素数组:

 			       | a b u |
(a, b, u, c, d, v, x, y, w) -> | c d v |
                               | x y w |
所有数字以原始字节顺序存储,除了u,v和w之外的16.16个定点值,存储为2.30个定点值。

变换将源(预转换)帧中的点(p,q)映射到目标(后变换)帧中的点(p',q'),如下所示:

            | a b u |
(p, q, 1) . | c d v | = z * (p', q', 1)
            | x y w |
转换也可以更明确地写在组件中,如下所示:

p' = (a * p + c * q + x) / z;
q' = (b * p + d * q + y) / z;
z  =  u * p + v * q + w


一)、函数

double  av_display_rotation_get (const int32_t matrix[9])
提取转换矩阵的旋转分量。

参数:matrix:转换矩阵

返回:变形使逆时针旋转框架的角度(以度为单位)。 如果矩阵是单数,角度将在[-180.0,180.0]或NaN的范围内。

注意:浮点数本质上是不准确的,所以建议在使用前将返回值舍入到最接近的整数。


void  av_display_rotation_set (int32_t matrix[9], double angle)
初始化描述纯逆时针旋转指定角度(以度为单位)的变换矩阵。

参数:matrix:分配的变换矩阵(将被该函数完全覆盖)

   angle:旋转角度以度为单位。


void  av_display_matrix_flip (int32_t matrix[9], int hflip, int vflip)
水平和/或垂直地翻转输入矩阵。

参数:matrix:一个分配的变换矩阵

   hflip:矩阵是否应水平翻转

   vflip:矩阵是否应垂直翻转



二、球形视频映射

一个球面视频文件包含需要映射到球体上的曲面。

注意:结构必须分配av_spherical_alloc(),其大小不是公共ABI的一部分。

根据帧的转换方式,在映射和显示视频之前,需要应用不同的失真变换或表面重构功能。


一)、数据结构

此结构描述如何处理球形视频,概述有关投影,初始布局和任何其他视图修改器的信息。


struct   AVSphericalMapping{
enum AVSphericalProjection projection; //投影类型。
uint32_t padding; //从每个立方体面的边缘进行焊接的像素数。

初始方位
在视频帧映射到场后,场中描述了应用于球体的附加旋转。
球体围绕观察者转动,观察者保持静止。 变换的顺序总是偏航,其次是俯仰,最后是滚动。
坐标系与OpenGL中定义的坐标系匹配,其中向量向量(z)离开屏幕,并且等效于R = r_y(yaw)* r_x(pitch)* r_z(roll)的旋转矩阵。
正偏航将观看者前面的球体部分向右旋转。 正音调将观看者前方的球体部分向上旋转。 正面滚动将观看者前面的球体部分倾斜到观看者的右侧。
这些值被导出为16.16个固定点。
见这个等角投影为例:
              Yaw
    -180           0           180
  90 +-------------+-------------+  180
     |             |             |                  up
P    |             |             |                 y|    forward
i    |             ^             |                  |   /z
t  0 +-------------X-------------+    0 Roll        |  /
c    |             |             |                  | /
h    |             |             |                 0|/_____right
     |             |             |                        x
 -90 +-------------+-------------+ -180
X - the default camera center
^ - the default up vector

int32_t yaw; //  向上旋转[-180,180]。
int32_t pitch; //绕右矢量旋转[-90,90]。
int32_t roll; //绕前向矢量旋转[-180,180]。

边界矩形
这些字段指示当前图块的位置,以及相对于原始曲面映射的位置。 它们导出为0.32个固定点,并可以通过av_spherical_bounds()转换为经典像素值。
+----------------+----------+
|                |bound_top |
|            +--------+     |
| bound_left |tile    |     |
+<---------->|        |<--->+bound_right
|            +--------+     |
|                |          |
|    bound_bottom|          |
+----------------+----------+

如果需要,可以通过将当前流或帧大小添加到相关边界来导出原始视频表面尺寸,如以下示例所示:
original_width  = tile->width  + bound_left + bound_right;
original_height = tile->height + bound_top  + bound_bottom;
注意:这些值仅适用于平铺等角投影类型(AV_SPHERICAL_EQUIRECTANGULAR_TILE),并且在所有其他情况下都应该被忽略。

uint32_t bound_left; //  距离左边缘的距离。
uint32_t bound_top; // 距离上边缘的距离。
uint32_t bound_right; //距离右边缘的距离。
uint32_t bound_bottom; // 与底边距离。
}


二)、枚举

enum   AVSphericalProjection { AV_SPHERICAL_EQUIRECTANGULAR, AV_SPHERICAL_CUBEMAP, AV_SPHERICAL_EQUIRECTANGULAR_TILE }


三)、函数

AVSphericalMapping *  av_spherical_alloc (size_t *size)
分配AVSphericalVideo结构,并将其字段初始化为默认值。

返回:新分配的结构或NULL失败


void  av_spherical_tile_bounds (const AVSphericalMapping *map, size_t width, size_t height, size_t *left, size_t *top, size_t *right, size_t *bottom)
将AVSphericalVideo的边界字段从0.32固定点转换为像素。

参数:map:从AVSphericalVideo映射读取绑定值。

   width:当前帧或流的宽度。

   height:当前帧或流的高度。

   left:从左边缘的像素。

   top:上边缘的像素。

   right:像素从右边缘。

   bottom:像素从底边。


const char *  av_spherical_projection_name (enum AVSphericalProjection projection)
提供给定的AVSphericalProjection的可读名称。

参数:projection:输入AVSphericalProjection。

返回:AVSphericalProjection的名称,或“未知”。


int  av_spherical_from_name (const char *name)
获取AVSphericalProjection形式的人类可读的名称。

参数:name:输入字符串。

返回:AVSphericalProjection值,如果没有找到则为-1。



三、Stereo3D类型和功能

立体视频文件由嵌入在单个帧中的多个视图组成,通常描述场景的两个视图。


一)、数据结构

立体声3D类型:此结构描述了如何在单个视频表面中打包两个视频,并根据需要提供其他信息。


struct   AVStereo3D{
enum AVStereo3DType type; //视频中的视图如何打包。
int flags; //有关框架包装的附加信息。
}

二)、宏

#define  AV_STEREO3D_FLAG_INVERT   (1 << 0)
倒置视图,右/底表示左视图。


三)、枚举

enum   AVStereo3DType { 
  AV_STEREO3D_2D, AV_STEREO3D_SIDEBYSIDE, AV_STEREO3D_TOPBOTTOM, AV_STEREO3D_FRAMESEQUENCE, 
  AV_STEREO3D_CHECKERBOARD, AV_STEREO3D_SIDEBYSIDE_QUINCUNX, AV_STEREO3D_LINES, AV_STEREO3D_COLUMNS 
}


四)、函数

AVStereo3D *  av_stereo3d_alloc (void)
分配AVStereo3D结构并将其字段设置为默认值。

结果可以使用av_freep()来释放。

返回:AVStereo3D填充默认值或失败时为NULL。


AVStereo3D *  av_stereo3d_create_side_data (AVFrame *frame)
分配完整的AVFrameSideData并将其添加到框架中。

参数:frame:添加哪一侧数据的帧。

返回:AVStereo3D结构由调用者填充。


const char *  av_stereo3d_type_name (unsigned int type)
提供一个给定的stereo3d类型的人类可读的名称。

参数:type:输入stereo3d类型值。

返回:stereo3d值的名称,或“未知”。


int  av_stereo3d_from_name (const char *name)
获取AVStereo3DType形式可读的名称。

参数:name:输入字符

返回:AVStereo3DType值,如果没有找到则为-1。

常见FFmpeg命令行全面分析 FFmpeg多媒体库支持的命令行调用分为三个模块:ffmpeg、ffprobe、ffplay。其中ffmpeg命令行常用于音视频剪切、转码、滤镜、拼接、混音、截图等;ffprobe用于检测多媒体流格式;ffplay用于播放视频。详情可查阅FFmpeg官方文档:https://ffmpeg.org/ffmpeg-all.html。............ 阅读详情

相关推荐

多媒体编解码学习: ffmpeg(更新ffmpeg库使用方法)

文中内容部分参考大牛博客进行边操作边总结 一、ubuntu安装ffmpeg 1. 从ffmpeg官网:https://www.ffmpeg.org/download.html下载源代码,ffmpeg-3.1.2.tar.bz2 2. 解压文件   3. 安装步骤 进入解压目录:   配置makefile:   其中--enable-share生产动态链接库,编程

jayson_jang的专栏 5136

ffmpeg源码简析(十三)ffmpeg API变更 2009-03-01—— 2017-05-09变更

Add:新增的Change/Rename:修改的Deprecate:过时的。以后很有可能删除。Remove:删除的 The last version increases were: libavcodec: 2015-08-28 libavdevice: 2015-08-28 libavfilter: 2015-08-28 libavformat: 2015-08-28 libavr

WangShuo的专栏 3万+

嵌入式音视频开发——FFmpeg入门

FFmpeg是一个开源的多媒体处理框架,提供音视频转码、剪辑、推流等功能。其核心组件包括: libavformat - 处理封装格式和解复用 libavcodec - 提供编解码功能 libavfilter - 实现音视频滤镜处理 libavutil - 提供基础工具函数 libswscale/swresample - 处理视频/音频格式转换 libavdevice - 管理多媒体设备 libpostproc - 提供后期处理效果 这些组件协同工作,通过AVFormatContext、AVCodecCont

abloun的博客 1137

FFmpeg 视频旋转信息处理:3.4 vs 7.0.2

FFmpeg 在处理视频旋转信息方面经历了重要的架构变化。本文档详细对比了 FFmpeg 3.4 和 7.0.2 在封装(muxing)和解封装(demuxing)视频旋转信息时的差异,并提供兼容性解决方案。文档内容由Claude Sonnet 4辅助撰写,如有疏漏还请斧正。FFmpeg 3.4:支持 metadata 和 side data 双重机制:主要依赖 side data 机制,弱化 metadata 支持FFmpeg 3.4:过渡期版本,同时支持 metadata 和 side data。

T_T233333333的博客 747

使用ffmpeg的c++库读取视频流和其中的SEI数据

FFmpeg是一个多媒体软件框架,支持多种新旧视频编码格式,提供解码、编码、 转码、多路复用、解复用、流式传输、过滤和播放等功能。

simple的博客 2583

FFmpeg/OpenCV 实现全屏斜体水印

基于opencv ,ffmpeg 实现全屏斜体水印。支持字体、字号等设置。

J。 2070

FFMPEG Overview

1简述 ffmpeg,它是一个完整的跨平台方案,用于录制,转换和流式传输音频和视频。 使用也特别容易:ffmpeg -i input.mp4 output.avi。 2关于FFMPEG ffmpeg它是一款非常优秀的多媒体处理框架,能够编码,解码,转码,复用,解复用,网络流媒体下载,滤镜,播放等功能。 它包含六个模块: 1libavcodec,音视频解码/编码库. 2libavutil,简化编程,提供一些通用函数。 3 libavformat,复用/解复用库 4 libavfilter,多媒体滤镜库 5

陌上烟雨遥的博客 399

FFmpeg入门详解之58:Libavutil详解:理论与实战

libavutil是一个实用库,用于辅助多媒体编程。此库包含安全的可移植字符串函数、随机数生成器、数据结构、附加数学函数、加密和多媒体相关功能(如像素和样本格式的枚举)。libavcodec和libavformat并不依赖此库。从FFmpeg官网的文档-libavutil来看,avutil主要有一下几种功能:数学函数字符串操作内存管理相关数据结构相关错误码及错误处理日志输出其他辅助信息,比如密钥、哈希值、宏、库版本、常量等AVLogParseUtil。

福优学苑@音视频+流媒体 1145

【音视频开发好书推荐2】《FFmpeg 音视频开发基础与实战》

【音视频开发好书推荐2】《FFmpeg 音视频开发基础与实战》

dvlinker的技术专栏 1万+

Android10 FFmpeg开发案例之实现一个简易视频编辑器

Android里面开发视频播放器的例子很多,但FFmpeg无疑是最为强大而且最多人使用的音视频编解码库,所以,可以这么说,FFmpeg你必须学会使用。下面大部分是收集的,整合一下,感觉很重要,所以拿过来了,至于更加细致的FFmpeg用法,你可以看FFmpeg手册,help命令,或者网上搜一搜,基本上你看到的网上各种音视频流媒体的处理,都离不开FFmpeg: FFmpeg库关键概述: libavutil是一个实用程序库,用于帮助进行多种媒体编程。它包含可移植的字符串函数、任意数生成器、额外的算术能力、数据

有问题或资源连接有缺失的可以私信公众号新潮看世界获取 2017

PXE 批量安装 Ubuntu 20.04

原文链接:https://www.cpweb.top/1698 一、介绍   Ubuntu 20.04 的服务器安装程序支持新的操作模式:自动安装(automated installation)。自动安装可以通过自动安装配置提前回答所有这些配置问题,并使安装过程无需任何交互即可运行。   在 Ubuntu 18.04 中,用的应答文件是 preseeds(预配置文件),它基于 debian-installer(aka di)来实现自动安装的。需要注意的是,如果你使用的是 cobbler,那你应....

supahero的博客 1万+

FFmpeg 头文件完美翻译之 libavutil 模块

众所周知,FFmpeg 的代码开发上手难度较高,源于官方提供的文档很少有包含代码教程相关的。要想熟练掌握 FFmpeg 的代码库开发,需要借助它的头文件,FFmpeg 把很多代码库教程都写在头文件里面。因此,熟读头文件的内容很重要,为此,我对 FFmpeg 6.x 版本的头文件进行了翻译,方便大家阅读理解。相信我,通读一遍头文件的注释后,你的 FFmpeg 的代码库开发技能将更上一层。本文适用于有 FFmpeg 代码库开发基础,但想深入熟练使用的同学。同时也可以参考我的Github 仓库。

Leon_Chenl的博客 963

JW01二氧化碳传感器实战:5分钟搞定Arduino环境监测系统(附完整代码)

本文详细介绍了如何使用JW01二氧化碳传感器与Arduino快速搭建环境监测系统。通过简单的硬件连接和完整的代码示例,读者可以在5分钟内实现CO2浓度实时监测,并了解数据解析、常见问题解决及进阶应用扩展。JW01传感器的高精度和易用性使其成为创客和嵌入式开发者的理想选择。

kite3的博客 382

Libavutil详解:理论与实战

libavutil 是一个实用库,用于辅助多媒体编程,本文记录 libavutil 库学习及 demo 例程展示。libavutil 是一个实用库,用于辅助多媒体编程。此库包含安全的可移植字符串函数、随机数生成器、数据结构、附加数学函数、加密和多媒体相关功能(如像素和样本格式的枚举)。libavcodec 和 libavformat 并不依赖此库。数学函数字符串操作内存管理相关数据结构相关错误码及错误处理日志输出其他辅助信息,比如密钥、哈希值、宏、库版本、常量等AVLog。

明天你好的博客 2173

Python声音识别实战:从音频处理到智能分类

本文详细介绍了使用Python进行声音识别的完整实战流程。从音频预处理、特征提取(如MFCC)到构建分类模型(SVM、CNN),并最终实现一个实时环境音分类器。文章以Python为核心工具,结合librosa等库,为开发者提供了从理论到实践的清晰路径,适用于智能家居、工业监测等多种应用场景。

weixin_29064009的博客 324

第1.2章 机器人SLAM计算机基础总结(二):VSCode教程及 AI等效率插件推荐

如何高效编写代码?怎样快速调试程序?**别担心,今天就给大家带来一款超强大的编程神器 ——VSCode,以及能让编程之路 “一马平川” 的实用插件推荐,无论你是新手小白还是资深大神,都能从中受益!

行知SLAM 1861

FFmpeg 学习(一):FFmpeg 简介

它提供了录制、转换以及流化音视频的完整解决方案。如果您之前没有阅读FFmpeg代码的经验,建议优先阅读libavformat、libavcodec以及libavutil下面的代码,它们提供了音视频开发的最基本功能,应用范围也是最广的。链接:https://zhuanlan.zhihu.com/p/568800000。链接:https://zhuanlan.zhihu.com/p/568800000。商业转载请联系作者获得授权,非商业转载请注明出处。商业转载请联系作者获得授权,非商业转载请注明出处。

yinshipin007的博客 3764

2025机械考研复试面试问题汇总篇(含13门科目),考研机械复试专业面试常见重点问题总结!考研机械复试专业面试准备看这一篇就够了!

(完整版内容:)1.汇集了本科各科的重点知识及多个机械名校800多个常见问题,共8.7万字185页,涵盖机械所以专业课的重点知识和常见问答。 2.涉及机械大类重点科目,包括:材料力学、控制工程、数控技术、机械制造技术基础、理论力学、液压传动、机械设计、机械原理、工程材料、互换性与技术测量、测试技术、汽车理论、程序设计与C语言等13门必修课。

weixin_56510835的博客 1862

音视频编解码学习: FFmpeg 的基础知识

FFmpeg 是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案;FFmpeg 的开发是基于 Linux 操作系统的,但是可以在大多数操作系统中编译和使用 FFmpeg 支持 MPEG、 DivX、MPEG4、AC3、DV、FLV 等40多种编码,AVI、MPEG、OGG、Matroska、ASF 等90多种解码

鸿蒙的技术博客 1926

基于 STM32 的智慧农业温室控制系统设计与实现

本文提出一种基于 STM32 微控制器的智慧农业温室控制系统设计方案,通过集成多类型环境传感器、执行机构及无线通信模块,实现对温室内温湿度、光照、土壤湿度等参数的实时监测与自动调控。文中详细阐述硬件选型、电路连接及软件实现流程,并附关键代码示例,为智慧农业领域提供低成本、高可靠性的温室控制解决方案。

weixin_42300449的博客 1923

手把手教你学Simulink——基于经典PID控制的电机系统场景实例:BLDC电机PID电流控制策略仿真

*无刷直流电机(Brushless DC Motor, BLDC)**因其高效率、长寿命和低维护成本,在众多领域如家用电器、工业自动化、电动汽车等得到了广泛应用。为了实现对BLDC电机的有效控制,通常采用基于霍尔传感器或反电动势检测的换相技术,并结合电流闭环控制以提高系统的动态响应和稳定性。本教程将带你使用构建一个基于PID控制的BLDC电机电流控制策略仿真模型BLDC电机建模PID控制器设计与应用系统仿真与调试控制效果分析本文介绍了如何使用构建一个。

MHD0815的博客 196

FFmpeg命令处理音视频

此处:-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持,-vframes 设置转换多少桢(frame)的视频,示例命令是获取第一秒第一帧的截图。libavdevice: 是一个包含输入和输出设备的库,用于抓取和渲染许多常见的多媒体输入/输出软件框架,包括 Video4Linux、Video4Linux2、VfW 和 ALSA。-vf scale 指定使用简单过滤器 scale,iw/2:-1 中的 iw 指定按整型取视频的宽度。-b:a 指定音频码率。

u010609022的专栏 1382

LPDDR5 学习笔记07:读写操作详解

本文介绍了LPDDR5 SDRAM的读写操作时序规范。对于读操作,需在时钟上升沿发送读指令,经过RL延迟后输出首个有效数据,并需定期校准采样时钟以补偿时序偏移。写操作需先建立WCK2CK同步状态,WCK信号需提前驱动,并在写入数据后保持活动状态。连续读写操作中,若指令间隔超过特定阈值需重新同步。还介绍了RDQS模式,通过数据选通信号提高高速场景下的数据采集可靠性。所有操作都需满足严格的时序参数要求,包括前后导码、后缀周期等,以确保数据可靠传输。

一只豌豆象的博客 2725

python安装ffmpeg包操作方法

步骤1. Anaconada 环境 步骤2. 以下两者方法均失败的情况下用步骤3 pip install FFmpeg conda install FFmpeg 步骤3. 采用镜像方式安装 conda install -c https://conda.anaconda.org/menpo ffmpeg 步骤4. 安装conda-forge conda-forge是编译的f...

5792

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

[FFmpeg]使用ffmpeg从各种视频文件中直接截取视频图片

https://www.cnblogs.com/Tmc-Blog/p/5090230.html 什么是ffmpeg?What is ffmpeg? ffmpeg是一个非常有用的命令行程序,它可以用来转码媒体文件。它是领先的多媒体框架FFmpeg的一部分,其有很多功能,比如解码、编码、转码、混流、分离、转化为流、过滤以及播放几乎所有的由人和机器创建的媒体文件。 在这个框架中包含有各种工具,每一个...

weixin_41909598的博客 1282

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ffmpeg常用函数和数据结构

记录下ffmpeg常用的一些函数和数据结构环境:ffmpeg-6.1。

langzi113的专栏 1651

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: FFMPEG学习【libavutil】:数据结构(四)
下一篇: FFMPEG学习【libavutil】:音频相关(一)
一世豁然
博客等级 码龄15年 1276粉丝 146原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值