视频播放时,经常会遇到:
1、不同播放器显示的文件时长不一样
2、视频转码后,文件时长发生了变化
3、视频播到后面,只有画面没有声音
等各种异常,这时我们可以检查一下原视频的时长
但是原视频的时长也有多个值,分别是容器时长、音视频流时长、解码后播放时长,这几个值可能不一样,就导致了不同播放器显示值不一样,不同播放时也因此表现得不一样
容器时长(container duration)的获取方法:
代码语言:javascript复制ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -i input.mp4
音视频流时长(stream duration)的获取方法:
代码语言:javascript复制ffprobe.exe -v error -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
可以看到,两个时长并不一致,顺便一提,一个媒体文件里边有多个音视频流,各个流的时长也未必一样,一般播放器会以video stream的时长作为播放时长
另外,并不是所有格式的视频,会在音视频流级别保存了时长,这时可能会拿不到时长
解码后文件播放时长(get duration by decoding)
可以通过ffmpeg命令,先完全解码,然后获取到文件时长
代码语言:javascript复制ffmpeg.exe -i input.mp4 -f null -
可以看到时长为2:02:33,和container duration一致
该方法一般为最准确的方法,但由于需要解码,耗时可能会较长