FFmpeg之三大工具介绍
  TTGEfHowA3iM 2023年11月02日 60 0


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


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

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

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

FFmpeg之三大工具介绍_音视频


如上图示:

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

实例如下

在此文件夹下按住​​Shift​​​点击​​鼠标右键​​​,选择:​​在此处打开命令行窗口​​:

FFmpeg之三大工具介绍_音视频_02


FFmpeg之三大工具介绍_音视频_03

输入如下命令:

ffmpeg -i test.mp4 test_out.avi

FFmpeg之三大工具介绍_封装_04


FFmpeg之三大工具介绍_数据_05


二、FFmpeg的播放器–ffplay.exe

FFmpeg不但可以提供转码、转封装等功能,同时还提供了播放器相关功能,使用FFmpeg的​​avformat​​​与​​avcodec​​​,可以播放各种媒体文件或者流。如果想要使用​​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

FFmpeg之三大工具介绍_音视频_06

[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来进行流的索引信息的区分。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: FFmpeg简介 下一篇: FFmpeg三大工具--ffmpeg
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
TTGEfHowA3iM