不使用 ffmpeg 命令读取mp4视频时长

大家一般都用 ffmpeg 获取视频长度,今天看到有一个 mediainfo 也有这个功能。

ffmpeg 命令是

ffmpeg -i test.flv 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//
ffprobe -v quiet -select_streams v -show_entries stream=duration -of csv=“p=0” foo.mp4

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

如果发现容器或流的持续时间丢失或不准确(可能由于文件损坏或被截断),则可能需要完全解码输入。

centos 7 安装 mediainfo 安装很简单。

yum install mediainfo -y

MacOS 下安装命令如下

brew install mediainfo

mediainfo 将以毫秒为单位的持续时间输出为单个整数值。

mediainfo --Output='General;%Duration%' file.mp4

批量查找目录下所有mp4 文件并打印时长

#!/bin/sh

echo 'l=$(mediainfo --Output="General;%Duration%" $1);echo "$1:$l"' > ~/ff
chmod +x ~/ff
find . -type f -name "*.mp4" | awk '{system("~/ff " $1)}'