FFplay文档解读-1-语法,描述,选项
前言
Github
地址:Github
简书地址:简书
专辑地址:FFplay专辑
1. 语法
ffplay [options] [‘input_url’]
使用ffplay
和使用ffmpeg
有一定的相似性,以ffplay
开头,之后便是相关的选项,这个在后面会有具体的介绍,最后便是需要播放视频的地址,本地地址或者网络地址。
2. 描述
FFplay
是一个使用FFmpeg
库和SDL
库的非常简单的便携式媒体播放器。 它主要用作各种FFmpeg API
的测试平台。
3. 选项
如果没有另外指定,所有数字选项接受表示数字作为输入的字符串,其后可以跟随SI
单位前缀之一,例如:'K'
,'M'
或'G'
。
如果'i'
被附加到SI
单位前缀,则完整前缀将被解释为二进制倍数的单位前缀,其基于1024
的幂而不是1000
的幂。将B
加到SI单位前缀乘以 这允许使用例如:'KB'
,'MiB'
,'G'
和'B'
作为数字后缀。
不带参数的选项是布尔选项,并将相应的值设置为true
。 可以通过在选项名称前加上no
来将它们设置为false
。 例如,使用-nofoo
将名称为foo
的布尔选项设置为false
。
3.1流说明符
每个流应用一些选项,例如 比特率或编解码器。 流指定符用于精确指定给定选项所属的流。
流说明符是通常附加到选项名称并通过冒号与其分隔的字符串。 例如。 -codec:a:1 ac3
包含a:1
流说明符,它与第二个音频流匹配。 因此,它将为第二音频流选择ac3
编解码器。
流说明符可以匹配多个流,以便将选项应用于所有流。 例如。 -b:a 128k
中的流说明符匹配所有音频流。
空流说明符匹配所有流。 例如,-codec copy
或-codec:copy
将复制所有流而无需重新编码。
流说明符的可能形式是:
stream_index
使用此索引匹配流。 例如。 -threads:1 4
将第二个流的线程数设置为4。
stream_type[:stream_index]
stream_type
是以下之一:视频为v
或V
,音频为a
,副标题为s
,数据为d
,附件为t
。 'v'
匹配所有视频流,'V'
仅匹配未附加图片,视频缩略图或封面艺术的视频流。 如果给出stream_index
,则它匹配此类型的流编号stream_index
。 否则,它匹配此类型的所有流。
‘p:program_id[:stream_index] or p:program_id[:stream_type[:stream_index]] or’
p:program_id:m:key [:value]
在第一个版本中,如果给出了stream_index
,那么它将匹配程序中带有编号为stream_index
的流,其id
为program_id
。 否则,它匹配程序中的所有流。 在第二个版本中,stream_type
是以下之一:视频'v'
,音频'a'
,副标题's'
,数据'd'
。 如果还给出了stream_index
,则它在程序中使用id
program_id
匹配此类型的流编号stream_index
。 否则,如果仅给出stream_type
,则它将使用id
program_id
匹配程序中此类型的所有流。 在第三个版本中,程序中的流与id
program_id
匹配,元数据标记键具有指定值。 如果未给出value
,则将包含给定标记的流与任何值进行匹配。
#stream_id or i:stream_id
通过流id
匹配流(例如,MPEG-TS
容器中的PID
)。
m:key[:value]
使用具有指定值的元数据标记键匹配流。 如果未给出value
,则将包含给定标记的流与任何值匹配。
u
匹配具有可用配置的流,必须定义编解码器,并且必须存在诸如视频维度或音频采样率之类的基本信息。
请注意,在ffmpeg
中,按元数据匹配仅适用于输入文件。
3.2通用选项
这些选项在ff*
工具中共享。
-L
显示许可证。
-h, -?, -help, --help [arg]
显示帮助。 可以指定可选参数以打印关于特定项目的帮助。 如果未指定参数,则仅显示基本(非高级)工具选项。
arg
的可能值如下:
值 | 解释 |
---|---|
long | 除基本工具选项外,还可以打印高级工具选项。 |
full | 打印完整的选项列表,包括编码器,解码器,分路器,复用器,滤波器等的共享和专用选项。 |
decoder=decoder_name | 打印有关名为decoder_name 的解码器的详细信息。 使用'-decoders' 选项获取所有解码器的列表。 |
encoder=encoder_name | 打印有关名为encoder_name 的编码器的详细信息。 使用'-encoders' 选项获取所有编码器的列表。 |
demuxer=demuxer_name | 打印有关名为demuxer_name 的分离器的详细信息。 使用'-formats' 选项获取所有解复用器和复用器的列表。 |
muxer=muxer_name | 打印有关名为muxer_name 的muxer 的详细信息。 使用'-formats' 选项获取所有复用器和解复用器的列表。 |
filter=filter_name | 打印有关过滤器名称filter_name 的详细信息。 使用'-filters' 选项获取所有过滤器的列表。 |
-version
显示版本信息
-formats
显示可用设备。
-codecs
显示libavcodec
已知的所有编解码器。
请注意,本文档中使用术语’codec’
作为更正确称为媒体比特流格式的快捷方式。
-decoders
显示可用的解码器。
-encoders
显示所有可用的编码器。
-bsfs
显示可用的比特流过滤器。
-protocols
显示可用的协议。
-filters
显示可用的libavfilter
过滤器。
-pix_fmts
显示可用的像素格式。
-sample_fmts
显示可用的样本格式。
-layouts
显示频道名称和标准频道布局。
-colors
显示已识别的颜色名称。
-sources device[,opt1=val1[,opt2=val2]...]
显示输入设备的自动检测源。 某些设备可能提供无法自动检测的系统相关源名称。 不能假定返回的列表总是完整的。
示例代码 |
---|
ffmpeg -sources pulse,server=192.168.0.4 |
-sinks device[,opt1=val1[,opt2=val2]...]
显示输出设备的自动检测接收器。 某些设备可能提供无法自动检测的与系统相关的接收器名称。 不能假定返回的列表总是完整的。
示例代码 |
---|
ffmpeg -sinks pulse,server=192.168.0.4 |
-loglevel [flags+]loglevel | -v [flags+]loglevel
设置库使用的日志记录级别和标志。
可选的标志前缀可以包含以下值:
值 | 解释 |
---|---|
‘repeat’ | 表示不应将重复日志输出压缩到第一行,并且将省略最后重复消息n次 行。 |
‘level’ | 表示日志输出应为每个消息行添加[level] 前缀。 这可以用作对数着色的替代方案,例如, 将日志转储到文件时。 |
标志也可以单独使用,添加'+'/' - '
前缀来设置/重置单个标志,而不会影响其他标志或更改日志级别。 设置flags
和loglevel
时,最后一个标志值和loglevel
之间应该有一个'+'
分隔符。
loglevel
是一个字符串或包含以下值之一的数字:
值 | 解释 |
---|---|
‘quiet, -8’ | 什么都不显示; 静音。 |
‘panic, 0’ | 仅显示可能导致进程崩溃的致命错误,例如断言失败。 目前还没有用于任何目的。 |
‘fatal, 8’ | 只显示致命错误。 这些是错误,在此之后该过程绝对无法继续。 |
‘error, 16’ | 显示所有错误,包括可以从中恢复的错误。 |
‘warning, 24’ | 显示所有警告和错误。 将显示与可能不正确或意外事件相关的任何消息。 |
‘info, 32’ | 在处理过程中显示信息性消息。 这是警告和错误的补充。 这是默认值。 |
‘verbose, 40’ | 和info 相同,只是更详细了一些 |
‘debug, 48’ | 显示所有内容,包括调试信息。 |
‘trace, 56’ |
例如,要启用重复日志输出,请添加级别前缀,并为loglevel
设置verbose
:
示例代码 |
---|
ffmpeg -loglevel repeat+level+verbose -i input output |
另一个允许重复日志输出而不影响级别前缀标志或loglevel的当前状态的示例:
示例代码 |
---|
ffmpeg [...] -loglevel +repeat |
默认情况下,程序会记录到stderr。 如果终端支持着色,则使用颜色标记错误和警告。 可以禁用日志着色设置环境变量AV_LOG_FORCE_NOCOLOR
或NO_COLOR
,也可以强制设置环境变量AV_LOG_FORCE_COLOR
。 不推荐使用环境变量NO_COLOR
,将在以后的FFmpeg
版本中删除。
-report
将完整命令行和控制台输出转储到当前目录中名为program-YYYYMMDD-HHMMSS.log
的文件。 此文件可用于错误报告。 它还暗示-loglevel verbose
。
将环境变量FFREPORT
设置为任何值具有相同的效果。 如果值为':' - 分隔键=值序列,则这些选项将影响报告; 如果选项值包含特殊字符或选项分隔符':',则必须对其进行转义(请参阅ffmpeg-utils手册中的“引用和转义”部分)。
可识别以下选项:
值 | 解释 |
---|---|
‘file’ | 设置用于报告的文件名; %p扩展为程序名称,%t扩展为时间戳,%%扩展为普通% |
‘level’ | 使用数值设置日志详细级别(请参阅-loglevel)。 |
例如,要使用日志级别32(日志级别信息的别名)将报告输出到名为“ffreport.log”的文件:
示例代码 |
---|
FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output |
解析环境变量时的错误不是致命的,并且不会出现在报告中。
-hide_banner
禁止打印横幅。
所有FFmpeg工具通常都会显示版权声明,构建选项和库版本。 此选项可用于禁止打印此信息。
-cpuflags flags (global)
允许设置和清除cpu标志。 此选项用于测试。 除非你知道自己在做什么,否则不要使用它。
ffmpeg -cpuflags -sse+mmx ...ffmpeg -cpuflags mmx ...ffmpeg -cpuflags 0 ...
此选项的可能标志是:
x86
x86 |
---|
mmx |
‘mmxext’ |
‘sse’ |
‘sse2’ |
‘sse2slow’ |
‘sse3’ |
‘sse3slow’ |
‘ssse3’ |
‘atom’ |
‘sse4.1’ |
‘sse4.2’ |
‘avx’ |
‘avx2’ |
‘xop’ |
‘fma3’ |
‘fma4’ |
‘3dnow’ |
‘3dnowext’ |
‘bmi1’ |
‘bmi2’ |
‘cmov’ |
ARM
‘ARM’ |
---|
‘armv5te’ |
‘armv6’ |
‘armv6t2’ |
‘vfp’ |
‘vfpv3’ |
‘neon’ |
‘setend’ |
AArch64
‘AArch64’ |
---|
‘armv8’ |
‘vfp’ |
‘neon’ |
PowerPC
‘PowerPC’ |
---|
‘altivec’ |
Specific Processors
‘Specific Processors’ |
---|
‘pentium2’ |
‘pentium3’ |
‘pentium4’ |
‘k6’ |
‘k62’ |
‘athlon’ |
‘athlonxp’ |
‘k8’ |
3.3 AVOptions
这些选项由libavformat
,libavdevice
和libavcodec
库直接提供。 要查看可用AVOptions
列表,请使用-help
选项。 它们分为两类:
选项 | 解释 |
---|---|
‘generic’ | 可以为任何容器,编解码器或设备设置这些选项。 通用选项列在容器/设备的AVFormatContext 选项下,以及编解码器的AVCodecContext 选项下。 |
‘private’ | 这些选项特定于给定的容器,设备或编解码器。 私有选项列在其相应的容器/设备/编解码器下。 |
例如,要将ID3v2.3标头而不是默认ID3v2.4写入MP3文件,请使用MP3 muxer的“id3v2_version”
私有选项:
示例代码 |
---|
ffmpeg -i input.flac -id3v2_version 3 out.mp3 |
所有编解码器AVOptions
都是每个流,因此应该将流说明符附加到它们。
注意:'-nooption'
语法不能用于 boolean
类型的 AVOptions
,请使用'-option 0'/' - option 1'
。
注意:通过将v / a / s
添加到选项名称来指定每个流AVOptions
的旧的未记录方式现在已过时,很快就会被删除。
3.4 Main options
-x width
强制显示宽度。
-y height
强制显示高度。
-s size
设置不包含具有原始YUV的帧大小的标题的视频所需的帧大小(WxH或缩写)。 此选项已被弃用,有利于私有选项,请尝试-video_size
。
-fs
以全屏模式启动。
-an
禁用音频。
-vn
禁用视频。
-sn
禁用字幕。
-ss pos’
寻求pos
。 请注意,在大多数格式中,不可能完全搜索,因此ffplay
将寻找到最近的搜索点到pos
。
pos必须是持续时间规范,详情参见:(ffmpeg-utils)time duration syntax。
-t duration
播放音频/视频的持续时间。
duration必须是持续时间规范,请参阅 (ffmpeg-utils)time duration syntax。
-bytes
按字节搜索。
-nodisp
禁用图形显示。
-noborder
无边框窗口。
-volume
设置启动卷。 0表示静音,100表示无音量减小或放大。 负值被视为0,大于100的值被视为100。
-f fmt
强制格式。
-window_title title
设置窗口标题(默认为输入文件名)。
-loop number
循环播放电影<number>次。 0意味着无限循环。
-showmode mode
设置要使用的节目模式。 模式的可用值为:
可用的模式 | 解释 |
---|---|
‘0, video’ | 显示视频 |
‘1, waves’ | 显示音频波 |
‘2, rdft’ | 使用RDFT((反向)实离散傅立叶变换)显示音频频段 |
默认值为video
,如果视频不存在或无法播放,则自动选择rdft
。
可以通过按<w>键以交互方式循环显示可用的显示模式。
-vf filtergraph
创建filtergraph
指定的filtergraph
并使用它来过滤视频流。
filtergraph
是要应用于流的filtergraph
的描述,并且必须具有单个视频输入和单个视频输出。 在filtergraph
中,输入与标签输入相关联,输出与标签输出相关联。 有关filtergraph
语法的更多信息,请参阅ffmpeg-filters
手册。
可以多次指定此参数,并通过按键<w>循环显示指定的滤波器图形以及显示模式。
-af filtergraph
filtergraph
是要应用于输入音频的filtergraph
的描述。 使用选项“-filters”
显示所有可用的过滤器(包括源和接收器)。
-i input_url
阅读input_url
。
3.5 Advanced options
-pix_fmt format
设置像素格式。 此选项已被弃用,有利于私有选项,try -pixel_format
。
-stats
打印多个回放统计信息,特别是显示流持续时间,编解码器参数,流中的当前位置以及音频/视频同步漂移。 默认情况下,要显式禁用它,您需要指定-nostats
。
-fast
不符合规范的优化。
-genpts
生成pts。
-sync type’
将主时钟设置为音频(类型=音频),视频(类型=视频)或外部(类型= ext)。 默认是音频。 主时钟用于控制音频 - 视频同步。 大多数媒体播放器使用音频作为主时钟,但在某些情况下(流媒体或高质量广播),有必要改变它。 此选项主要用于调试目的。
-ast audio_stream_specifier
使用给定的流说明符选择所需的音频流。 Stream说明符章节中描述了流说明符。 如果未指定此选项,则在已选择的视频流的节目中选择“最佳”音频流。
-vst video_stream_specifier
使用给定的流说明符选择所需的视频流。 Stream说明符章节中描述了流说明符。 如果未指定此选项,则选择“最佳”视频流。
-sst subtitle_stream_specifier
使用给定的流说明符选择所需的字幕流。 Stream说明符章节中描述了流说明符。 如果未指定该选项,则在已选择的视频或音频流的节目中选择“best”字幕流。
-autoexit
视频播放完毕后退出。
-exitonkeydown
如果按任何键,则退出。
-exitonmousedown
如果按下任何鼠标按钮,则退出。
-codec:media_specifier codec_name
强制由media_specifier标识的流的特定解码器实现,其可以假设值a(音频),v(视频)和s字幕。
-acodec codec_name
强制特定的音频解码器。
-vcodec codec_name
强制特定的视频解码器。
-scodec codec_name
强制使用特定的字幕解码器。
-autorotate
根据文件元数据自动旋转视频。 默认情况下启用,使用'-noautorotate'禁用它。
-framedrop
如果视频不同步,则丢弃视频帧。 如果主时钟未设置为视频,则默认启用。 使用此选项为所有主时钟源启用帧丢弃,使用'-noframedrop'
禁用它。
-infbuf
不要限制输入缓冲区大小,尽快从输入中读取尽可能多的数据。 默认情况下为实时流启用,如果未及时读取数据,则可能会丢弃数据。 使用此选项为所有输入启用无限缓冲区,使用'-noinfbuf'
禁用它。
3.6 While playing
<q, ESC>
退出。
<f>
切换全屏。
<p, SPC>
暂停。
<m>
切换静音。
<9, 0>
分别减少和增加音量。
</, *>
分别减少和增加音量。
<a>
在当前程序中循环音频通道。
<v>
循环视频频道。
<t>
在当前程序中循环字幕通道。
<c>
循环计划。
<w>
循环视频过滤器或显示模式。
<s>
步入下一帧。
如果流尚未暂停,则暂停,跳到下一个视频帧,然后暂停。
<left/right>
向后/向前10秒。
<down/up>
向后/向前1分钟。
<page down/page up>
寻求上一个/下一个章节。 或者如果没有章节向后/向前10分钟。
<right mouse click>
寻找与宽度分数对应的文件中的百分比。
<left mouse double-click>
切换全屏。