我发现每个使用 ffmpeg 获取视频时长的答案都包含grep
,但cmd
本身并没有。
我知道有一个“Grep for Windows”的东西,但我宁愿使用命令行附带的功能。
所以当我这样做ffmpeg -i input
时
Input #0, flv, from 'vid_test001.flv':
Metadata:
creationdate : Fri Sep 19 15:58:17
Duration: 00:00:12.44, start: 0.000000, bitrate: 806 kb/s
Stream #0:0: Video: flv1, yuv420p, 320x240, 1k tbr, 1k tbn, 1k tbc
Stream #0:1: Audio: nellymoser, 22050 Hz, mono, flt
我想从中获取持续时间,在本例中为“00:00:12.44”
答案1
ffmpeg -i "inputFile" 2>&1 | for /f "tokens=2 delims=, " %a in ('findstr /r /c:"^ *Duration:"') do echo %a
ffmpeg
对输入文件执行,将 stderr(ffmpeg 默认将其信息写入其中)的输出发送到标准输出。使用 过滤列表以findstr
检索以空格开头后跟 的行Duration:
。对于找到的每一行,空格和逗号被视为字段分隔符,并请求行中的第二个标记,即标签后的时间。此值被检索到可替换参数Duration:
中,并回显到控制台。for
%a
要从批处理文件中使用,请转义百分号,并将其替换%
为%%
答案2
如果您不反对使用 Powershell(Windows 最新版本的标准),您可以使用该Select-String
命令。
这是另一个超级用户提问的一篇很棒的帖子 -关联
基本上,您可以获取命令的输出并将结果通过管道传输到 select-string。