Contents

在Linux中检索命令行上的视频信息

1. 概述

我们有时需要从视频文件中检索重要信息。这些信息可以包括长度、比特率、分辨率、音频质量、字幕等。幸运的是,Linux 有许多工具可以在命令行上检索所有这些信息,甚至可以编辑视频文件。

在本教程中,我们将介绍一些可用于从输入视频文件中检索重要信息的工具。

2. 设置

要测试这些方法,我们首先需要有一个可以使用的视频文件。

让我们下载 一个简短的示例 mp4 视频文件:

$ wget https://download.samplelib.com/mp4/sample-5s.mp4
...truncated...
Length: 2848208 (2.7M)
Saving to: ‘sample-5s.mp4’
...truncated....

我们使用wget  命令下载了一个名为sample-5s.mp4 的视频文件,其大小为 2.7MB。

3. 使用 MediaInfo

MediaInfo 是最强大的 Linux 实用程序之一,用于显示有关音频或视频文件的信息。

它提供有关输入音频或视频的技术和标签信息。这包括音频类型、视频类型、字幕、章节数等信息。它还支持多种音频和视频格式。

首先,让我们下载并安装 MediaInfo:

$ sudo apt install mediainfo

然后,我们可以使用它来获取有关sample-5s.mp4文件的信息:

$ mediainfo sample-5s.mp4 
General
Complete name                            : sample-5s.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 2.72 MiB
Duration                                 : 5 s 759 ms
Overall bit rate                         : 3 957 kb/s
Writing application                      : Lavf58.44.100
...truncated...

我们可以使用*–full-scan*选项获得更详细的描述:

$ mediainfo --full-scan sample-5s.mp4

我们甚至可以查询有关音频或视频文件的特定信息。让我们只显示sample-5.mp4文件的持续时间:

$ mediainfo --Inform="Video;%Duration%" sample-5s.mp4 
5700

在这里,我们使用*–Inform*选项来指定我们想要检索的信息。返回的 5700 的值以毫秒为单位,即 5.7 秒。

4. 使用FFprobe

**FFprobe 是一个 Linux 实用程序,它从多媒体流中收集信息并以人类可读或机器可读的格式输出。**它用于收集高度、宽度、比特率、编解码器、像素格式、大小等信息。

我们可以将 FFprobe 用作独立程序,也可以将其与文本过滤器结合使用,这样我们就可以进行更复杂的处理,例如统计绘图和处理。

我们先通过包管理器安装FFprobe:

$ sudo apt install ffmpeg

然后,我们可以使用它来显示有关sample-5s.mp4文件的信息:

$ ffprobe sample-5s.mp4 
...truncated...
  libpostproc    55.  9.100 / 55.  9.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'sample-5s.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.44.100
  Duration: 00:00:05.76, start: 0.000000, bitrate: 3956 kb/s
  Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 3857 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : ISO Media file produced by Google Inc. Created on: 08/17/2020.
      vendor_id       : [0][0][0][0]
  Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
    Metadata:
      handler_name    : ISO Media file produced by Google Inc. Created on: 08/17/2020.
      vendor_id       : [0][0][0][0]

或者,我们可以使用*-hide-banner*选项来修剪结果并仅显示有关输入文件的信息:

$ ffprobe sample-5s.mp4 -hide_banner

我们还可以使用选项指定我们想要显示的信息。让我们使用*-show_format*选项来显示有关文件格式的更多信息:

$ ffprobe sample-5s.mp4 -show_format -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'sample-5s.mp4':
  ...Truncated...
[FORMAT]
filename=sample-5s.mp4
nb_streams=2
nb_programs=0
format_name=mov,mp4,m4a,3gp,3g2,mj2
format_long_name=QuickTime / MOV
start_time=0.000000
duration=5.759000
size=2848208
bit_rate=3956531
probe_score=100
TAG:major_brand=isom
TAG:minor_version=512
TAG:compatible_brands=isomiso2avc1mp41
TAG:encoder=Lavf58.44.100
[/FORMAT]

5. 使用 ExifTool

**ExifTool 是一个开源应用程序,可读取、写入和更新不同类型文件的元数据,例如音频、视频、图像、PDF 等。**元数据包括文件大小、文件类型、创建日期等信息。

它可以作为 Perl 库和命令行应用程序使用,使其独立于平台。

让我们首先安装 ExifTool:

$ sudo apt install libimage-exiftool-perl

安装后,我们可以使用它来获取有关sample-5s.mp4的信息:

$ exiftool sample-5s.mp4 
ExifTool Version Number         : 12.16
File Name                       : sample-5s.mp4
Directory                       : .
File Size                       : 2.7 MiB
File Modification Date/Time     : 2020:08:23 22:31:05+03:00
File Access Date/Time           : 2022:04:17 07:53:51+03:00
File Inode Change Date/Time     : 2022:04:17 07:53:50+03:00
File Permissions                : rw-rw-r--
File Type                       : MP4
File Type Extension             : mp4
MIME Type                       : video/mp4
Major Brand                     : MP4  Base Media v1 [IS0 14496-12:2003]
Minor Version                   : 0.2.0
Compatible Brands               : isom, iso2, avc1, mp41
Media Data Size                 : 2840535

我们还可以通过使用它的选项来修剪我们获得的信息。例如,下面是使用*-common*选项的示例:

$ exiftool -common sample-5s.mp4 
File Name                       : sample-5s.mp4
File Size                       : 2.7 MiB
Image Size                      : 1920x1080

为了更准确地了解我们想要检索的信息,我们可以在输入文件之前指定元数据属性名称:

$ exiftool -FileType sample-5s.mp4 
File Type                       : MP4

在这里,我们指定了元数据属性*-FileType*,它检索有关文件类型的信息。

6. 使用 MPlayer

Mplayer **是一个开源的跨平台媒体播放器,可以从它的 GUI 和命令行播放音频和视频文件。**它是 Linux 中最古老的媒体播放器之一,支持多种音频和视频文件格式、字幕类型和编解码器。

首先,我们需要安装 Mplayer:

$ sudo apt install mplayer

然后,我们可以使用它来显示有关我们的示例文件的信息:

$ mplayer -identify -frames 0 sample-5s.mp4 
...truncated...
ID_VIDEO_ID=0
[lavf] stream 0: video (h264), -vid 0
ID_AUDIO_ID=0
ID_AID_0_LANG=eng
[lavf] stream 1: audio (aac), -aid 0, -alang eng
VIDEO:  [H264]  1920x1080  24bpp  30.000 fps  3857.4 kbps (470.9 kbyte/s)
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
libavcodec version 58.134.100 (external)
Mismatching header version 58.91.100
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
ID_VIDEO_CODEC=ffh264
ID_FILENAME=sample-5s.mp4
...truncated...

我们使用*-identify*选项来检索有关输入文件的信息。

默认情况下,Mplayer 播放任何输入的音频或视频文件。我们正在传递*-frames*选项并将其设置为 0 以防止视频播放。