用ffmpeg检查视频文件时长

2022-02-11 19:45:04 浏览数 (1)

视频播放时,经常会遇到:

1、不同播放器显示的文件时长不一样

2、视频转码后,文件时长发生了变化

3、视频播到后面,只有画面没有声音

等各种异常,这时我们可以检查一下原视频的时长

但是原视频的时长也有多个值,分别是容器时长、音视频流时长、解码后播放时长,这几个值可能不一样,就导致了不同播放器显示值不一样,不同播放时也因此表现得不一样

容器时长(container duration)的获取方法:

代码语言:javascript复制
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -i input.mp4
container duration 运行实例container duration 运行实例

音视频流时长(stream duration)的获取方法:

代码语言:javascript复制
ffprobe.exe -v error -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
stream duration 运行实例stream duration 运行实例

可以看到,两个时长并不一致,顺便一提,一个媒体文件里边有多个音视频流,各个流的时长也未必一样,一般播放器会以video stream的时长作为播放时长

另外,并不是所有格式的视频,会在音视频流级别保存了时长,这时可能会拿不到时长

解码后文件播放时长(get duration by decoding)

可以通过ffmpeg命令,先完全解码,然后获取到文件时长

代码语言:javascript复制
ffmpeg.exe -i input.mp4  -f null -
duration by decodingduration by decoding

可以看到时长为2:02:33,和container duration一致

该方法一般为最准确的方法,但由于需要解码,耗时可能会较长

0 人点赞