当前位置: 首页 > news >正文

音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息

通过FFprobe命令可以显示WAV音频文件每个packet(也称为数据包或多媒体包)的信息:

ffprobe -of json -show_packets XXX.wav

输出如下:

其中:

1.codec_type:packet类型,表示该路流是视频还是音频。
2.stream_index:packet的流索引,表示该路流是媒体文件中的第几路音视频流。
3.pts:Presentation Timestamp,即显示时间戳。
4.pts_time:以秒为单位的显示时间戳。
5.dts:DecodingTimestamp,即解码时间戳。
6.dts_time:以秒为单位的解码时间戳。
7.duration:packet占用的时间值。
8.duration_time:以秒为单位的packet占用的时间值。
9.size:packet的大小。
10.pos:packet所在的文件偏移位置。
11.flags:packet标记,表示是关键包还是非关键包。

上述FFprobe命令的输出内容实际是通过FFmpeg源码(ffprobe属于FFmpeg的一部分,所以也算是FFmpeg源码)目录下的fftools/ffprobe.c中的show_packet函数打印出来的。可以看到打印出来的实际是AVPacket中的成员变量(关于AVPacket结构体可以参考:《FFmpeg存放压缩后的音视频数据的结构体:AVPacket简介》):

static void show_packet(WriterContext *w, InputFile *ifile, AVPacket *pkt, int packet_idx)
{
//...if (s) print_str    ("codec_type", s);else   print_str_opt("codec_type", "unknown");print_int("stream_index",     pkt->stream_index);print_ts  ("pts",             pkt->pts);print_time("pts_time",        pkt->pts, &st->time_base);print_ts  ("dts",             pkt->dts);print_time("dts_time",        pkt->dts, &st->time_base);print_duration_ts("duration",        pkt->duration);print_duration_time("duration_time", pkt->duration, &st->time_base);print_val("size",             pkt->size, unit_byte_str);if (pkt->pos != -1) print_fmt    ("pos", "%"PRId64, pkt->pos);else                print_str_opt("pos", "N/A");print_fmt("flags", "%c%c%c",      pkt->flags & AV_PKT_FLAG_KEY ? 'K' : '_',pkt->flags & AV_PKT_FLAG_DISCARD ? 'D' : '_',pkt->flags & AV_PKT_FLAG_CORRUPT ? 'C' : '_');
//...
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 微信小程序客户端与服务端进行WebSocket通信
  • 关于欧洲玩家的几个事实
  • Redis高级----五种数据结构及其底层实现
  • 探针卡组成说明
  • nginx 如何部署前端vue项目详细操作
  • 清除系统缓存提高写盘速度的tips
  • 并发容器简介
  • 图形零散知识点整理
  • 【STM32】FMC
  • 大模型企业应用落地系列》基于大模型的对话式推荐系统》对话推荐系统技术架构
  • 【数学建模】层次分析法
  • 【pyhton】python如何实现将word等文档中的文字转换成语音
  • 旅游行业怎么利用C#接口发送短信
  • Kafka日志及常见问题
  • 嵌入式开发高频面试题——第二章 C/C++高频面试题(上)
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • @jsonView过滤属性
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Angularjs之国际化
  • CSS 专业技巧
  • JavaScript 基础知识 - 入门篇(一)
  • Java多线程(4):使用线程池执行定时任务
  • Median of Two Sorted Arrays
  • node和express搭建代理服务器(源码)
  • Windows Containers 大冒险: 容器网络
  • zookeeper系列(七)实战分布式命名服务
  • 前端学习笔记之观察者模式
  • 如何进阶一名有竞争力的程序员?
  • 实战|智能家居行业移动应用性能分析
  • ​HTTP与HTTPS:网络通信的安全卫士
  • # 数据结构
  • #pragma 指令
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (1)svelte 教程:hello world
  • (3)nginx 配置(nginx.conf)
  • (4) PIVOT 和 UPIVOT 的使用
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (八)Spring源码解析:Spring MVC
  • (二)PySpark3:SparkSQL编程
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (图)IntelliTrace Tools 跟踪云端程序
  • (一)认识微服务
  • ****Linux下Mysql的安装和配置
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .Net mvc总结
  • .net 简单实现MD5
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET简谈设计模式之(单件模式)
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .stream().map与.stream().flatMap的使用
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @GlobalLock注解作用与原理解析