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

问题描述 投票:0回答:4

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

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

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

我使用

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

如果有什么区别,我在 Windows 上运行它。

ffmpeg
4个回答
188
投票

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

选项1:忽略错误。FFmpeg会先打印文件信息,这样你就可以简单地获取你需要的信息并忽略错误。

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


29
投票

很晚了,但希望它可以帮助那些不想使用的人

ffprobe
(参见@blahdiblah回答)。

您可以将

Null
ffmpeg
一起使用,如文档中所述:

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

9
投票
我最终使用 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>
    

5
投票
可以使用 ffmpeg 来完成此操作,如果您不想将信息保存到文件中,您只需将其发送到 *nix 系统中的

/dev/null

ffmpeg -i file.mp4 -hide_banner -f null /dev/null
    
© www.soinside.com 2019 - 2024. All rights reserved.