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

use*_*132 107 time clock ffmpeg awk

如何以秒为单位获得视频时长?

我试过的:

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
Run Code Online (Sandbox Code Playgroud)

这是什么接近,但它不是那么准确,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
Run Code Online (Sandbox Code Playgroud)

llo*_*gan 166

只要使用ffprobe直接。无需sedgrep等有几个“持续时间”,你可以获取(取决于您的输入)。

格式(容器)持续时间

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
Run Code Online (Sandbox Code Playgroud)

结果:

30.024000
Run Code Online (Sandbox Code Playgroud)

添加该-sexagesimal选项将使用 HOURS:MM:SS.MICROSECONDS 时间单位格式:

0:00:30.024000
Run Code Online (Sandbox Code Playgroud)

视频流时长

如果您想要特定视频或音频流的持续时间:

ffprobe -v error -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
Run Code Online (Sandbox Code Playgroud)

结果:

30.000000
Run Code Online (Sandbox Code Playgroud)

以上命令来自FFmpeg Wiki: FFprobe Tips

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
Run Code Online (Sandbox Code Playgroud)

在这个例子中time=00:01:03.48是持续时间。

这可能需要很长时间,具体取决于您的输入文件。


Rob*_*vey 56

要获得分钟数,您必须将 2383 秒除以 60。

39.7167
Run Code Online (Sandbox Code Playgroud)

然后将小数部分 .7167 乘以 60 得到剩余的秒数。

43.002
Run Code Online (Sandbox Code Playgroud)

所以是 39 分 43 秒。该应用程序似乎为您提供了准确的值。

  • 最佳答案,因为您确定了给定解决方案中的问题。大多数人会建议一个新的解决方案。 (2认同)

evi*_*oup 36

如果你有ffmpeg,你还应该有ffprobe

ffprobe -i input.file -show_format | grep duration
ffprobe -i input.file -show_format -v quiet | sed -n 's/duration=//p'
Run Code Online (Sandbox Code Playgroud)

这也将给出几分之一秒的时间,如果这是一个问题,您可以使用 sed 进一步处理。


Jos*_*ner 6

mediainfo --Output='General;%Duration%' file.flv
Run Code Online (Sandbox Code Playgroud)

这将以毫秒为单位输出持续时间作为单个整数值。不需要 grep/cut/sed/...