ffmpeg获取视频流帧信息

如何得到视频流还有多久下载完成

当用脚本从网页中获取视频流时,怎么才能从已下载的数据中得到还有多长时间视频才可以下载完成。

使用ffmpeg工具中的ffprobe命令工具可以得到所有帧信息,我们只要知道最后一帧的时间和视频的总时长,就可以得到还有多长时间的视频没有下载到

使用下载的命令,我们可以得到视频总时长信息

ffprobe -show_format video.mp4 

得到的信息如下

[FORMAT]
filename=video.mp4
nb_streams=1
nb_programs=0
format_name=mov,mp4,m4a,3gp,3g2,mj2
format_long_name=QuickTime / MOV
start_time=0.000000
duration=410.443367
size=68280320
bit_rate=1330859
probe_score=100
TAG:major_brand=dash
TAG:minor_version=0
TAG:compatible_brands=iso6avc1mp41
TAG:creation_time=2017-10-06T03:11:05.000000Z
[/FORMAT]

其中我们只要其中的duration=410.443367参数,这个值就是视频播放总时长。单位是秒

再使用

ffprobe -show_packets video.mp4

可以获取当前视频所有帧包的时间和大小信息,我们只要最后一个packet包中的帧播放时间信息.

[PACKET]
...
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=23005983
pts_time=255.622033
dts=23002980
dts_time=255.588667
duration=3003
duration_time=0.033367
convergence_duration=N/A
convergence_duration_time=N/A
size=11982
pos=68268338
flags=__
[/PACKET]

packet参数说明:
show_packets查看的多媒体包信息使用PACKET标签所包括起来,其中包含的信息主要如下:
codec_type: 多媒体类型,例如视频包,音频包等;
stream_index: 多媒体的stream索引;
pts: 多媒体的显示时间值
pts_time: 根据不同格式计算过后的多媒体的显示时间
dts: 多媒体解码时间值
dts_time: 根据不同格式计算过后的多媒体解码时间
duration: 多媒体包占用的时间值
duration_time: 根据不同格式计算过后的多媒体包占用的时间值
size: 多媒体包的大小
pos: 多媒体包所在的文件偏移位置
flags: 多媒体包标记,关键包与非关键包的标记

从最后一个packet里,我们可以看出这个视频最后一帧的播放时间是

endtime = pts_time + duration_time
        = 255.622033 + 0.033367
        = 255.655400

这样从网站上下载视频时就会知道视频已经下载了多少。还有多少没有下载到。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值