视频播着播着就卡住了,为啥呢?教你如何查看视频帧信息 |
您所在的位置:网站首页 › 抖音刷着刷着就卡 › 视频播着播着就卡住了,为啥呢?教你如何查看视频帧信息 |
今天系统收到用户上传的一份视频,播着播着就卡住了,很是奇怪,大家可以播放感受下,卡顿发生在视频1分钟的时候。 卡住了的视频文件见如下附件,现象很奇怪,突然就没有内容了,连声音都没了,但进度条一直在走,直到4分半。 卡住了.mp4.zip这到底是为什么呢? 猜想导致视频播放卡顿的原因有千千万万,常见的有如下: 1、网络较差,导致视频下载较慢,需要缓冲,因此卡住了; 可以下载文件到本地,用本地播放器(VLC、QQ播放器等)尝试播放,这个案例应该不是这个原因,本地播放到第1分钟之后也出现了卡住。 2、文件的音频和视频时长不一致,视频只有一分钟,音频有4分30秒; 如果是这种情况,在一分钟之后,视频可能卡住,应该还会继续有声音,不过这个可能性也不是没有,先保持怀疑态度。 3、视频格式有问题,播放器播不动,可能原因是单帧过大,单帧时间过长; 这种情况下一个帧率25fps的视频,时长4分30秒的话,应该有270秒*25fps = 6750帧; 如果这个视频的最后一个帧特别大, 这个视频可能只有60秒*25fps=1500帧,而最后一帧时长为3分30秒; 分析再多的猜测,也只是猜测,还不如剖析下这个视频文件,看问题出在哪里? 我们知道(其实很多人不知道),一个视频文件,其实就是一堆连续的图片快速切换,当画面切换得足够快,人们就以为这玩意动起来了 就像一本书一样,每一页就相当于一个画面,既然上述视频在一分钟卡住了,是不是可以直接定位到一分钟处以及之后的视频帧,我们看下到底是怎么了?就像翻书一样,咱们直接翻到那一页; 然而,书比较好翻,视频文件该怎么精准定位呢? 用播放器来播放,会卡住哦,根本看不到细节; 此时,需要借助FFmpeg里的ffprobe工具,进一步分析; 1、查看视频信息: 这一步可以用如下指令获取 ffprobe -show_streams -i 卡住了.mp4 -of json得到的json数据如下,为了方便观看,我把一些不重要字段删除了 由此,排除了上述的第二个猜想(视频较短,音频较长,导致画面停留在最后一帧) 当然,上述步骤也可以用MediaInfo工具查看,入口 http://MediaArea.net/MediaInfo 这个工具可以查看文件的视频流、音频流、字幕流、甚至章节Chapters的信息,实在是居家旅行、排忧解难、必备良药! 2、查看每一帧信息 既然音视频流的长度一致,我们试下用ffprobe定位到一分钟之后的那一帧,看有啥异样; 指令如下: ffprobe -select_streams 0 -show_frames -i 卡住了.mp4 -of csv >> 0.csv #查看第一个流的每一帧 ffprobe -select_streams 1 -show_frames -i 卡住了.mp4 -of csv >> 1.csv #查看第一个流的每一帧 #附件的文件中,第一个流是视频,第二个流是音频。得到的csv文件,用excel打开之后是没有表头的,而且csv文件的第一列固定是"frame"。 如果是视频,剔除第一列之后,表头信息如下 第1个字段media_type表示它是video视频; 第3个字段key_frame表示是否关键帧; 第10个字段pkt_duration表示该帧的时长; 第13个字段pkt_size 表示该帧的大小; 如果是音频,剔除第一列之后,表头信息如下 音频帧的字段含义类似,只是音频帧的字段数没视频帧那么多。 为了方便大家查看,我把两个csv文件转换为Excel,放在以下附件,并且高亮了pkt_duration和pkt_size两列。 接下来,即可定位到一分钟附近的帧,看是否有异常,为了更加方便看到整个文件的全貌,我把这两个字段做了图表,该视频的帧率是30fps,那么一分钟就有1800帧。 从pkt_duration的图表看是一条直线,说明每一帧的时长都差不多; 但从pkt_size曲线看,在一分钟之前的pkt_size,由于画面不断变动,每一帧的大小不尽相同; 关键帧I帧相对较大,参考帧P帧相对较小,同样是P帧,大小也不大一样。 但一分钟之后,每一个I帧的大小都一样,每一个P帧的大小都一样 这就很奇怪了,而恰好也解释了这个视频的播放异常现象; 结论说明视频从一分钟之后,不是视频播放卡住了,而是画面静止不动了,由于画面静止不动,所以每一帧的大小是一样的。 卡住了视频每一帧的信息.zip |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |