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


24

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

如何从Shell脚本(使用mplayer / transcode / gstreamer / vlc / ffmpeg /其他)获取其长度?

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

Answers:



21

类似于:

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] }'

例:

在此处输入图片说明


也为此设计了tcprobe,但是在我的系统上它不能很好地工作。
六。

1
...我的编辑被拒绝了,因此我将在此处发布,可以ffprobe使用ffmpeg:(ffprobe -show_format input | sed -n '/duration/s/.*=//p'ffprobe -show_format input | grep duration | sed 's/.*=//')打包的专门用于此类目的的工具来更简洁地完成第一步。也许@slhck可以直接将其编辑为答案。
evilsoup

抱歉,@ evilsoup。也许我应该声明免责声明,允许您和LordNeckbeard自由编辑我的帖子-我已经遇到过几次这个问题。下次只需在编辑消息中添加一点注释即可:)
slhck

0

万一您无法使用ffprobe,可以使用mediainfo

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

1
消除对需求jqtrmediainfo --Output="General;%Duration/String%" input
llogan

整齐!我要离开我的答案未经编辑的现在,因为你的命令的输出形式的X s YYY msX.YYY| sed -e 's/ s /./' -e 's/ ms//'如果您想走那条路线且无权使用,就很容易进行调整jq
ToBeReplace

可以更改mediainfo --Output="General;%Duration/String3%" input为输出00:01:48.501而不是1 min 48 s
llogan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.