Answers:
这将为您提供视频的长度。
ffmpeg -i myvideo 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//
Mediainfo是用于此目的的快速工具:
$ mediainfo --Inform="Video;%Duration%" [inputfile]
您可以在更详尽的答案中找到更多选项。
在我的测试中,ffprobe
需要0.3秒和mediainfo
0.09秒。
mediainfo --Inform="Video;%Duration/String%" [inputfile]
...它将为您带来一些好处,例如43分50秒
您可以尝试使用avconv命令。
首先,您应该安装:
如果键入带有标志-i的命令,您将获得有关视频的信息:
avconv -i test.mp4
在输出中,有一个名为Duration的字段
avconv version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
built on Nov 6 2012 16:51:33 with gcc 4.6.3
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
Duration: 00:58:28.05, start: 0.000000, bitrate: 888 kb/s
Stream #0.0(eng): Video: h264 (High), yuv420p, 720x404, 748 kb/s, 25 fps, 25 tbr, 20k tbn, 50 tbc
Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s
现在,您可以使用命令仅获取“ 持续时间 ”字段的值
类型:
avconv -i file.mp4 2>&1 | grep 'Duration' | awk '{print $2}' | sed s/,//
就我而言,结果是:
00:58:28.05
58分钟28.05秒。
希望这会有所帮助!
avprobe
- 一起使用,而不需要-i
,但其工作方式完全相同。或ffprobe
为@per的答案。
更简单:
avprobe file.mp4 -show_format_entry duration
添加到pers解决方案中,可以在整个目录中使用:
for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,// | tr -d "\n" && echo " $f"; done
它甚至可以通过扩展| sort
使文件按其长度排序。
您可以将其添加到.bashrc
或.bash_aliases
为了能够 lsvlength | sort
在目录上执行
alias lsvlength='for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,// | tr -d "\n" && echo " $f"; done'
ffprobe
比ffmpeg
没有给出输出路径会引发错误的解决方案更为优雅。
ffprobe video.mp4 2>&1 | grep -E '^ +Duration' | cut -d':' -f2- | cut -d, -f1