格式(容器)持续时间

格式(容器)持续时间

如何获取视频时长(以秒为单位)?

我尝试过的:

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。无需sedgrep等。您可以获得多个“持续时间”(取决于您的输入)。

格式(容器)持续时间

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

相关内容