如何获取视频时长(以秒为单位)?
我尝试过的:
ffmpeg -i file.flv 2>&1 | grep "Duration"
Duration: 00:39:43.08, start: 0.040000, bitrate: 386 kb/s
mediainfo file.flv | grep Duration
Duration : 39mn 43s
这很接近,但不太准确,2383 是 39.71 分钟
ffmpeg -i file.flv 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'
2383
答案1
要得到分钟数,您必须将 2383 秒除以 60。
39.7167
然后将小数部分 .7167 乘以 60 得到剩余的秒数。
43.002
所以是 39 分 43 秒。应用程序似乎给出了准确的值。
答案2
直接使用即可ffprobe
。无需sed
、grep
等。您可以获得多个“持续时间”(取决于您的输入)。
格式(容器)持续时间
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
结果:
30.024000
添加-sexagesimal
选项将使用 HOURS:MM:SS.MICROSECONDS 时间单位格式:
0:00:30.024000
视频流时长
如果您想要特定视频或音频流的持续时间:
ffprobe -v error -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
结果:
30.000000
以上命令来自FFmpeg Wiki:FFprobe 技巧。
和ffmpeg
您可以ffmpeg
通过解码输入来获取持续时间:
ffmpeg -i input.mp4 -f null -
…
frame= 1587 fps=0.0 q=0.0 Lsize=N/A time=00:01:03.48 bitrate=N/A
在这个例子中time=00:01:03.48
是持续时间。
这可能需要很长时间,具体取决于您的输入文件。
答案3
如果有的话ffmpeg
,你还应该有ffprobe
:
ffprobe -i input.file -show_format | grep duration
ffprobe -i input.file -show_format -v quiet | sed -n 's/duration=//p'
这也将给出秒的分数,如果这是一个问题,您可以使用 sed 进一步处理它。
答案4
使用 mplayer 的解决方案直接给出秒数:
mplayer -identify -frames 0 -vo null -nosound file.flv 2>&1 | awk -F= '/LENGTH/{print $2}'