FFmpeg之三大工具介绍

本文介绍了FFmpeg项目中的三大核心工具:ffmpeg.exe用于音视频编解码,ffplay.exe作为媒体播放器,ffprobe.exe则用于多媒体信息分析。文中详细解释了这些工具的工作流程和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FFmpeg的Static版本的bin文件夹中只有三个.exe文件,分别是: ffmpeg.exeffplay.exeffprobe.exe,这三个是FFmpeg源代码编译后生成的可执行文件,也就是FFmpeg的三大工具,下面对各个工具进行简要的介绍。


一、FFmpeg的编解码工具–ffmpeg.exe

ffmpeg工具主要用于编解码,ffmpeg的主要工作流程相对比较简单,如下所示:

  • 读取输入源
  • 进行音视频的解封装
  • 解码每一帧音视频数据
  • 编码每一帧音视频数据
  • 进行音视频的重写封装
  • 输出到目标

在这里插入图片描述
如上图示:

  • ffmpeg首先读取输入源,然后通过Demuxer将音视频包进行解封装,这个动作通过调用libavformat中的接口即可实现;
  • 接下来通过Decoder进行解码,将音视频通过Decoder解包称为YUV或者PCM这样的数据,Decoder通过libavcodec中的接口即可实现;
  • 然后通过Encoder将对应的数据进行编码,编码可以通过libavcodec中的接口来实现;
  • 接下来将编码后的音视频数据包通过Muxer进行封装,Muxer封装通过libavformat中的接口即可实现,输出成为输出流;

实例如下

在此文件夹下按住Shift点击鼠标右键,选择:在此处打开命令行窗口
在这里插入图片描述
在这里插入图片描述

输入如下命令:

ffmpeg -i test.mp4 test_out.avi

在这里插入图片描述
在这里插入图片描述


二、FFmpeg的播放器–ffplay.exe

FFmpeg不但可以提供转码、转封装等功能,同时还提供了播放器相关功能,使用FFmpeg的avformatavcodec,可以播放各种媒体文件或者流。如果想要使用ffplay,那么系统首先需要有SDL来进行ffplay的基础支持。

ffplay是FFmepg源代码编译后生成的另一个可执行程序,与ffmpeg在FFmpeg项目中充当的角色基本相同,可以作为测试工具进行使用,ffplay提供了音视频显示和播放相关的图像信息、音频的波形信息等。

注意:有时通过源代码编译生成ffplay不一定能够成功,因为ffplay在旧版本时依赖于SDL-1.2,而ffplay在新版本时依赖于SDL-2.0,需要安装对应的SDL才能生成ffplay


三、FFmpeg的多媒体分析器–ffprobe.exe

ffprobe也是FFmepg源码编译后生成的一个可执行程序。ffprobe是一个非常强大的多媒体分析工具,可以从媒体文件或者媒体流中获得你想要了解的媒体信息,比如音频的参数、视频的参数、媒体容器的参数信息等。

例如它可以帮助分析某个媒体容器中的音频是什么编码格式、视频是什么编码格式,同时还可以得到媒体文件中媒体的总时长、复合码率等信息。

使用ffprobe可以分析媒体文件中每个包的长度、包的类型、帧的信息等。


实例如下

ffprobe --show_streams test_out.avi

在这里插入图片描述

[STREAM]
index=0
codec_name=mpeg4
codec_long_name=MPEG-4 part 2
profile=Simple Profile
codec_type=video
codec_time_base=1/30
codec_tag_string=FMP4
codec_tag=0x34504d46
width=1920
height=1080
coded_width=1920
coded_height=1080
has_b_frames=0
sample_aspect_ratio=1:1
display_aspect_ratio=16:9
pix_fmt=yuv420p
level=1
color_range=unknown
color_space=unknown
color_transfer=unknown
color_primaries=unknown
chroma_location=left
field_order=unknown
timecode=N/A
refs=1
quarter_sample=false
divx_packed=false
id=N/A
r_frame_rate=30/1
avg_frame_rate=30/1
time_base=1/30
start_pts=0
start_time=0.000000
duration_ts=2415
duration=80.500000
bit_rate=1439035
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=2415
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
[/STREAM]
[STREAM]
index=1
codec_name=mp3
codec_long_name=MP3 (MPEG audio layer 3)
profile=unknown
codec_type=audio
codec_time_base=1/48000
codec_tag_string=U[0][0][0]
codec_tag=0x0055
sample_fmt=s16p
sample_rate=48000
channels=2
channel_layout=stereo
bits_per_sample=0
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=3/125
start_pts=0
start_time=0.000000
duration_ts=3352
duration=80.448000
bit_rate=128038
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=3352
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
[/STREAM]

根据输出内容可以看到,使用ffprobe能够看到AVI文件容器中的流的信息,其中包含了一个视频流,由于该文件中只有视频流,流相关的信息是通过[STREAM] [/STREAM]的方式展现出来的,在[STREAM][/STREAM]之间的信息及即为AVI文件的视频流信息。当视频文件容器中包含音频流与视频流或者更多路流时,会通过[STREAM][/STREAM]进行多个流的分隔,分隔后采用index来进行流的索引信息的区分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝勒里恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值