使用ffmpeg获取视频信息 - 为什么我需要指定输出文件?

时间:2012-07-09 17:41:22

标签: coldfusion ffmpeg

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

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

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

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

如果它有任何区别,我在Windows上运行它。

4 个答案:

答案 0 :(得分:42)

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

选项1:忽略错误。 FFmpeg首先打印文件信息,这样您就可以获得所需的信息并忽略错误。

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

答案 1 :(得分:2)

我最终使用的是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>

答案 2 :(得分:1)

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

您可以将Nullffmpeg一起使用,如in the documentation所述:

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

答案 3 :(得分:0)

使用ffmpeg可以做到这一点,如果您不想将信息保存到文件中,则可以将其发送到* nix系统中的df <- structure(list(V1 = c("NM_001104633|0|Sema3d|-", "NM_0011042|0|XYZ|-", "NM_0956|0|ghd|+")), class = "data.frame", row.names = c(NA, -3L))

/dev/null