ffprobe Linux命令的使用实例

1,092 阅读3分钟

"ffprobe "是一个Linux命令,用于从多媒体文件中检索信息。然后该命令以机器或人类可读的格式显示输出。通过ffprobe,你可以收集信息,如多媒体流的大小、比特率、高度、宽度、编解码器和像素格式。Ffprobe是你视频处理工具包中的一个必备工具。

你可以将ffprobe作为一个独立的应用程序使用,或者与不同的文本过滤器一起使用,以进行高级处理,如绘图和统计处理。

你可以用不同的选项来使用ffprobe。在这篇文章中,你将学习ffprobe的一些常见使用例子,以提高你的视频分析和信息提取技能。让我们开始吧!"

开始使用ffprobe

你可以使用Linux上的软件包管理器来安装ffprobe。你需要安装ffmpeg,然后用下面的命令来安装ffprobe。

$ sudo apt-get install ffmpeg


为了验证安装情况,在终端上输入ffmpeg命令。它应该显示已安装的ffmpeg的配置和版本。

ffprobe的基本使用例子

1.获取文件属性

你可以对多媒体文件使用ffprobe来检索它的所有细节。在这个例子中,我们将使用一个下载的视频,samplevid.mp4,位于我们的Videos目录中。

该命令将是。

$ ffprobe samplevid.mp4

显示的输出是:

你可以注意到,该输出有太多的 "噪音"。你可以使用**-hide_banner** 选项过滤信息并隐藏横幅,只显示需要的信息

$ ffprobe \-hide\_banner samplevid.mp4

没有横幅的输出看起来就像下面这个。

输出的主要细节包括:

  • 我们的samplevid.mp4使用的是 "mov,mp4,m4a,3gp,3g2,mj2 "格式。
  • 你还可以看到该文件的创建日期和时间,即2020-09-12。
  • 持续时间代表视频文件的长度及其相应的比特率234 kb/s
  • 我们还可以注意到,该多媒体文件有两个流,视频和音频。

2. ffprobe流指定器

大多数多媒体文件都包含音频和视频流,有些甚至是多语言的。使用ffprobe,你可以选择只检查一个特定的流。

当你打印视频文件的输出时,会显示这两个流。流#0:0 代表视频流,流#0:1 代表音频流。

在ffprobe中,为了指定使用哪个流,增加了select_streams 选项。使用'v'或'V'来选择视频,'a'来选择音频。对于字幕,使用's'。

在我们的例子中,要检查音频流并获得其比特率,请使用命令。

$ ffprobe \-hide\_banner\-vpanic -select\_streams a:0\-show\_entriesstream=bit\_rate samplevid.mp4

-v panic 或-v error有助于减少显示的输出。

要检查视频流,用v代替a,如下所示。

$ ffprobe \-hide\_banner\-vpanic -select\_streams v:0\-show\_entriesstream=bit\_rate samplevid.mp4

3.隐藏流指定器中的[STREAM]和[/STREAM]。

为了摆脱围绕着流指定器结果的恼人的包装器,你需要添加 -ofnoprint_wrappers=1

之前显示音频流的命令可以改写为。

$ ffprobe \-hide\_banner\-vpanic -select\_streams a:0\-show\_entriesstream=bit\_rate \-of default=noprint\_wrappers=1 samplevid.mp4

新的输出将是

4.获取每个流的信息

如果你需要访问给定多媒体文件的所有流的信息,使用**-show_streams** 指定符。

$ ffprobe \-hide\_banner\-vpanic -select\_streams v:0\-show\_streams samplevid.mp4

你可以从输出中查看许多细节,包括尺寸、轮廓、像素格式、比特率、帧率、高度等。

5.获取容器格式的细节

要获得容器格式的细节,可以使用**-show_format**

$ ffprobe \-hide\_banner\-vpanic -select\_streams v:0\-show\_format samplevid.mp4

容器的细节,包括比特率、大小和标签,将被显示出来,如图所示。

6.获取每个数据包的信息

对于一个视频文件,你可以使用**-show_packets** 指定符获得每个数据包的细节。

$ ffprobe \-hide\_banner\-vpanic -select\_streams v:0\-show\_packets samplevid.mp4

输出显示大小、持续时间和收敛的细节,在[PACKET][/PACKET]之间围起来。

7.获取每一帧的细节

一段视频有许多帧,我们可以用show_frames 提取帧的信息,如高度、图片类型、时间戳和色彩空间**。** 帧有大量的信息,但它们是有帮助的。

$ ffprobe \-hide\_banner\-vpanic -select\_streams v:0\-show\_frames samplevid.mp4

每一帧的输出将被括在[FRAME]和[/FRAME]中。

8. ffprobe输出格式

幸运的是,ffprobe允许你选择所需的输出格式,如CSV、JSON和XML格式,使用**-print_format **。

我们可以很容易地选择使用上述例子来显示输出的格式。例如,要显示不同格式的容器的格式,请看下面的例子。

要使用CSV

$ ffprobe \-hide\_banner\-vpanic -select\_streams v:0\-print\_format csv -show\_format samplevid.mp4

要使用JSON

$ ffprobe \-hide\_banner\-vpanic -select\_streams v:0\-print\_format json -show\_format samplevid.mp4

要使用XML

$ ffprobe \-hide\_banner\-vpanic -select\_streams v:0\-print\_format xml -show\_format samplevid.mp4

要使用ini

$ ffprobe \-hide\_banner\-vpanic -select\_streams v:0\-print\_format ini -show\_format samplevid.mp4

9.从流中提取特定的细节

使用ffprobe,可以获取特定的细节,如宽度、高度、PTS(图片时间戳)、持续时间等。

获取比特率

视频的比特率可以用stream=bit_rate 指定器来提取。在这种情况下,我们将以JSON格式打印。

$ ffprobe \-hide\_banner\-vpanic -select\_streams v:0\-print\_format json -show\_entriesstream=bit\_rate samplevid.mp4

要获得图片类型

每一帧都有一个不同的图片类型。你可以使用 frame=pict_type 指定器显示任何格式的图片类型。我们将使用下面的命令显示图片类型的平面格式。

$ ffprobe \-hide\_banner\-vpanic -select\_streams v:0\-print\_format flat -show\_entriesframe=pict\_type samplevid.mp4

要获得视频的持续时间

对于这一点,使用下面的stream=duration 指定符来获得JSON中的持续时间。

$ ffprobe \-hide\_banner\-vpanic -select\_streams v:0\-print\_format json -show\_entriesstream=duration samplevid.mp4

要获得宽度和高度

使用ffprobe,你可以提取任何格式的视频的宽度和高度,如图所示。

使用stream=width,height 指定器。

$ ffprobe \-hide\_banner\-vpanic -select\_streams v:0\-print\_format json -show\_entriesstream=width,height samplevid.mp4

为了获得PTS

packet=pts_time 指定器将获得所有数据包的PTS。

$ ffprobe \-hide\_banner\-vpanic -select\_streams v:0\-print\_format flat -show\_entriespacket=pts\_time samplevid.mp4

总结

ffprobe是一个强大的Linux工具,而我们在这里所涉及的只是一个表面的东西。有很多指定器可以与ffprobe结合起来实现功能。然而,我们已经触及了常见的一次,但你可以查看ffprobe文档来了解它。祝你在使用ffprobe时愉快!