ffmpeg 分析一个视频的基本结构组成_流_包_帧

分析视频流

stream[0]

  • duration = 2019840 // 视频的时长时间戳,计算秒 2019840/12800
  • index = 0 // 流索引,这是一个视频流
  • nb_frames // 视频的总帧数
  • avg_frame_rate // 视频的帧数, num/den就是帧数
  • timebase = {1, 12800} // 视频流的时间基
  • first_dts = -1024 // 第一帧的dts
  • cur_dts = 当前帧的dts
  • codecpar
    • codec_type = AVMEDIA_TYPE_VIDEO // 编码器的类型
    • codec_id = AV_CODEC_ID_H264 // 编码格式
    • bit_rate = 252212 // 比特率
    • width = 1920 // 宽
    • height = 1080 // 高
    • format = 0 // 颜色格式,0是yuv420p
    • profile = 77
    • level = 40

stream[0]的Packet(包数据)

  • pts = 这一个packet的pts,也就是当前的时间戳
  • dts = 值一个packet的dts,这是解码时间戳
  • duration = 1024 # 这一个包所占用的时间戳
  • data = 这一个包的数据
  • flags = 1 // 表示域,flags=1的话就是关键帧的意思
  • stream_index = 1 # 代表这个包属于音频还是视频的index
  • pos = 129410 # 代表示流媒体的偏移量
  • size = 1024 # 代表数据的大小

stream[0]的Stream(解码后帧的数据)

  • data = 解码后的流数据

    • 对于packed格式的数据(例如RGB24),会存到data[0]里面。
    • 对于planar格式的数据(例如YUV420P),则会分开成data[0],data[1],data[2]...(YUV420P中data[0]存Y,data[1]存U,data[2]存V)
  • linsize = 每一行的数据大小
  • key_frames = 1 // 是否是关键帧 , 如果是音频一定是关键帧
  • pts = 0 // 时间戳,解码之后的,编码之前需要自己进行定义
  • width = 1920 // 图像的宽度
  • height = 1080 // 图像的高度
  • format = 0 // 图像的格式 yuv420p
  • pict_type = AV_PICTURE_I // 图像的帧类型,这个是I帧的意思
    • AV_PICTURE_TYPE_I I帧
    • AV_PICTURE_TYPE_B B帧
    • AV_PICTURE_TYPE_P P帧
    • ...
  • pkt_size = 78000 // 包的大小

分析音频流数据

stream[1]

  • index =1 // 流索引,这是一个音频流
  • duration = 7576560 // 音频的总时间戳
  • time_base = {1, 48000} // 音频流的时间基
  • nb_frames = 7400 // 音频一共7400帧, 一秒 47帧左右, 一秒采样48000次,那么每一帧采样的大小决定了音频的实际帧数
  • first_dts = -1024 // 第一帧的dts
  • cur_dts = 当前帧的dts
  • codecpar
    • codec_type = AVMEDIA_TYPE_AUDIO // 音频类型
    • codec_id = AV_CODEC_ID_AAC // 编码格式:AAC
    • format = 8 // 音频的采样格式AV_SAMPLE_FMT_FLTP
    • bit_rate = 126772 // 比特率 126772
    • channel_layout = 3 // 音频的通道的存储顺序
    • channels = 2 // 音频的通道数
    • sample_rate = 48000 // 音频的采样率
    • frame_size = 1024 // 每一帧的PTS量

stream[1]的Packet(包数据)

  • pts = 这一个packet的pts,也就是当前的时间戳
  • dts = 值一个packet的dts,这是解码时间戳
  • duration = 1024 # 这一个包所占用的时间
  • data = 这一个包的数据
  • flags = 1 // 表示域,flags=1的话就是关键帧的意思
  • stream_index = 1 # 代表这个包属于音频还是视频的index
  • pos = 129410 # 代表示流媒体的偏移量
  • size = 1024 # 代表数据的大小

stream[1]的Stream(解码后帧的数据)

  • data = 解码后的流数据,视频是yuv,rgb,音频是PCM数据
  • linesize = data中一行数据的大小
  • nb_samples = 音频中一个AVFrame这里标记包含了多少个采样数值
  • format = 8 //解码后的原始数值
  • key_frame = 1 // 是否是关键帧,音频都是1
  • pts = 显示时间戳
  • sample_rate = 48000 // 采样率
  • channel_layout = 3 //
  • data = 解码后的流数据
    • 对于packed格式的数据(例如RGB24),会存到data[0]里面。
    • 对于planar格式的数据(例如YUV420P),则会分开成data[0],data[1],data[2]...(YUV420P中data[0]存Y,data[1]存U,data[2]存V)
  • linsize = 每一行的数据大小
  • nb_samples = 1024 // 音频数据一帧使用1024个采样率
  • format = 8 // AV_SAMPLE_FMT_FLTP
  • key_frames = 1 // 是否是关键帧 , 如果是音频一定是关键帧
  • pts = 0 // 时间戳,解码之后的,编码之前需要自己进行定义i
  • pkt_size = 78698 // 数据的大小

原文地址:https://www.cnblogs.com/fandx/p/12208107.html

时间: 2024-07-31 22:18:49

ffmpeg 分析一个视频的基本结构组成_流_包_帧的相关文章

【学习ffmpeg】打开视频文件,帧分析,并bmp保存关键帧

http://www.tuicool.com/articles/jiUzua http://blog.csdn.net/code_future/article/details/8646717 主题 FFmpeg 任务:需要把一个视频文件的每一帧提取出来,每帧存储成单独的文件. 以前用Matlab处理过这个问题,可是感觉比较慢,而且最近正在逐步转向使用开源的东西.因此搜到ffmpeg这个好东西. ffmpeg可用来处理视频文件的提取和各种转换,跨平台,官网上有Linux,WINDOWS和MAC版本

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

你曾想过从一个视频文件中提取图片吗?在Linux下就可以,在这个教程中我将使用ffmpeg来从视频中获取图片. 什么是ffmpeg?What is ffmpeg? ffmpeg是一个非常有用的命令行程序,它可以用来转码媒体文件.它是领先的多媒体框架FFmpeg的一部分,其有很多功能,比如解码.编码.转码.混流.分离.转化为流.过滤以及播放几乎所有的由人和机器创建的媒体文件. 在这个框架中包含有各种工具,每一个用于完成特定的功能.例如,ffserver能够将多媒体文件转化为用于实时广播的流,ffp

[转载]用 FFMPEG 合并 MP4 视频

因为 ffmpeg 是支持切分 mp4 视频的,所以我就理所当然的以为 ffmpeg 是支持视频合并.直到今天同事找我问方法,才发现一直以为的方法是错误的, mp4 不支持直接 concate(丢人了...),赶紧补了一下能量,从网上抓来了多种实现. 注: 这里的 mp4 指的是网上最多见的 h264+aac mpeg4 容器的方式 1). ffmpeg + mpeg 这种是网上最常见的,基本思路是将 mp4 先转码为 mpeg 文件,mpeg是支持简单拼接的,然后再转回 mp4. ffmpeg

ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 使用ArcGIS进行空间分析 1.1 GIS分析基础 GIS的六大功能是数据获取.存储.查询.分析.表达.输出.在前面的内容里已经介绍了使用ArcGIS进行数据获取.存储.查询.表达和输出的过程,本章将介绍如何在ArcGIS中进行地理分析.分析是GIS的核心和灵魂,是GIS区别于一般的信息系统.CAD或者电子地图系统的主要标志之一. GIS分析,就是研究

ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一个全面的了解,接下来在本章中,将通过一个案例来熟悉ArcGIS for Desktop的使用,从解决问题的过程中,逐渐适应ArcGIS桌面的界面和操作方式. 本章的练习数据是一个住宅小区的简单平面示意图,需要在已有的基础上把楼房的轮廓补充完整,并加以整饰,完成一幅地图. 1.1 打开地图文档并浏览

实验作业:使gdb跟踪分析一个系统调用内核函数

实验作业:使gdb跟踪分析一个系统调用内核函数(我使用的是getuid) 20135313吴子怡.北京电子科技学院 [第一部分] 根据视频演示的步骤,先做第一部分,步骤如下 ①更新menu代码到最新版 ②在代码中加入C函数.汇编函数 ③在main函数中加入makeconfig ④make rootfs ⑤可以看到qemu中增加了我们先前添加的命令: ⑥分别执行新增的命令 [第二部分]gdb跟踪分析一个系统调用内核函数 ①进入gdb调试 ②设置断点,继续执行: ③相对应的得到这样的结果: ④查看我

转:FFmpeg的远程视频监控系统编解码

0 引言 随着视频编解码技术.计算机网络技术.数字信号处理技术和嵌入式系统的发展,以嵌入式网络视频服务器为核心的远程视频监控系统开始在市场上崭露头角.该系统把摄像机输出的模拟视频信号通过内置的嵌入式视频编码器直接转换成视频流,通过计算机网络传输出去.嵌入式网络视频服务器具备视频编码处理.网络通信.系统控制等强大功能,直接支持网络视频传输和网络管理,使得监控范围达到前所未有的广度.在远程视频监控系统中,摄像头获取的原始视频流在传输之前需要压缩,而FFmpeg可以将原始视频压缩为H264格式视频流,

实现并分析一个简单的系统内核

姓名:江军 ID:fuchen1994 mykernel实验指导(操作系统是如何工作的) 运行并分析一个精简的操作系统内核,理解操作系统是如何工作的 使用实验楼的虚拟机打开shell cd LinuxKernel/linux-3.9.4 qemu -kernel arch/x86/boot/bzImage 然后cd mykernel 您可以看到qemu窗口输出的内容的代码mymain.c和myinterrupt.c 使用自己的Linux系统环境搭建过程参见mykernel,其中也可以找到一个简单

FFMPEG图片转视频

1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流 ffmpeg -i input_file -acodec copy -vn output_file_audio //分离音频流 2.视频解复用 ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264 ffmpeg –i test.avi –vcodec copy –an –f m4v test.264