​外界对于FFmpeg主要有两种使用途径,一种是在命令行运行FFmpeg的可执行程序,该方式适合没什么特殊要求的普通场景;另一种是通过代码调用FFmpeg的动态链接库,由于开发者可以在C代码中编排个性化的逻辑,因此该方式适合厂商专用的特制场景。更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

开源的FFmpeg框架提供了三个可执行程序,分别是ffmpeg、ffplay和ffprobe,下面分别展开详细介绍。

1、ffmpeg程序

ffmpeg程序主要有两个用途,一个是查询FFmpeg的支持信息,另一个是处理音视频的转换操作。关于音视频的转换命令,会在后面的文章中逐一介绍,这里只说明该程序能够查到哪些FFmpeg支持信息。前面在搭建FFmpeg开发环境的时候,提到可以用下面命令查看FFmpeg的版本信息:

ffmpeg -version

除此之外,ffmpeg程序还能查询它所支持的文件格式,比如下面命令可以查看FFmpeg支持的文件格式:

ffmpeg -formats

执行上面命令,控制台回显长长的一串文件格式支持列表,列表开头是下面这样子的。

File formats:
 D. = Demuxing supported
 .E = Muxing supported
 --
 D  3dostr          3DO STR
  E 3g2             3GP2 (3GPP2 file format)
  E 3gp             3GP (3GPP file format)
 D  4xm             4X Technologies

可见FFmpeg支持的文件格式分为两种类型,一种被标记为D,表示支持该类型文件的解析;另一种被标记为E,表示支持该类型文件的封装。继续下拉这一长串文件格式列表,既能找到古老的vcd格式,也能找到风靡一时的rm和flv格式,还能找到mp3和mp4等常见格式,看来FFmpeg真的将音视频格式一网打尽了。

ffmpeg程序能够查看的更多信息见下。由于相关概念比较专业,因此这里不再一一展开,等到后续有涉及时再来讲解。

ffmpeg -codecs:查看支持的编解码器
ffmpeg -formats:查看支持的文件格式
ffmpeg -help:查看命令行的帮助信息
ffmpeg -protocols:查看支持的通讯协议
ffmpeg -version:查看FFmpeg的版本信息

2、ffplay程序

ffplay程序相当于一个播放器,主要用来播放音视频文件。在播放音频时,ffplay不仅会让扬声器放出声音,还会在屏幕展示该音频的波形画面。在播放视频时,ffplay会在屏幕展示连续的视频画面,就像看电影看电视那样。如果视频文件携带有音频数据,那么ffplay会让扬声器同时播放声音。

以播放视频为例,下面命令使用ffplay程序播放名叫fuzhous.mp4的视频文件。

ffplay fuzhous.mp4

执行上面命令,控制台一边弹出视频播放器窗口如下图所示,一边回显以下的输入文件信息。

​编辑

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'fuzhous.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf59.34.102
  Duration: 00:00:19.52, start: 0.000000, bitrate: 288 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 480x270 [SAR 1:1 DAR 16:9], 285 kb/s, 25 fps, 25 tbr, 12800 tbn (default)

根据以上的文件信息,可知该视频持续时间为19.52秒,视频编码器采用h264,视频分辨率为480x270,fps帧率为每秒25帧。

再来看看播放音频,下面命令表示使用ffplay程序播放名叫ships.mp3的音频文件。

ffplay ships.mp3

执行上面命令,控制台一边弹出音频波形窗口如下图所示,一边回显以下的输入文件信息。

Input #0, mp3, from 'ships.mp3':   0KB vq=    0KB sq=    0B f=0/0
  Metadata:
    title           : 渔舟唱晚
    artist          : 中国十大古典名曲
    genre           : Other
    encoder         : Lavf59.27.100
  Duration: 00:03:37.91, start: 0.025057, bitrate: 128 kb/s
  Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s

根据以上的文件信息,可知晓该音频的标题和演唱者,以及音频的持续时间为3分37.91秒,音频编码器采用mp3,采样频率为44100赫兹。

ffplay程序的更多命令行参数可通过下面命令查看,这里不再一一展开了。

ffplay -help

3、ffprobe程序

ffprobe程序是一个多媒体分析工具,它既能分析音视频的文件参数、容器参数等信息,也能分析音视频文件中每个数据包的大小、类型、编解码器等信息。

以查看文件参数为例,下面命令表示使用ffprobe查看视频文件2018.mp4的格式信息。

ffprobe -show_format 2018.mp4

执行上面命令,控制台回显如下的文件格式信息,斜杆后面是笔者添加的说明注释。

[FORMAT]
filename=2018.mp4    // 文件名
nb_streams=2    // 流的数量。为2表示包含视频流和音频流
nb_programs=0
format_name=mov,mp4,m4a,3gp,3g2,mj2    // 格式名称
format_long_name=QuickTime / MOV    // 完整的格式名称
start_time=0.000000    // 开始时间,单位秒
duration=253.332993    // 结束时间,单位秒
size=42853286    // 文件大小,单位字节
bit_rate=1353263    // 比特率,即每秒传输的比特数量(1个字节有8个比特)
probe_score=100
[/FORMAT]

因为ffprobe程序返回的文件信息直接显示在控制台,密密麻麻令人看得眼花缭乱,所以实际上很少使用ffprobe分析音视频,而是采用第三方专业的桌面软件加以分析,后面讲到相关格式时再介绍这些软件。更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

FFmpeg开发笔记(三)FFmpeg的可执行程序介绍的更多相关文章

  1. FFmpeg开发笔记(三):ffmpeg介绍、windows编译以及开发环境搭建

    前言   本篇章是对之前windows环境的补充,之前windows的是无需进行编译的,此篇使用源码进行编译,版本就使用3.4.8.   FFmpeg简介   FFmpeg是领先的多媒体框架,能够解码 ...

  2. FFmpeg开发笔记(四):ffmpeg解码的基本流程详解

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  3. FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放

    前言   ffmpeg播放rtsp网络流和摄像头流.   Demo   使用ffmpeg播放局域网rtsp1080p海康摄像头:延迟0.2s,存在马赛克     使用ffmpeg播放网络rtsp文件流 ...

  4. FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  5. FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台

    FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待   前言   将ffmpeg移植到海思H ...

  6. Django开发笔记三

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.基于类的方式重写登录:views.py: from ...

  7. FFmpeg开发笔记(一)搭建Linux系统的开发环境

    对于初学者来说,如何搭建FFmpeg的开发环境是个不小的拦路虎,因为FFmpeg用到了许多第三方开发包,所以要先编译这些第三方源码,之后才能给FFmpeg集成编译好的第三方库.不过考虑到刚开始仅仅调用 ...

  8. SDL开发笔记(二):音频基础介绍、使用SDL播放音频

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  9. ffmpeg学习笔记-初识ffmpeg

    ffmpeg用来对音视频进行处理,那么在使用ffmpeg前就需要ffmpeg有一个大概的了解,这里使用雷神的ppt素材进行整理,以便于复习 音视频基础知识 视频播放器的原理 播放视频的流程大致如下: ...

  10. FFmpeg开发笔记(二)搭建Windows系统的开发环境

    由于Linux系统比较专业,个人电脑很少安装Linux,反而大都安装Windows系统,因此提高了FFmpeg的学习门槛,毕竟在Windows系统搭建FFmpeg的开发环境还是比较麻烦的.不过若有已经 ...

随机推荐

  1. NC14704 美味菜肴

    题目链接 题目 题目描述 小明是个大厨,早上起来他开始一天的工作.他所在的餐厅每天早上都会买好 \(n\) 件食材(每种食材的数量可以视为无限),小明从到达餐厅开始就连续工作 \(T\) 时间.每道菜 ...

  2. C语言,变长数组的用法

    在我的<C语言,结构体成员的地址>文章中,定义了一个demo_node结构体,其中用到变长数组char addr[0].本文以此为例,对C语言变长数组的基本用法展开介绍. typedef ...

  3. Ehcache 3.x 笔记

    现在Ehcache版本已经到3.10了, 网上查到的大部分还是2.x版本的使用说明, 把基础用法记了一下, 以后有时间再翻译. 基础使用, 创建 CacheManager CacheManager c ...

  4. Laravel入坑指南(8)——控制台程序

    我们知道,php代码不仅可以用web的形式对外提供服务,同时也可以在命令行下执行. 对于原生的php来说,假设我们有一个php文件,名为Command.php,如果想要在控制台下执行这个文件,那么我们 ...

  5. C++ 多线程的错误和如何避免(14)

    在 C++11 中,不要将 volatile 用于线程,仅限于 MMIO(内存映射) 简单的回答, 在声明变量类型之前添加 "volatile" 关键字不会使对该变量有任何方式的原 ...

  6. 面向对象之封装,类的相关操作,私有成员删除,构造方法__init__---day20

    1.面向对象之封装 # ### 面向对象oop -封装 """ 类中封装: 成员属性 成员方法 封装等级: 1.公有:公有成员既能够在类外调用,也可在类内调用 2.私有: ...

  7. channel管道

    channel 如果说goroutine是并发体的话,那么channels则是他们之间的通信机制.一个channel是一个通信机制,它可以让一个goroutine通过它给另一个goroutine发生值 ...

  8. 为Study.BlazorOne引入Study.Trade模块

    # 1.在Application项目中添加Trade的对应的包 默认的源多半是nuget.org 我们自己的模块,一般在我们自己的NuGet服务器 从"已安装"切换到"浏 ...

  9. 大众点评-CAT监控平台

    前言 我们禀着发现问题,解决问题的方针,针对后台诸多的服务,如何实时监控接口性能和访问频率,还要统计大盘信息?CAT作为大众点评开源的系统监控平台项目,下面就介绍一下CAT平台的搭建步骤. CAT作为 ...

  10. 【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败

    问题描述 在App Service for Linux环境中,部署Django应用,访问应用页面时候,出现css.js等静态资源文件加载失败问题. 浏览器Console提示的错误消息为: Refuse ...