获取 ffmpeg 版本号

获取 ffmpeg 版本号

我正在尝试以可靠的方式从 ffmpeg 获取版本号,希望无需解析字符串。

我可以解析的输出ffmpeg -version,但是我无法保证该字符串在不久的将来不会改变。

$ ffmpeg -version
ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
[...]

我对一种稍微更具程序化的方式来获取版本号感兴趣,比如告诉 ffmpeg 输出 JSON 或者只输出版本号,而不需要我从文本主体中提取它。

答案1

如果你有配套ffprobe工具,你可以运行

ffprobe -v 0 -of default=nw=1:nk=1 -show_program_version | head -1

它将仅打印版本字符串。

例如,

N-100221-g18befac5da

您还可以发出 JSON。

ffprobe -v 0 -of json

给出

{
    "program_version": {
        "version": "N-100221-g18befac5da",
        ...
    }
}

二进制ffmpeg文件本身不提供这些输出。

请注意,版本字符串格式和组成可能有所不同 - 它不是标准化的,可以由构建器添加自定义字符串。但一般来说,git 构建将有一个提交哈希(带或不带前缀g),而发布构建将有一个形式为 的序列x.y.z。请参阅我的 Windows 构建,了解其他形式的几个示例 - 我还包含了提交日期。

上面例子中的计数N是从构建二进制文件时开始的主分支的提交计数。

答案2

基于这个 Stack Overflow 上的答案,这应该有效:

ffmpeg -version | sed -n "s/ffmpeg version \([-0-9.]*\).*/\1/p;"

在 macOS 上通过 Homebrew 安装的 FFmpeg 上进行测试,得到以下输出:

4.3.1

在查看了下面评论中留下的有用反馈后,我认为这可能是一个更好的面向未来的解决方案:

ffmpeg -version | awk -F 'ffmpeg version' '{print $2}' | awk 'NR==1{print $1}'

原因是上面的 Sed 命令主要寻找major...版本号,并且会排除非传统版本号,例如夜间构建格式minor等。patchN-100221-g18befac5da

可以通过运行输出以下命令进行测试4.3.1

echo 'ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers' | awk -F 'ffmpeg version' '{print $2}' | awk 'NR==1{print $1}'

这个命令处理那些夜间构建的“数字”;它将输出N-100221-g18befac5da

echo 'ffmpeg version N-100221-g18befac5da Copyright (c) 2000-2020 the FFmpeg developers' | awk -F 'ffmpeg version' '{print $2}' | awk 'NR==1{print $1}'

因此,直到 FFmpeg 允许直接从二进制文件本身清晰地输出版本号之前,某些命令行抓取似乎是最好的方法......就目前而言!

相关内容