68

我正在使用 ffmpeg 获取有关视频文件的信息,并且我不想将信息保存到文件中。ffmpeg 正在返回所有视频信息,但它作为错误返回,因为我没有指定输出文件。我正在使用的命令是:

 ffmpeg -i C:\Test\3FA8D0E6-BD61-D160-98BB41304D63FAE3.mp4

我得到的错误是“必须指定至少一个输出文件”

我在 ColdFusion 中使用 调用它<cfexecute>,并且输出存储在一个局部变量中,这就是我不想指定文件的原因......我只是不需要将它存储在文件中。

如果有什么不同,我在 Windows 上运行它。

4

4 回答 4

120

它给出了一个错误,因为 FFmpeg 要求指定一个输出文件。仅使用它来获取有关文件的信息不是其预期用途。

选项 1:忽略错误。 FFmpeg首先打印文件信息,所以你可以简单的获取你需要的信息而忽略错误。

选项 2:改用ffprobe FFprobe 是另一种通常与 FFmpeg 一起打包的工具,旨在获取有关媒体文件的信息。它甚至可以以各种易于解析的格式输出信息,因此您不必在解析 FFmpeg 的输出时搞砸。

于 2012-07-09T18:17:32.233 回答
7

我最终改用 ffprobe 。这是我的 ColdFusion 测试代码......请记住,这可以写得更好。在这一点上,我只对宽度/高度/持续时间感兴趣。

<cfset fsVideoFile = "C:\videos\test.mp4">
<cfset width = 270>
<cfset height = 480>
<cfset duration = 0>

<cfexecute
   name="ffmpeg\bin\ffprobe.exe"
   arguments="#fsVideoFile# -v quiet -print_format json -show_format -show_streams"
   timeout="60"
   variable="jsonInfo"
   errorVariable="errorOut" />

<cfif IsJSON (jsonInfo)>
   <cfset videoInfo = DeserializeJSON (jsonInfo)>
   <cfdump var="#videoInfo#">
   <cfset duration = videoInfo.format.duration>
   <cfloop array="#videoInfo.streams#" index="stream">
      <cfif stream.codec_type EQ "video">
         <cfset width = stream.width>
         <cfset height = stream.height>
         <cfbreak />
      </cfif>
   </cfloop>
</cfif>
于 2012-07-09T18:29:51.517 回答
7

很晚了,但希望如果他不想使用它可以帮助某人ffprobe(请参阅@blahdiblah answer)。

您可以按照文档中的说明使用Nullwith :ffmpeg

ffmpeg -i C:\Test\3FA8D0E6-BD61-D160-98BB41304D63FAE3.mp4 -f null -
于 2020-09-19T21:13:32.127 回答
2

可以使用 ffmpeg 来完成,如果您不想将信息保存到文件中,您可以将其发送到/dev/null*nix 系统中。

ffmpeg -i file.mp4 -hide_banner -f null /dev/null
于 2019-08-21T23:40:20.867 回答