Using ffmpeg to get video info - why do I need to specify an output file?

I'm using ffmpeg to get info about a video file and I don't want to save the info into a file. ffmpeg is returning all the video info, but it's returning as an error because I'm not specifying an output file. The command I'm using is:

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

The error I get is "At least one output file must be specified"

I'm calling this in ColdFusion using <cfexecute>, and the output is being stored in a local variable, which is why I don't want to specify a file... I just don't need to store this in a file.

If it makes any difference, I'm running this on Windows.


It's giving an error because FFmpeg requires that an output file be specified. Using it just to get information about a file isn't its intended use.

Option 1: Ignore the error. FFmpeg prints the file information first, so you can simply get the information you need and ignore the error.

Option 2: Use ffprobe instead. FFprobe is another tool usually packaged with FFmpeg that's designed for getting information about media files. It can even output the information in a variety of easily parsed formats so you don't have to mess around parsing FFmpeg's output.


I ended up using ffprobe instead. Here's my ColdFusion test code... keep in mind that this could be written better. At this point, I'm only interested in width/height/duration.

<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>