par*_*gar 6 ffmpeg mediainfo ffprobe
我想使用 ffprobe 找出视频文件的确切格式/容器,但我无法到达它的“确切”部分。
当我运行此示例命令时:
ffprobe -hide_banner -loglevel fatal -show_error -show_format -print_format json INPUT
我收到以下输出:
{
"format": {
"filename": "INPUT",
"nb_streams": 2,
"nb_programs": 0,
"format_name": "matroska,webm",
"format_long_name": "Matroska / WebM",
"start_time": "0.000000",
"duration": "2.969000",
"size": "2376430",
"bit_rate": "6403314",
"probe_score": 100,
"tags": {
"COM.ANDROID.VERSION": "9",
"MAJOR_BRAND": "mp42",
"MINOR_VERSION": "0",
"COMPATIBLE_BRANDS": "isommp42",
"COM.ANDROID.CAPTURE.FPS": "30.000000",
"ENCODER": "Lavf57.83.100"
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如您可能已经理解的, ffprobe 给出了value内的格式列表format_name。对于 mp4、mkv、webm 等多种视频格式来说都是如此。
然而,mediainfo能够找出格式的确切类型Format,即它输出如下所示的单个:
命令:mediainfo INPUT
输出:
General
Unique ID : 41836023869371892704046005573890259380 (0x1F79533A912A2117C3D4CEB704EAB9B4)
Complete name : intermediate.mkv
Format : Matroska
Format version : Version 4 / Version 2
File size : 2.27 MiB
Duration : 2 s 969 ms
Overall bit rate mode : Variable
Overall bit rate : 6 403 kb/s
Writing application : Lavf57.83.100
Writing library : Lavf57.83.100
ErrorDetectionType : Per level 1
COM.ANDROID.CAPTURE.FPS : 30.000000
COM.ANDROID.VERSION : 9
Run Code Online (Sandbox Code Playgroud)
*输出被截断以整理信息
谁能指导我如何使用 ffprobe 本身来实现这一目标?
他们都为您提供完全相同的信息。您遇到的挑战与 ffmpeg 的怪异有关。
在我看来,您遇到的问题可能是命名法问题。您提到的 ffmpeg 输出流确实包含 ffmpeg 对文件容器格式的评估。
“format_name”:“matroska,webm”,
如果您只想要那条信息,可以使用如下命令(在 Linux BaSH/SHell 中显示):
container=$(ffprobe -v quiet -show_entries format=format_name -of default=noprint_wrappers=1:nokey=1 "$filename") # identify file container type (format)
Run Code Online (Sandbox Code Playgroud)
在你的例子中会返回
# container="matroska,webm"
Run Code Online (Sandbox Code Playgroud)
ffmpeg 可能会非常令人困惑。例如,它将文件容器称为“格式”,但如果您编码到文件容器中,它会将它们称为“复用器”
进一步考虑 ffmpeg 的逻辑并将其与 mediainfo 进行比较,在您的示例中,它们告诉您同样的事情。最重要的是 ffmpeg 的特性。ffmpeg 将 Matroska 文件容器报告为“matroska,webm”,这与 ffmpeg 引用其 Matroska 解码器(解复用器)的方式相同。然而,如果您正在对 Matroska 容器进行编码,则 ffmpeg 将相应的编码器(复用器)简单地称为“matroska” - 与 mediainfo 报告相同容器类型的方式一致。
我希望这对您有所帮助,而不是让您更加困惑。最重要的是 ffmpeg 和 mediainfo 都为您提供完全相同的信息。它们的区别在于 ffmpeg 更细粒度。它将文件的读取报告为其容器的解复用器/解码器类型。您的示例被 ffmpeg 报告为“matroska,webm”,因为 ffmpeg 对 Matroska 和 WebM 文件使用相同的解码器。Mediainfo OTOH 更简单。它知道容器类型是 Matroska(WebM 只是 Matroska 容器的一种形式),因此 mediainfo 将其简单地报告为 Matroska 文件(正如我所说,这很简单)。
ffmpeg 更具体;mediainfo 更通用。
| 归档时间: |
|
| 查看次数: |
6182 次 |
| 最近记录: |