Using ffmpeg to get video info - why do I need to specify an output file?
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>
Very late, but hopefully it can help someone if he doesn't want to use ffprobe
(see @blahdiblah answer).
You can use Null
with ffmpeg
as stated in the documentation:
ffmpeg -i C:\Test\3FA8D0E6-BD61-D160-98BB41304D63FAE3.mp4 -f null -
It is possible to do it with ffmpeg and if you don't want to save the info into a file you just could send it to /dev/null
in *nix systems.
ffmpeg -i file.mp4 -hide_banner -f null /dev/null
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.