ffmpeg -i file.mp4 2>&1 | grep -o '[0-9]\{1,3\}\sfps'
示例输出:
25 fps
... | sed 's/\sfps//'
,只保留25
,并将其存储到变量中,因此您可以使用该变量转换视频,例如:ffmpeg -r $originalFps
。
grep -o
将提取匹配项,而不是包含匹配项的整行。
[0-9]\{1,3\}
将匹配1至3个数字。
\sfps
将匹配一个空格后跟'fps'。grep
处理ffmpeg
的输出。我尝试了带和不带2>&1
的命令。就好像我从ffmpeg
在终端上得到的输出不能被管道传输(但是其他命令却可以)。 - Amelio Vazquez-Reina2>&1
的目的是什么?我以前见过它。你知道为什么ffmpeg
需要它吗? - Amelio Vazquez-Reinastderr
,因此您需要重定向,或者您可以使用|&
代替2>&1
。 - Eric Fortisffmpeg
(版本SVN-r14102)不会在syntax # fps
的子字符串中输出帧速率。相反,我得到的是类似于29.92 tb(r)
的东西。尽管如此,像你所指出的那样,通过将输出传输到grep中进行解析仍然可以用于此操作。顺便问一句,为什么我需要在正则表达式中使用\s
?我只需使用grep -o '[0-9.]\{1,5\} tb(r)'
(即在正则表达式中使用实际空格)即可获取输出。 - Amelio Vazquez-Reina