ffprobe是什么(7 个ffprobe示例教程)

ffprobe是什么

在我的视频处理工具箱里,ffprobe有着非常重要的地位!在FFmpeg库中,ffprobe堪称视频信息提取或视频检测的“瑞士军刀”。

下面是FFmpeg文档对ffprobe的简单描述:ffprobe从多媒体流中收集信息并将它们以人类和机器可读的形式输出。

你可以使用ffprobe输出详细且便捷的视频信息(如pts、dts、帧率和像素格式、图像类型等等)。你也可以使用命令行提取高级信息(编解码器类型、持续时间和视频尺寸)或者数据包的相关信息。

这些优势使ffprobe成为每个视频工程师工具箱里不可或缺的工具。在本文中,我们将学习如何使用ffprobe分析视频和提取视频信息。

ffprobe是什么(7 个ffprobe示例教程)

在哪里获取ffprobe?

你可以在OTTVerse的FFmpeg bulid页面下载ffprobe:

https://ottverse.com/ffmpeg-builds/。下载适用于Windows 64位的FFmpeg静态程序的压缩包,解压缩文件后,你会发现三个可执行文件:ffmpeg、ffprobe和ffplay。你只要打开命令提示符,就可以使用ffprobe。

如果你使用的是Mac,可以通过Homebrew安装ffprobe(和FFmpeg一起安装)。

brew install ffmpeg

而在Linux上,你可以使用操作系统的包管理工具(审校者注:Redhat下面是dnf或者yum,Ubuntu下面是apt)安装FFmpeg,同时也会安装ffprobe。比如,在Ubuntu上:

sudo apt-get install ffmpeg

如何使用ffprobe?

ffprobe的使用非常简单。你只需在命令行上调用它,并指定你要分析的视频。如下所示:


$ ffprobe simpsons_1080p2398_clip.mp4

Output
-------

ffprobe version N-100618-gdb738f51de-gca21cb1e36+2 Copyright (c) 2007-2021 the FFmpeg developers
  built with gcc 10.2.0 (Rev6, Built by MSYS2 project)
  configuration:  --cc='ccache gcc' --cxx='ccache g++' --disable-autodetect --enable-amf --enable-bzlib --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-iconv --enable-lzma --enable-nvenc --enable-zlib --enable-sdl2 --enable-ffnvcodec --enable-nvdec --enable-cuda-llvm --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libdav1d --enable-libaom --disable-debug --enable-fontconfig --enable-libass --enable-libbluray --enable-libfreetype --enable-libmfx --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libwebp --enable-libxml2 --enable-libzimg --enable-libshine --enable-gpl --enable-avisynth --enable-libxvid --enable-libopenmpt --enable-version3 --enable-librav1e --enable-libsrt --enable-libgsm --enable-libvmaf --enable-libsvtav1 --enable-librtmp --enable-mbedtls --extra-cflags=-DLIBTWOLAME_STATIC --extra-libs=-lstdc++ --extra-cflags=-DLIBXML_STATIC --extra-libs=-liconv --disable-w32threads
  libavutil      56. 63.100 / 56. 63.100
  libavcodec     58.116.100 / 58.116.100
  libavformat    58. 65.101 / 58. 65.101
  libavdevice    58. 11.103 / 58. 11.103
  libavfilter     7. 95.100 /  7. 95.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'simpsons_1080p2398_clip.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    title           : The Simpsons Movie - Trailer
    artist          : 20th Century Fox
    date            : 2007
    encoder         : Lavf58.56.100
    genre           : Trailer
  Duration: 00:00:19.99, start: 0.007007, bitrate: 4898 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x800, 5277 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
    Metadata:
      handler_name    : GPAC ISO Video Handler
      vendor_id       : [0][0][0][0]
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 126 kb/s (default)
    Metadata:
      handler_name    : GPAC ISO Audio Handler
      vendor_id       : [0][0][0][0]

从输出中可以看到,ffprobe提供了很多视频高级信息。它告诉你视频包含多少个流、视频流和音频流数量、编解码器细节、帧率和视频持续时间等。

使用ffprobe提取流信息的7个示例

在学习完以上的内容之后,现在让我们看一些使用ffprobe提取信息的示例。

1、使用ffprobe说明符提取视频高度和宽度

为了使用ffprobe提取视频高度和宽度,你需要使用高度和宽度说明符,然后ffprobe便会返回数据。下面是命令行:


# height and width using ffprobe
# output is printed in flat format


ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format flat -select_streams v:0 -show_entries stream=width,height simpsons_1080p2398_clip.mp4


streams.stream.0.width=1920
streams.stream.0.height=800

2、显示所有数据包的PTS

为了提取视频中所有数据包的PTS(Picture TimeStamp,图像时间戳),你需要使用修饰符packet=pts_time ,如下所示:


# PTS of all the packets 


ffprobe -v error -hide_banner -of default=noprint_wrappers=1 -select_streams v:0 -show_entries packet=pts_time simpsons_1080p2398_clip.mp4

pts_time=2.000000
pts_time=2.041708
pts_time=2.208542
pts_time=2.083417
pts_time=2.125125
pts_time=2.166833
pts_time=2.375375
pts_time=2.250250
.
.

3、使用ffprobe查找视频持续时间并以xml格式输出

为了使用ffprobe提取视频持续时间,你需要使用修饰符stream=duration ,如下所示:

# print the duration of the video in XML format

ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format xml -select_streams v:0 -show_entries stream=duration simpsons_1080p2398_clip.mp4

<?xml version="1.0" encoding="UTF-8"?>
<ffprobe>
    <programs>
    </programs>

    <streams>
        <stream duration="18.059708"/>
    </streams>
</ffprobe>

 4、 使用ffprobe输出图像类型

如果你想知道视频每一帧的图像类型,你需要获得帧相关信息。如果你查看了我们之前输出的帧相关信息,你会发现图像类型信息包含在pict_type 中。所以,让我们将它和修饰符frame 一起使用。

# Print the picture types of every frame in the flat format

ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format flat  -select_streams v:0 -show_entries frame=pict_type simpsons_1080p2398_clip.mp4

frames.frame.0.pict_type="I"
frames.frame.1.pict_type="P"
frames.frame.2.pict_type="B"
frames.frame.3.pict_type="B"
frames.frame.4.pict_type="B"
frames.frame.5.pict_type="P"
frames.frame.6.pict_type="B"
frames.frame.7.pict_type="B"
frames.frame.8.pict_type="B"
frames.frame.9.pict_type="P"
frames.frame.10.pict_type="B"
frames.frame.11.pict_type="B"
frames.frame.12.pict_type="P"
frames.frame.13.pict_type="P"
frames.frame.14.pict_type="P"
frames.frame.15.pict_type="P"
frames.frame.16.pict_type="P"
frames.frame.17.pict_type="P"
frames.frame.18.pict_type="P"
frames.frame.19.pict_type="B"
frames.frame.20.pict_type="B"

5、使用ffprobe获取视频码率信息

视频码率输出在流相关信息中。所以,我们需要在命令行中指定 stream=bit_rate 来获取视频码率。

# Extract the bitrate of a video using ffprobe 

ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format flat  -select_streams v:0 -show_entries stream=bit_rate simpsons_1080p2398_clip.mp4

streams.stream.0.bit_rate="5277205"

6、使用ffprobe输出编解码器信息

在哪里获取编解码器细节?在流相关信息中,对吧?所以让我们使用stream说明符获取所有信息。

ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format flat  -select_streams v:0 -show_entries stream=codec_name,codec_long_name,profile,codec_tag_string simpsons_1080p2398_clip.mp4

streams.stream.0.codec_name="h264"
streams.stream.0.codec_long_name="H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"
streams.stream.0.profile="High"
streams.stream.0.codec_tag_string="avc1"

7、使用ffprobe显示像素格式

ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format flat  -select_streams v:0 -show_entries stream=pix_fmt simpsons_1080p2398_clip.mp4

streams.stream.0.pix_fmt="yuv420p"

结论

伙计们,就这些了——我们的 ffprobe 教程已经结束了,我们希望它对您有用。更多关于ffprobe的信息,请参考官方文档

作者:Krishna Rao Vijayanagar,OTTVerse创始人

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论