文章目录
简记FFMPEG的部分关键概念,整理常用命令行手册以备查找。本文并非严格的学术文章,部分词汇按个人标准翻译,请认准英文。
FFMPEG命令行语法格式
ffmpeg [global_options] {
[input_file_options] -i input_url} ... {
[output_file_options] output_url} ...
FFMPEG的部分关键概念
FFMPEG多媒体编解码流程
- 输入解复用(demux)调用demuxer读取输入文件并获得数据包
- 解码(decode)解码器产生未压缩帧(原始视频/PCM音频等)
- 滤镜处理(filtering)使用滤镜处理未压缩数据
- 编码(encode)
- 混流(mux)后输出
以上功能单元(解复用器、混流器、编解码器、滤镜)由以下库提供,可查看相关文档或命令行帮助以获得全部名单及使用方式:
流拷贝(stream copy)模式
由-codec[:stream_specifier] copy
指定。若指定流拷贝模式,则跳过编解码与滤镜操作(当然亦无法执行滤镜处理操作),仅执行解复用与混流步骤,常用于修改容器格式或修改容器元数据。优势在于快速、无质量损失。
滤镜(filter)
也译为过滤器,是FFMPEG对各种未压缩流数据操作的基本功能单元的抽象。滤镜为逐流(per-stream)作用,需以流限定符(stream specifier)指定操作对象流。从作用对象分类,滤镜有视频滤镜V、音频滤镜A与字幕滤镜S之分(VAS)。从功能分类,滤镜可分为功能滤镜(filter)、源(source)、汇(sink),后二者可理解为FFMPEG自身提供的输入与输出文件。
滤镜图(filtergraph)
若干(或单一)滤镜链式连接形成的可用图表示其逻辑组合的功能单元,简单地理解为所有应用的滤镜的统称。以输入输出流数或流类型异同可区分两种滤镜图:简单(simple)滤镜图与复杂滤镜图,二者诸多方面有差异。
流(stream)
多媒体容器文件的基本单元,也是FFMPEG的基本处理对象,滤镜与编解码器应用的最小单位。在各种应用场景中,流常被封装于容器文件中,解复用步骤实际就是拆封从而拿到流。流有视频流、音频流、字幕流之分(VAS)。
自动流选择
流选择(stream selection)的一种(另一种是手动流选择,由map
选项指定)。输出文件无map
选项时自动应用该种流选择方案,其步骤为:
- 检查输出文件格式,确定合法的流类型
- 对于所有合法的流类型,从全部输入文件的流中对VAS各选择一条流,原则为
- 视频流:分辨率最高
- 音频流:声道最多
- 字幕流:第一条,但是须符合输出文件格式要求的字幕类型(基于文本或图像)
- 数据或附加流:无法自动选择,必须使用-map选项指定 - 满足选择标准的所有流中选择索引最小的那条
流限定符(stream specifier)
对于逐流(per-stream)操作的选项,使用流限定符指定作用的对象流。流限定符的形式为附加于选项名后以分号隔开的字符串,具体形式如下:
stream_index
stream_type[:additional_stream_specifier]
p:program_id[:additional_stream_specifier]
#stream_id(i:stream_id)
m:key[:value]
u
选项
指定参数、选择滤镜、限定对象…选项是FFMPEG命令行的基础。大致分为:
- 通用选项(Generic options)
- 主选项(Main options)
- VAS选项
- 额外的高级选项(Advanced options)
了解选项需关注以下方面:
- 最小作用域(Least Range)全局G·输入输出文件F·逐流S
- 输入?输出?(IO)
- 参数
- 功能
时间长度(duration)表示
由libavutil
库提供支持,建议查看官方文档。总的来说有两种表示方法:
[-][HH:]MM:SS[.m...]
[-