ffmpeg第8篇:使用ffprobe采集文件信息
1、 前言
ffprobe是ffmpeg的其中一个模块,主要用于查看文件信息,咱们知道一个MP4文件其实不仅仅包含了音视频数据,还有如元数据等其它信息,但是实际上咱们关心的往往是音视频数据部分,今天来看下如何使用ffprobe来获取音视频信息。
先看看ffprobe的帮助信息
ffprobe -v error --help
在输出的信息中,有这一行
-sections print sections structure and section information, and exit
可以看看具体作用是什么
ffprobe -v error -sections test.mp4
输出如下
Sections:
W.. = Section is a wrapper (contains other sections, no local entries)
.A. = Section contains an array of elements of the same type
..V = Section may contain a variable number of fields with variable keys
FLAGS NAME/UNIQUE_NAME
---
W.. root
.A. chapters
... chapter
..V tags/chapter_tags
... format
..V tags/format_tags
.A. frames
... frame
..V tags/frame_tags
.A. side_data_list/frame_side_data_list
... side_data/frame_side_data
.A. timecodes
... timecode
.A. components
... component
.A. pieces
... section
.A. logs
... log
... subtitle
.A. programs
... program
..V tags/program_tags
.A. streams/program_streams
... stream/program_stream
... disposition/program_stream_disposition
..V tags/program_stream_tags
.A. streams
... stream
... disposition/stream_disposition
..V tags/stream_tags
.A. side_data_list/stream_side_data_list
... side_data/stream_side_data
.A. packets
... packet
..V tags/packet_tags
.A. side_data_list/packet_side_data_list
... side_data/packet_side_data
... error
... program_version
.A. library_versions
... library_version
.A. pixel_formats
... pixel_format
... flags/pixel_format_flags
.A. components/pixel_format_components
... component
其实打印的是一个视频文件在ffmpeg眼中的大致结构:顶层是root,下面有chapters、frames、streams等。
2、 如何采集视频信息
而如果你仔细看ffprobe -v error --help命令打印出来的日志,就会发现上面的这些结构一一对应了一个命令参数,拿chapters举例,可以发现help命令打印出来包含有这个参数:-show_chapters
所以,咱们可以从这个角度来看下如何获取文件信息,先试一下前面提到的chapters部分
ffprobe -v error -show-chapters -of json test.mp4
输出如下:
{
"chapters": [
]
}
虽然没有信息,但是ffprobe确实是打印了信息出来,咱们换一个section
ffprobe -v error -show-streams -of json test.mp4
这时你就会发现这次将视频文件的每一个数据流的信息打印了出来,考虑到篇幅,这里只将视频流的一部分数据贴出来
{
"streams": [
{
"index": 0,
"codec_name": "h264",
"codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
"profile": "Main",
"codec_type": "video",
"codec_tag_string": "avc1",
"codec_tag": "0x31637661",
"width": 640,
"height": 360,
"coded_width": 640,
"coded_height": 360,
"closed_captions": 0,
"film_grain": 0,
"has_b_frames": 0,
"sample_aspect_ratio": "1:1",
"display_aspect_ratio": "16:9",
"pix_fmt": "yuv420p",
"level": 30,
"chroma_location": "left",
"field_order": "progressive",
"refs": 1,
"is_avc": "true",
"nal_length_size": "4",
"id": "0x1",
"r_frame_rate": "24/1",
"avg_frame_rate": "24/1",
"time_base": "1/12288",
"start_pts": 0,
"start_time": "0.000000",
"duration_ts": 124928,
"duration": "10.166667",
"bit_rate": "2004518",
"bits_per_raw_sample": "8",
"nb_frames": "244",
"extradata_size": 48
}
}
可以看到,视频流中诸如分辨率、帧率等参数的详细信息都罗列了出来。
除了-show_streams参数,大家可以试试其它的参数-show_format ,-show_frames, -show_packets 看看具体的效果
3、 show_entries
这里再说一个比较有用的参数:-show_entries,这个参数的作用你可以理解为一个选择器,选择要打印哪些数据流的参数.
以上面打印出来的视频流信息为例,假如咱们只想知道视频的分辨率,该怎么办?这时候就可以用-show_entries了:
ffprobe -v error -show_entries stream=width,height -of json test.mp4
打印如下:
"programs": [
],
"streams": [
{
"width": 640,
"height": 360
},
{
}
]
}
可以看到,只把分辨率的信息打印了出来,唯一的问题是同时也打印了一些空白数据- -
4、 多section信息拼接
另外如果想既打印stream信息,又打印format信息怎么办呢,对于不同的section,可以使用:来区分,如下面这样
ffprobe -v error -show_entries stream=width,height:format=nb_streams -of json test.mp4
实际输出如下:
{
"programs": [
],
"streams": [
{
"width": 640,
"height": 360
},
{
}
],
"format": {
"nb_streams": 2
}
}
这样就输出了两个section的信息
5、附录
最后说两个比较有用的参数
-count_frames:计算所有的frame,也就是有效的视频帧,当添加了该参数后,stream信息中,会多出nb_read_frames参数
-count_packets:计算所有的packet,当添加了该参数后,stream信息中,会多出nb_read_packets参数
ffmpeg系列文章目录
ffmpeg第1篇:日志级别控制、保存日志到指定文件、处理进度查询
ffmpeg第2篇:简单滤镜与复杂滤镜的区别
ffmpeg第3篇:为视频添加静态水印
ffmpeg第4篇:为视频添加动态水印
ffmpeg第5篇:让水印图片旋转起来
ffmpeg第6篇:滤镜语法
ffmpeg第7篇:数据流选择神器-map指令
ffmpeg第8篇:使用ffprobe采集文件信息
番外篇
有问题请留言沟通,欢迎转载,转载请注明出处
欢迎点击个人博客地址:愉快编程
ffmpeg第8篇:使用ffprobe采集文件信息的更多相关文章
- 使用ffprobe 查询wav文件信息
使用ffprobe 查询wav文件信息 安装 安装过程和ffmepg相同不在赘述 不带参数查询文件信息 ffprobe ZH_biaobei_标准合成_甜美女声_楠楠_5_5_5_6_1_4047db ...
- ffmpeg第6篇:滤镜语法
前言 哈哈,回来继续填坑了,前段时间较忙没时间写,现在继续~ 简介 滤镜是ffmpeg的一个很强大的功能,它支持许多有用的视频处理功能,常见的滤镜如:缩放.旋转.水印.裁剪等 一个比较经典的滤镜使用方 ...
- ffmpeg第7篇:数据流选择神器-map指令
自动选择规则 ffmpeg在处理视频时,如果只提供了输入和输出参数,ffmpeg会自动地去选择相应的视频流和音频流来合成文件 自动选择的方式根据如下规则: 视频流:选分辨率最高的,比如有两个视频,一个 ...
- 解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译)
解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译) http://improve.dk/orcamdf-rawdatabase-a-swiss-a ...
- Linux入门篇(三)——文件与目录
这一系列的Linux入门都是本人在<鸟哥的Linux私房菜>的基础上总结的基本内容,主要是记录下自己的学习过程,也方便大家简要的了解 Linux Distribution是Ubuntu而不 ...
- (代码篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝
上一篇讲解了基础文件IO的理论发展,这里结合java看看各项理论的具体实现. 传统IO-intsmaze 传统文件IO操作的基础代码如下: FileInputStream in = new FileI ...
- Oracle DB备份恢复篇之丢失控制文件
实验目的 本篇主要模拟控制文件丢失后,如何根据实际情况恢复数据库,才能使数据库尽可能不丢失数据. 实验环境 1)Linux系统环境 [oracle@DG1 ~]$ lsb_release -a LSB ...
- Java微信公众平台开发--番外篇,对GlobalConstants文件的补充
转自:http://www.cuiyongzhi.com/post/63.html 之前发过一个[微信开发]系列性的文章,也引来了不少朋友观看和点评交流,可能我在写文章时有所疏忽,对部分文件给出的不是 ...
- Blend_技巧篇_导入PSD文件制作ToggleButton (Z)
原文:Blend_技巧篇_导入PSD文件制作ToggleButton (Z) 系统: Win7sp1 32位 IDE: Microsoft VisualStudio 2013 Ultimate Ble ...
- 如何使用ffmpeg的c语言sdk实现对文件夹的操作
重要函数 打开文件夹:avio_open_dir() 读取文件夹:avio_read_dir() 关闭文件夹:avio_close_dir() 结构体, 操作目录的上下文:AVIODirContext ...
随机推荐
- Vue学习之--------el与data的两种写法、MVVM模型、数据代理(2022/7/5)
文章目录 1.el与data的两种写法 1.1.基础知识 1.2.代码实例 1.3.页面效果 2.MVVM模型 2.1. 基础知识 2.2 .代码实例 2.3.页面效果 3.数据代理 3.1. 基础知 ...
- fun无处不在 搜索结果调用其他字段的办法
一直有人要搜索结果调用其他字段的信息 比如图片等等 一直忙没顾上 官方其实已经内置了一个内容读取器. 我们打开搜索的结果模板template\index_style\你的模板目录\search\ind ...
- 如何清除取消KMS激活
1.首先要卸载掉用KMS激活的程序. 2.卸载完成之后,以管理员身份打开命令提示符. 3.依次输入以下命令 slmgr /upk slmgr /ckms slmgr /rearm 输入完成后会显示需要 ...
- Mysql之PXC高可用
PXC高可用 1.环境准备 pxc1: centos7 10.0.0.7 pxc2: centos7 10.0.0.17 pxc3: centos7 10.0.0.27 pxc4: centos7 1 ...
- Oracle:ORA-39006、ORA-39213解决办法
执行Oracle数据库导入,遇到报错ORA-39006: internal error.ORA-39213: Metadata processing is not available.这还是第一次遇到 ...
- 还在为数据库事务一致性检测而苦恼?让Elle帮帮你,以TDSQL为例我们测测 | DB·洞见#7
数据库用户通常依赖隔离级别来确保数据一致性,但很多数据库却并未达到其所表明的级别.主要原因是:一方面,数据库开发者对各个级别的理解有细微差异:另一方面,实现层面没有达到理论上的要求. 用户在使用或开发 ...
- 5.django-模型ORM
Django中内嵌了ORM框架,不需要直接编写SQL语句进行数据库的操作,通过定义模型类来完成对数据库中表的操作 O:Object,也就是类对象的意思 R:Relation,关系数据库中表的意思 M: ...
- CAN总线数据链路层(一)
1.通信机制 发送报文. 1.首先检测Bus状态,空闲 则发送 报文且回读 2.线与机制,若有两个节点同时发报文 报文结构: 通过ID进行仲裁(规则 ...
- 【DL论文精读笔记】Object Detection in 20 Y ears: A Survey目标检测综述
目标检测20年综述(2019) 摘要 Abstract 该综述涵盖了400篇目标检测文章,时间跨度将近四分之一世纪.包括目标检测历史上的里程碑检测器.数据集.衡量指标.基本搭建模块.加速技术,最近的s ...
- RabbitMq了解
RibbitMQ MQ优势 MQ的三大主要作用: 应用解耦.异步提速.流量削锋 应用解耦 系统的耦合性越高,容错性就越低,可维护性就越低: 解耦: 如果其中一个系统服务宕机,那么系统的其他服务将也无法 ...