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
直接。无需sed
,grep
等有几个“持续时间”,你可以获取(取决于您的输入)。
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 秒。该应用程序似乎为您提供了准确的值。
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 进一步处理。
mediainfo --Output='General;%Duration%' file.flv
Run Code Online (Sandbox Code Playgroud)
这将以毫秒为单位输出持续时间作为单个整数值。不需要 grep/cut/sed/...
归档时间: |
|
查看次数: |
197267 次 |
最近记录: |