如何从控制台获取视频文件的长度?

如何从控制台获取视频文件的长度?

假设我们有一个视频文件 some_video。

我怎样才能从 shell 脚本(使用 mplayer/transcode/gstreamer/vlc/ffmpeg/whatever)获取它的长度?

VIDEO_LENGTH_IN_SECONDS=`ffmpeg .... -i some_video ... | grep -o .....`

答案1

ffprobe -i some_video -show_entries format=duration -v quiet -of csv="p=0"

将返回视频时长(以秒为单位)。

答案2

类似于:

ffmpeg -i input 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,//

这将提供:HH:MM:SS.ms。您还可以使用ffprobe,它随大多数 FFmpeg 安装提供:

ffprobe -show_format input | sed -n '/duration/s/.*=//p'

… 或者:

ffprobe -show_format input | grep duration | sed 's/.*=//')

要转换为秒(并保留毫秒),请输入:

awk '{ split($1, A, ":"); print 3600*A[1] + 60*A[2] + A[3] }'

要将其转换为毫秒,请输入:

awk '{ split($1, A, ":"); print 3600000*A[1] + 60000*A[2] + 1000*A[3] }'

如果只想要秒数而不想要毫秒数,请输入:

awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'

例子:

在此处输入图片描述

答案3

ffprobe -v error -select_streams v:0 -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 movie.mp4

将返回以秒为单位的总时长。(视频+音频)= 124.693091

ffprobe -v error -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 movie.mp4

仅返回视频时长(秒)stream=duration= 123.256467

ffprobe -v error -sexagesimal -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 movie.mp4

将仅返回使用该-sexagesimal格式的视频时长。= 0:02:03.256467

答案4

如果您无法访问ffprobe,您可以使用mediainfo

# Outputs a decimal number in seconds
mediainfo some_video --Output=JSON | jq '.media.track[0].Duration' | tr -d '"'`

相关内容