FFmpeg三大常用工具及应用选项详解
发布时间:2024-04-03 17:04:41浏览次数:38第3章FFmpeg三大常用工具及应用选项详解多媒 体 库 支 持 的 命 令 行 调 用 分 为个 模 块其 中模块常用于音视频剪切转码滤镜拼接混音截图等模块用于播放视频模块用于检测多 媒 体流 格式详 情可 查 阅的 官 方文 档网 址 为注意本章的知识侧重于讲解命 令行选项的 使用读者在 学习过程中 可能会感 觉比 较抽象可以先对这些 选项 大体 上 有个 印 象后 续 章节 笔 者 准 备了 大 量 的 案例 来 应 用 这些选项3.1ffmpeg工具简介工具主要用于编解码主要工作流程相对比较简单如图所示图工具的编解码流程读取输入源进行音视频的解封装解码每帧音视频数据编码每帧音视频数据进行音视频的重写封装输出到目标工具首先读取输 入源然后 通过 解封装 器将音 视频 包进行 解封 装这个动作通过调用中的 接口 实现接下 来通 过解码 器进行 解码将音视频通过解包为或者这样的音视频裸数据通过中的接 口 实 现然 后 通 过 编 码 器将 对 应 的 数 据 进 行 编 码编 码 可 以 通 过5min
45该页面会显示刚才选择的本地视频文件然后单击下一步按钮如图所示图流媒体服务器之文件来源在该页面单击添加按钮选择具体的流协议例如这里选择然后单击下一步按钮如图所示图流媒体服务器之选择协议在该页面的下拉列表框列表中选择然后单击下一步按钮如图所示注意一定要选中激活转码并且需要是流格式在该页面 可 以 看 到生 成 的所 有 串 流 输出 参 数然 后 单击流按 钮 即 可如图所示
46图流媒体服务器之图流媒体服务器之串流输出字符串
473.3ffprobe工具简介工具主要用于检测多媒体信息包括时长视频分辨率帧率音频采样率声道数每个流信息等支持的 显示形式包 括和例如指定用方式输出信息命令如下如果要显示 每帧 数据信 息则可 使用可 以显 示等信息命令如下如果只显示视频流则可使用其中代表代表代表命令如下常用参数比较多可以通过命令来查看详细的信息3.3.1show_packets查看的多媒体包信息使用标签包括起来其中包含的信息主要如下多媒体类型例如视频包音频包等多媒体的流索引多媒体的显示时间值根据不同格式计算过后的多媒体的显示时间多媒体解码时间值根据不同格式计算过后的多媒体解码时间多媒体包占用的时间值根据不同格式计算过后的多媒体包占用的时间值多媒体包的大小多媒体包所在的文件偏移位置多媒体包标记关键包与非关键包的标记3.3.2show_format还可以分析多媒体 的 封装 格式通 过参 数可 以查 看 多媒 体的 封
48装格式封装可以使用标签括起来显示命令如下通过读取信息可以看到这个视频文件有两个流通道包括视频流和音频流这个文件的起始时间是长度为文 件 大小 为码 率 为该 文 件的 封 装 格 式可 能 为之所 以会这 么 输出是 因为 这几 种 封装 格式 在中所识别的标签基本相同所以才会有这么多种显示方式完整的输出信息代码如下以开头的部分是笔者的注释信息 输入文件的封装格式这里为封装格式''第路流视频流编码格式第路流音频流编码格式
49标签格式的输出信息格式为3.3.3show_frames通过的参数 可以 查看视 频文 件中的 帧信 息输出 的帧 信息使 用标签括起来能够看到每帧的信息命令如下下面介绍重要的属性说明如表所示表3-2show_frames的属性说明属性 值 属性 值帧的类型视频音频字幕等帧所在的索引区域是否是关键帧 包的 包的的时间显示 包的 包的的时间显示 包的时长 包的时长时间显示 包所在文件的偏移位置帧显示的宽度帧显示的高度帧的图像色彩格式等帧类型从该案例中的部分输出信息可以看出音视频 帧是交错输 出的一般情 况是一帧视 频
50然后是多帧音频以此交错类推输出信息如下以开头的部分是笔者的注释信息完整的输出的帧信息 ''音频帧
51音频帧音频帧
52音频帧音频帧
53视频帧3.3.4show_streams通过的参 数 可 以 查 看 多 媒 体 文 件 中 的 流 信 息流 信 息 使 用标签括起来命令如下
54下面介绍重要的属性说明如表所示表3-3show_streams的属性说明属性 值 属性 值流所在的索引区域编码名编码全名编码的能力编码的层级包含帧信息编码类型编码的时间戳的基础单位图像显示的图像色彩格式图像的宽度图像的高度编码的标签数据该案例中的部分输出信息如下以开头的部分是笔者的注释信息视频流
37中的接口实现接下来将编码后的音视频数据包通过封装器进行封装封装可以通过中的接口实现最终的输出称为输出流命令行工具是一个快速的音视频转换工具使用方法及格式如下全局选项输入文件选项' 输入文件 '输出文件选项' 输出文件 '全局选项一对方括号代表这些选项是可选的输入文件选项' 输入文件 '一对花括号代表可以读取任 意数量的输入文件这里的文件可以是常规文件管道网络流抓取设备等输入文件前必须带有选项也可以带有其他的输入文件选项输出文件选项' 输 出文件 '一对 花括 号代表 可以 写入任 意数 量的输出 文件可以带有相关的输出文件选项任何不能被解释 为选项的字 符串都被认 为是一个输 出文件或者称为是多媒体领域应 用最 广 泛的 一个 开 源框 架包 含了 传 输 协议视 频 格式编 解码图像滤镜语音处理等功能并可以与等其他软 件对接几乎是 事实上的音视频标准库它的架构清晰简洁大体上分为以下几部分传输协议包括等常见的协议本地文件也被实现为一个协议视频封装格式包括等市 面上 常见的 格 式几 乎没 有解析不了的编解码协议包括视频 的等音频 的等大概支持几十种编解码协议常见的不常见的都有目前最流行的还是和图像滤镜和语音滤镜在里都通 过实现它是提供 的对 解码后的图像和语音进行处理的一个框架模块化设计足以与和内核相媲美添加第三方模块或者自定义模块都非常方便它自带的各个功能也是以模块的形式进行管理的可以在编译之前灵活地配置3.2ffplay工具简介在编译源代码时如果系统中包含了库则会默认编译生成工具如果不包含时无法生成工具所以如果想使用进行流媒体播放测试则需要安装库通常使用作为播放器其实不但可以作为播放器同样可以作为很多图像化音视频数据的分析工具通过可以看到视频图像的运动估计方向音频数据的波形等在本节将会对更多的参数进行介绍并举例
55音频流声道
563.3.5print_format使用前面的参数可以获得到对应的但是阅读起来因 个人习惯不 同所以有的人认为方便而有的人认为不方便这样就 需要用到的参数进行相应的格式输出包括下面举几种输出的例子格式的部分输出信息如下
57格式的部分输出信息如下
58 格式的部分输出信息如下
593.3.6select_streams如果只查看音频流或视频流则可使用参数例如只查看视频流的信息命令如下命令行执行后可以看到输出信息全部为视频的内容如下
60
613.4通用选项通用选项是指对音频视频都能使用的命令参数这里介绍几个重要的选项强制输入 或输出 文件 格式通常输入 文件 的格式 是自 动检测的输出文件的格式是通过文件扩展名进行推断的输入文件名如果存在同名的输出文件则直接强制覆盖不覆盖输出文件如果一个给定的输出文件已经存在则立即退出编解 码器 选项例如代表视频编码器代表音频编码 器代表音 视频编码格 式都复制 原来 的也可以写成为一个或多个流选择一个编码器当使用在 一 个输 出文 件 之前 时或 者一 个解 码 器当 使用 在 一 个 输入 文 件 之 前时是一个编码器解码器名称例如等或者一 个特定值只适用输出当到达时停止写输出可以是一个数 字单位为秒或者使用形式在处停止写输出可以是一个数字单位为秒或者使用形式选项和是互斥的的优先级更高设置文件大小限制以字节表示当作为输入选项时在之前在输入 文件中跳转 到需要注意的是在大多数格 式中不太 可能 精确地 跳转因此将跳 转到之前最接近的位置当进行转码并且打开时默认会打开位于跳转点和之间的额外部分将 被解码并且 丢弃当进 行流 复制或 者使 用时它将被保留下来当作 为输 出选项 时在输 出文 件名前会解 码但是 丢弃 输入直到时间戳到达可 以 是 一 个 数 字单 位 为 秒或 者形式设置输入时间偏移将被添加到输入文件的 时间戳指定一个正偏移意味着相应的流将被延时指定时间在容器中设置录音时间戳设 置的对指 定 目 标 文 件 类 型和可以带有或前缀以使 用相 应的标 准所有 的格 式选项将自动设定
62设置要录制数据帧的个数这是的别名帧以后停止写流指定音视 频质量如其中代表保存为高质量或者写成可以使 用固定质量范围创建指定的过滤图并使用它过滤流该 选项 与相似唯一的不同是它的参数是一个存放过滤图的文件的名称指定匹配流的预设打印编码进程统计信息默认打开可以使用禁用开启标准 输入 交互默认 打开除非 标准 输入作 为一 个输入可 以使 用禁止打印时间戳信息默认关闭将一个附件添加到输出文件中将匹配的附件流提取到指定的文件中3.5视频选项主要应用于视频的选项列举如下设置录制视频帧的个数它是的别名设置帧率设置帧 大小格式为默认与原始的宽和高相同例如注意中间是小写的设置视频显示的宽高比禁止视频录制设 置 视 频它 是的 别 名例 如代表用进行视 频编码代表不 用重新编码 而直接复制 原始 视频流选择用来进行双行程视频编码设置日志文件名前缀默认为
63创建指定的过滤图并使用它来过滤流设置像素格式设置软缩放标志丢弃阈值用于计算压缩帧的即峰值信噪比是一种评价图像的客观标准将视频编码统计信息复制到将视频编码统计信息复制到指定的强制关键帧在指定的时间戳强制关键帧当进行流复制时同时复制开头的非关键帧使用 硬件 加 速来 解码匹配的流选择硬件加速所使用的设备该选项只有同时指定时才有意义3.6音频选项主要应用于音频的选项列举如下设置录制音频帧的个数是的别名设置音频采样率设置音频质量是的别名设置音频通道数禁止音频录制设 置 音 频是的 别 名例 如代表使用进行音频编码设置音频采样格式创建所指定的过滤图并使用它来过滤流3.7字幕选项主要应用于字幕的选项列举如下
64设置框架大小或缩写禁用字幕编解码器强制字幕编解码器字幕标签修复字幕持续时间设置画布大小预设将字幕选项设置为指示的预设3.8高级选项指定一个或多个流作为输出文件的源以本地视频文件的帧率来读取数据主要用来模拟一个采集设备例如可以读取一个本地文件来模拟实时输入流设置下一个输出文件的信息从索 引号 为的输 入文件中将章节复制到下一个输出文件中运行秒后退出将每个输入包复制到标准输出复制包时同时复制负载视频同步方法音频同步方法当最短的输入流结束时终止编码设置最大解封装解码延时设置初始解封装解码延时为一个输出流分配一个新的为匹配 的流设置比特流滤镜定义一个复杂的过滤图定义一个复杂的过滤图相当于该选项类似于唯一的不同是它的参数是一个定义过滤图的文件的文件名打开或禁止在输入文件中的精确跳转默认打开
383.2.1ffplay常用参数不仅是播放器同时也是测试的引擎引擎及引擎的工具并且也可以作为可视化的媒体参数分析 工具可以通 过命令查 看这些参数常见参数读者可以手动进行测试举例如下如果希望从视频的第开始播放播放命令如下视频播放时播放器的窗口可以显示自定义标题显示效果如图所示命令如下图自定义窗口标题图播放网络直播流并自定义窗口标题使用还可以打开网络直播流实时网络直播视频流的播放效果如图所示命令如下
653.9map详解的选项用于指定一个或多个流作为输出文件的源语法如下该命令行中的第个选项用于指定输出流的源第个选项用 于指定输出流的源以此类推以下是一些特别流符号的说明表示选择第个文件的所有流表示从文件序号中获取所有视频流表示获取所有音频流表示获取所有字幕流等特殊参数表示分别排除所有的音频流视频流字幕流注意如果文件索引号前带有减号则表示 排除指定文 件中的指定 流例如表示排除第个输入文件中的第路视频流的通常用 法是即文件索引号流类型流索引号下面列举几个案例如图所示图用法及案例在用法中文件流包括音频流视频流字幕流的索引号都是从开始的例如第个文件的第路视频流的标识符为第个文件的第路视频流的标识符为第个文件的第路字幕流的标识符为在上述案例中有两个输入文件和一个输出文件命令行语法如下
66其中列举几种可用的情况从所有输入文件中选择所有流代码如下表示从第个文件中获取所有流包括音频流视频流和字幕流表示从第个文件中获取所有流包括音频流视频流和字幕流从第个输入文件中获取第路字幕流从第个文件中获取第路视频流 和第路音频流代码如下表示从第个文件中获取第路字幕流表示从第个文件中获取第路视频流表示从第个文件中获取第路音频流从第个输入文件中获取第路视频流从第个文件中获取第路字幕流然后屏蔽所有的音频流代码如下表示从第个文件中获取第路视频流表示从第个文件中获取第路字幕流表示屏蔽所有的音频流从所有输入文件中选择所有流但需要排除第个输入文件中的第路视频流和第路音频流代码如下表示从第个文件中获取所有流包括音频流视频流和字幕流表示从第个文件中获取所有流包括音频流视频流和字幕流注意文件索引号前边有一个减号表示从第个文件中排除第路视频流注意文件索引号前边有一个减号表示从第个文件中排除第路音频流3.10ffmpeg-h详解打开命令行窗口输入命令会打印出的帮助信息输出内容如下注释说明的语法格式
67的获取帮助的参数包括和由于内容比较多读者可以自己测试和显示授权信息显示帮助信息显示帮助信息显示版本信息显示编译配置信息显示可用的格式显示可用的封装器显示可用的解封装器显示可用的设备显示可用的编解码器显示可用的解码器显示可用的编码器显示可用的位流滤镜显示可用的协议显示可用的滤镜显示可用的像素格式 显示可用的声道模式 显示可用的采样格式 显示可用的颜色名称 显示可用的输入设备 显示可用的输出设备 显示可用的硬件加速方法全局选项
68文件主要选项强制规定文件格式''视频选项''
69音频选项''字幕选项''3.11FFmpeg其他选项提供了非常多的编码器解码器封装器协议硬件 加速 等功能这里 重点 介绍以下几项可用的比特流可用的编解码器可用的解码器可用的编码器可用的滤镜可用的视频格式可用的声道布局可用的许可证可用的像素格式可用的协议
703.11.1-formats支持的文件格式用于列举所有可用的文件格式代表解封装支持的格式代表封装支持的格式代表封装解封装都支持的格式由于内容太多笔者删除了 一些不常用 的格式输出信息如下文件格式 解封装支持 封装支持格式格式格式用于数字视频格式包括和属于格式格式包含视频流信息格式包含视频音频字幕等音频格式音频格式
71视频格式视频格式视频格式视频格式即视频格式包含视频流信息视频格式音频格式音频格式视频格式
72 3.11.2-muxers支持的封装器格式用于列举所有可用的封装器格式代表解封装支持的格 式代表封 装支持的格式代表封装解封装都支持的格式属于封装格式所以只包含类型的格式具体输出信息如下
73
74
39播放测试注意这里的 网络 直播流 的网 址为///直 播流 是用模拟出来的直播流具体的 操作步骤可 参考本节的作为流媒 体服务器3.2.2ffplay高级参数通过命令可以看到 的帮 助信 息 比较 多在 帮助 信息 中 包含 了许 多 高级 参数这里列举几个重要的参数选项如表所示表3-1ffplay的参数选项及说明信息参数 说明 参数 说明强制设置视频显示窗口的宽度强制设置视频显示窗口的高度设置视频显示的宽和高强制全屏显示屏蔽音频屏蔽视频屏蔽字幕根据 设 置 的 时 间单 位 为 秒进行定位拖动设置播放视频音频长度设置定位 拖 动 的 策 略为 不 可拖动为可拖动为自动关闭图形化显示窗口强制使用设置的格式进行解析设置显示窗口的标题设置音频的滤镜强制使用设置的进行解码自动旋转视频设置将要播放的音频流设置将要播放的视频流设置将要播放的字幕流输出多媒体播放状态非标 准 化 规 范 的 多 媒 体 兼 容优化音视频 同 步 设 置可 根 据 音 频视频进 行 参 考可 根 据 视 频 时间参考也 可 根 据 外 部 扩 展 时间进行参考多媒体播放完毕自动退出默 认 播 放 完 毕 不 退 出 播放器当有 按 键 按 下 事 件 产 生 时 退出当有 鼠 标 按 键 事 件 产 生 时 退出设置多媒体文件循环播放次数当资源占用 过 高 时自 动丢帧设 置 无 极 限 的 播 放 器这个选 项常见于 实时流媒 体播放场景视频滤镜设置强制使用设置的音频解码器强制使用设置的视频解码器强制使用设置的字幕解码器下面根据这些参数与前面介绍过的一些参数进行组合案例如下从开始播放一个视频播放时长为播放完成后自动退出播放器 的窗口标题为命令如下
75
76 3.11.3-demuxers支持的解封装器格式用于列举所有可用的解封装器格式代表解 封装支持的 格式代表封 装支持的格式代表封装解封装都支持的格式属于解封装格式所以只包含类型的格式由于内容太多笔者删除了一些不常用的格式具体输出信息如下
77
78 3.11.4-devices支持的设备用于列举所有可用的设备代表解封装支持的格式代表封装支持的格式代表封装解封装都支持的格式具体输出信息如下 类型的捕获设备
79下的帧抓取器可以录屏 虚拟输入设备的输出设备下的用于视频捕获3.11.5-encoders支持的编码器格式用于列举所有可用的编码器格式代表视频格式代表音 频格式代表字幕格式代表帧级别的多线程运算代表 条带 级别的 多线 程运算代表 实验 的编解码器代表支持绘制水平带代表直 接渲染由于内 容太多笔者删 除了一些 不常用 的格式具体输出信息如下采样格式格式 编码视频编码视频编码编码属于的开源编码器
80 编码
81
82 3.11.6-decoders支持的解码器格式用于列举所有可用的解码器格式代表视频格式代表音 频格式代表字幕格式代表帧级别的多线程运算代表 条带 级别的 多线 程运算代表 实验 的编解码器代表支持绘制水平带代表直 接渲染由于内 容太多笔者删 除了一些 不常用 的格式具体输出信息如下
83
84
40播放完毕后自动退出强制使用解码器解码格式的视频将会报错的音视频流信息如图所示命令如下图的视频流格式注意这里的中的视频流是用编码的而不是该案例中会提示一些报错信息因为强制使用解码器所以会提示找不到代码如下 ''
85 '
86 3.11.7-protocols支持的协议格式用于列举所有可用的协议格式分为输 入协议和输 出协议具体输 出信息如下以开头的部分是笔者的注释
87输入类型的协议 本地文件文件传输协议直播协议直播推流协议实时流协议用于音视频数据的传输输出类型的协议
883.11.8-hwaccels支持的硬件加速格式用于列举所有可用的硬件加速格式具体输出信息如下是显卡厂商推出的运算平台是的简称中文译为视频硬件加速是微软公司专门制定的视频加速规范它共有两个版本分别是和的硬件加速方案硬件加速3.11.9-layouts支持的声道模式用于列举所有可用的声道模式具体输出信息如下 独立声道 左前 右前 中前低频 左后 右后
89 左中前 右中前 中后 左侧 右侧 中上 标准声道模式 单声道 双声道左前右前 声道
90 3.11.10-sample_fmts支持的采样格式用于列举所有可用的采样格式具体输出信息如下无符号位有符号位有符号位位位代表平面模式例如和的不同点在于数据的排列方式前者相邻连续排列后者则分离排列但是现在有相当多的音频文件采用方案如都有对应的方式无符号位平面模式3.11.11-colors支持的颜色名称用于列举所有可用的颜色名称具体输出信息如下 爱丽丝蓝 古董白蓝色 棕色
91 深灰色 深红色 深紫色 灰色绿色紫色小麦色白色 黄色3.11.12-pix_fmts支持的像素格式用于列举所有可用的像素格式代表支持输入代表支持输出代表支持调色板代表支持硬件加速代表支持位流具体输出信息如下名称 单元数 每像素的位数每像素占位分别存储
92每像素占位每像素占位
93
94
41注意这里提示找不到码流规定的如果使用播放视频时希望加载字幕文件则可以通过加载或者字幕文件来解决下面举一个加载字幕 的例子首先编 辑字幕文 件将这些 内容存储为普通文本格式文件名为在本书课件资料的目录下并与要 播放的视频文件放到同一个目录下具体内容如下这里是梅老师的课程欢迎您进入的音视频世界祝大家万事如意学有所成然后通过将字幕文件加载到播放数据中显示效果如图所示命令如下图播放字幕文件
95
96
42在该案例中完整的输出信息如下注意开头的内容是笔者添加的注释信息 的编译选项这里开启的第三方编码器比较多读者可以顺便熟悉一下 ''输入文件的第路流格式为帧秒等
43输入文件的第路流格式为立体声采样格式等解析字幕信息3.2.3ffplay的数据可视化分析应用使用除了可以播放视频流媒体文 件之外还可以 作为可视化 的视频流媒 体分析工具例如当播放音频文件时有时不确定文件的声音是否正常此时可以直接使用播放音频文件播放时将会把解码后的音频数据以音频波形显示出来如图所示从图中可以看到音频在播放时的波形可以通过振幅显示出来通过振幅可以判断音频的播放情况命令如下图播放音频并显示波形图
443.2.4VLC作为RTSP流媒体服务器的功能很强大不仅是一个视频播放器也可作为小型的视频服务器还可以一边播放一边转码把视频流发送到网络上作为视频服务器的具体步骤如下单击主菜单中媒体下的流在弹出的对话框中单击添加按钮选择一个本地视频文件如图所示图流媒体服务器之打开本地文件单击页面下方的串流添加串流协议如图所示图流媒体服务器之添加串流协议