centos8平台用ffprobe获取视频文件信息(ffmpeg4.2.2)
一,ffprobe的作用
ffprobe是强大的视频分析工具,
用于从多媒体流中获取相关信息或查看文件格式信息,
并以可读的方式打印
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,查看ffprobe版本和帮助
1,查看版本
- [root@blog 1]# ffprobe --version
说明:ffprobe和ffmpeg属于同一个包,打印出的版本号也是相同的
- [root@blog 1]# whereis ffprobe
- ffprobe: /usr/bin/ffprobe /usr/share/man/man1/ffprobe.1.gz
- [root@blog 1]# rpm -qf /usr/bin/ffprobe
- ffmpeg-4.2.2-5.el8.x86_64
2,查看帮助
- [root@blog 1]# ffprobe --help
3,查看手册
- [root@blog 1]# man ffprobe
三,ffprobe的应用例子:
1,得到视频的宽/高/时长等信息
#-v quiet: 不做版本参数等log的输出,避免影响数据的输出
#-print_format: 就是-of参数,输出格式,可以指定json或xml(常用),也可用csv,ini等
#-show_format: 显示输入多媒体流的格式信息
# -show_streams: 显示输入多媒体流中流的信息:包括视频和音频
- [root@blog 1]# ffprobe -v quiet -print_format json -show_streams 8_9f6fa300bacded7b.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_time_base": "1001/60000",
- "codec_tag_string": "avc1",
- "codec_tag": "0x31637661",
- "width": 640,
- "height": 360,
- "coded_width": 640,
- "coded_height": 368,
- "has_b_frames": 1,
- "sample_aspect_ratio": "1:1",
- "display_aspect_ratio": "16:9",
- "pix_fmt": "yuv420p",
- "level": 31,
- "color_range": "tv",
- "color_space": "smpte170m",
- "color_transfer": "bt709",
- "color_primaries": "smpte170m",
- "chroma_location": "left",
- "refs": 1,
- "is_avc": "true",
- "nal_length_size": "4",
- "r_frame_rate": "30000/1001",
- "avg_frame_rate": "30000/1001",
- "time_base": "1/30000",
- "start_pts": 0,
- "start_time": "0.000000",
- "duration_ts": 6458452,
- "duration": "215.281733",
- ...
说明:以json格式输出,更方便解析
输出信息的说明:
r_frame_rate 实际帧率
avg_frame_rate 平均帧率
nb_frames 总的帧数
pix_fmt 像素格式
2,得到指定的视频信息:用python直接取出相应的字段:
获取宽度
- [root@blog 1]# ffprobe -v quiet -print_format json -show_format -show_streams 5_d3958808f0a5da07.mp4 |
python3.6 -c 'import json;import sys;obj=json.load(sys.stdin);print(obj["streams"][0]["width"])';
640
获取高度
- [root@blog 1]# ffprobe -v quiet -print_format json -show_format -show_streams 5_d3958808f0a5da07.mp4 |
- python3.6 -c 'import json;import sys;obj=json.load(sys.stdin);print(obj["streams"][0]["height"])';
- 360
获取时长
- [root@blog 1]# ffprobe -v quiet -print_format json -show_format -show_streams 5_d3958808f0a5da07.mp4 |
- python3.6 -c 'import json;import sys;obj=json.load(sys.stdin);print(obj["streams"][0]["duration"])';
- 215.281733
说明:注意centos8上没有python命令,
使用前可以先用whereis进行查询
- [root@blog 1]# whereis python
- python: /usr/bin/python3.6m /usr/bin/python3.6 /usr/bin/python2.7
3,得到指定的视频信息:用-show_entries查看指定信息:
这样我们不需要再用管道把数据传递给python解析json
看一个例子:我们要得到视频的fps
#-show_entries: 显示指定的项
- [root@blog 1]# ffprobe -v error -select_streams v -show_entries stream=r_frame_rate 8_9f6fa300bacded7b.mp4
- [STREAM]
- r_frame_rate=30000/1001
- [/STREAM]
说明:上面的除了STREAM这个组名,还有r_frame_rate这个字段名,
我们也可以把它关闭
#-of : 指定输出格式
#noprint_wrappers=1:不显示wrapper
#nokey=1: 不显示key
- [root@blog 1]# ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=r_frame_rate 8_9f6fa300bacded7b.mp4
- 30000/1001
相关知识:什么是fps?
视频帧率(Frame rate)是用于测量显示帧数的量度。
测量单位为每秒显示帧数(Frames per Second,简:FPS)
fps的几个值:
人类的眼睛所看画面的帧率高于16的时候,就会认为是连贯的,此现象称之为视觉停留
高的帧率可以得到更流畅、更逼真的动画。
30fps就是可以接受的,
如果提升至60fps则可以明显提升交互感和逼真感
2,查看streams中指定的内容:
# -select_streams: 参数可以是a、v、s分别表示只查看音频、视频、字幕
只看音频信息
- [root@blog 1]# ffprobe -v quiet -print_format json -show_streams -select_streams a 8_9f6fa300bacded7b.mp4
只看视频信息
- [root@blog 1]# ffprobe -v quiet -print_format json -show_streams -select_streams v 8_9f6fa300bacded7b.mp4
只看字幕信息
- [root@blog 1]# ffprobe -v quiet -print_format json -show_streams -select_streams s 8_9f6fa300bacded7b.mp4
3,查看视频的帧信息
#-show_frames:视频帧信息
- [root@blog 1]# ffprobe -v quiet -print_format json -show_frames 8_9f6fa300bacded7b.mp4
- {
- "media_type": "video",
- "stream_index": 0,
- "key_frame": 0,
- "pkt_pts": 3601598,
- "pkt_pts_time": "120.053267",
- "best_effort_timestamp": 3601598,
- "best_effort_timestamp_time": "120.053267",
- "pkt_duration": 1001,
- "pkt_duration_time": "0.033367",
- "pkt_pos": "7684111",
- "pkt_size": "192",
- "width": 640,
- "height": 360,
- "pix_fmt": "yuv420p",
- "sample_aspect_ratio": "1:1",
- "pict_type": "P",
- "coded_picture_number": 3598,
- "display_picture_number": 0,
- "interlaced_frame": 0,
- "top_field_first": 0,
- "repeat_pict": 0,
- "color_range": "tv",
- "color_space": "smpte170m",
- "color_primaries": "smpte170m",
- "color_transfer": "bt709",
- "chroma_location": "left"
- }
media_type: 标明是video还是audio
key_frame: 是否关键帧
"pix_fmt": 像素格式
coded_picture_number:编码图片序号
pict_type:帧类型(I、B、P)
相关知识:
三种帧类型
I:关键帧。关键帧是构成一个帧组(GOP,Group of Picture)的第一个帧。IF保留了一个场景的所有信息。压缩比为1:7。
P:未来单向预测帧,只储存与之前一个已解压画面的差值。压缩比为1:20。
B: 双向预测帧,除了参考之前解压过了的画面外,亦会参考后面一帧中的画面信息。压缩比为1:50
说明:双向预测帧做压缩效果最好
4,查看视频的包信息
# -show_packets 参数查看包信息
- [root@blog 1]# ffprobe -v quiet -print_format json -show_packets 8_9f6fa300bacded7b.mp4
内容:
- {
- "codec_type": "video",
- "stream_index": 0,
- "pts": 108108,
- "pts_time": "3.603600",
- "dts": 106106,
- "dts_time": "3.536867",
- "duration": 1001,
- "duration_time": "0.033367",
- "size": "202",
- "pos": "377767",
- "flags": "__"
- },
内容的说明:
codec_type: 多媒体类型,例如视频包,音频包等;
stream_index: 多媒体的stream索引;
pts: 多媒体的显示时间值
pts_time: 根据不同格式计算过后的多媒体的显示时间
dts: 多媒体解码时间值
dts_time: 根据不同格式计算过后的多媒体解码时间
duration: 多媒体包占用的时间值
duration_time: 根据不同格式计算过后的多媒体包占用的时间值
size: 多媒体包的大小
pos: 多媒体包所在的文件偏移位置
flags: 多媒体包标记,关键包与非关键包的标记
相关知识:
DTS(Decoding Time Stamp)
解码时间戳,作用:告诉播放器该在什么时候解码这一帧的数据。
PTS(Presentation Time Stamp)
显示时间戳,作用:告诉播放器该在什么时候显示这一帧的数据
如果视频流中没有 B 帧,则 DTS 和 PTS 的顺序是一致的。
如果有 B 帧时,则会导致解码顺序和播放顺序的不一致
5,显示视频的封装格式信息
- [root@blog 1]# ffprobe -v quiet -print_format json -show_format 8_9f6fa300bacded7b.mp4
- {
- "format": {
- "filename": "8_9f6fa300bacded7b.mp4",
- "nb_streams": 2,
- "nb_programs": 0,
- "format_name": "mov,mp4,m4a,3gp,3g2,mj2",
- "format_long_name": "QuickTime / MOV",
- "start_time": "0.000000",
- "duration": "120.128000",
- "size": "7700383",
- "bit_rate": "512811",
- "probe_score": 100,
- "tags": {
- "major_brand": "mp42",
- "minor_version": "0",
- "compatible_brands": "mp42mp41",
- "creation_time": "2020-03-27T06:25:04.000000Z"
- }
- }
- }
说明:
"nb_streams": 2 :流的个数
format_name: 格式的名字
start_time:播放开始时间
duration:播放时长
size:文件大小
bit_rate :平均码率
四,查看centos平台的版本
- [root@blog 1]# cat /etc/redhat-release
- CentOS Linux release 8.0.1905 (Core)
centos8平台用ffprobe获取视频文件信息(ffmpeg4.2.2)的更多相关文章
- JAVA通过URL链接获取视频文件信息(无需下载文件)
最近项目碰到一个大坑:APP上需要在获取视频列表时就获取视频的时长,但早期上传的时候数据库都没有保存这个数据,所以前段时间添加一个时长字段,在上传时手动输入视频时长,但是之前库中有上万条数据没这个信息 ...
- java调用ffmpeg获取视频文件信息的一些参数
一.下载ffmpeg http://www.ffmpeg.org/download.html 主要需要bin目录下的ffmpeg可执行文件 二.java代码实现 package com.aw.util ...
- java 实现视频转换通用工具类:获取视频元数据信息(一)
java 做视频转换主要用到开源的ffmpeg或者mencoder,还要有MP4Box. 注:由于平时都没有时间写博客,所以思路我就不写了,有问题问我,不一定马上回复. 详细介绍: ffmpeg:ht ...
- 实战FFmpeg--iOS平台使用FFmpeg将视频文件转换为YUV文件
做播放器的开发这里面涉及的东西太多,我只能一步步往前走,慢慢深入.播放器播放视频采用的是渲染yuv文件.首先,要知道yuv文件是怎么转换得来的,其次,要知道怎么把视频文件保存为yuv文件.雷神的文章1 ...
- 使用ffprobe 查询wav文件信息
使用ffprobe 查询wav文件信息 安装 安装过程和ffmepg相同不在赘述 不带参数查询文件信息 ffprobe ZH_biaobei_标准合成_甜美女声_楠楠_5_5_5_6_1_4047db ...
- android 中获取视频文件的缩略图(非原创)
在android中获取视频文件的缩略图有三种方法: 1.从媒体库中查询 2. android 2.2以后使用ThumbnailUtils类获取 3.调用jni文件,实现MediaMetadataRet ...
- C# 获取 mp3文件信息
C# 获取 mp3文件信息[包括:文件大小.歌曲长度.歌手.专辑] 第一种方式:[代码已验证] // http://bbs.csdn.net/topics/390392612 string fil ...
- android播放器如何获取音乐文件信息
转http://blog.csdn.net/hellofeiya/article/details/8464356, android自带的音乐播放器中,在获取音乐文件信息的时候是通过扫描得到相关信息的. ...
- 【ASP.NET 进阶】获取MP3文件信息并显示专辑图片
突发奇想,想弄个显示MP3文件信息和专辑图片的小Demo,个人不是大牛,遂百度之,总算搞定,现分享如下. 效果图: GIF效果图: 主要是依靠2个DLL文件:ID3.dll 和 Interop.She ...
随机推荐
- unserialize3 攻防世界
序列化是将对象转换为便于保存的字符串, 而反序列化是将便于保存的字符串转换为字符串. _wakeup()魔法方法 如果直接传参给code会被__wakeup()函数再次序列化,所以要绕过他, 利用__ ...
- 工具类-Fastjson入门使用
简介 什么是Fastjson? fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到Java ...
- vue-element-admin改造接入后台,搭建有来商城youlai-mall前后端分离管理平台
一. 前言 本篇基于有来商城youlai-mall微服务项目搭建的后台前端管理平台,技术选型Vue+Element-UI实现前后端分离,解决方案选型vue-element-admin.希望通过本篇你可 ...
- C#开发PACS医学影像处理系统(十一):Dicom影像挂片协议
通俗点说,挂片协议可以看作整个系统的一个相对复杂一点的配置文件,可以用JSON或XML格式来读取与保存, 另外,可以制作一个独立的exe配置程序来管理这些挂片协议. 假设配置了CT的挂片协议的右键菜单 ...
- python身体指数BMI
问题需求 既要输出国际标准也要输出国内标准
- Laravel Model查询结果的3种存储格式内存占用对比
PHP Laravel框架支持Model查询数据后可以有多种方式返回数据,对新手会造成一些困扰,比如数组Model对象.集合.纯数组 今天从内存占用的角度对比一下3种数据返回方式 按数组Model对象 ...
- 容器云平台No.2~kubeadm创建高可用集群v1.19.1
通过kubernetes构建容器云平台第二篇,最近刚好官方发布了V1.19.0,本文就以最新版来介绍通过kubeadm安装高可用的kubernetes集群. 市面上安装k8s的工具很多,但是用于学习的 ...
- session安全&&CBC字符反转攻击&&hash拓展攻击
session安全 p神写的: 在传统PHP开发中,$_SESSION变量的内容默认会被保存在服务端的一个文件中,通过一个叫"PHPSESSID"的Cookie来区分用户.这类se ...
- puTTY远程登录时,连接不上
可能接收远程登录的SSH服务没启动 解决办法,控制台输入,service sshd start
- 【小白学PyTorch】16 TF2读取图片的方法
[新闻]:机器学习炼丹术的粉丝的人工智能交流群已经建立,目前有目标检测.医学图像.NLP等多个学术交流分群和水群唠嗑的总群,欢迎大家加炼丹兄为好友,加入炼丹协会.微信:cyx645016617. 参考 ...