ffmpeg命令行工具

作者: 你家旭哥 | 来源:发表于2018-02-28 15:47 被阅读1686次

    1.简介

    ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...

    2.描述

    ffmpeg是一款非常快速的视频和音频转换器,可以从现场音频/视频源获取。它还可以在任意采样率之间进行转换,并通过高质量的多相滤波器实时调整视频大小。

    ffmpeg从任意数量的由-i选项指定的输入“文件”(可以是常规文件,管道,网络流,抓取设备等)中读取,并写入任意数量的输出“文件”,其中由一个普通的输出url指定。任何在命令行中发现的不能被解释为选项的东西都被认为是输出url。

    原则上,每个输入或输出url都可以包含任意数量的不同类型的视频流(视频/音频/字幕/附件/数据)。流的允许数量和/或类型可能受容器格式的限制。选择哪些输入流将自动进入哪个输出或使用-map选项进行(请参见流选择章节)。

    要引用选项中的输入文件,您必须使用它们的索引(从0开始)。例如。第一个输入文件是0,第二个输入文件是1,等等。类似地,文件内的流被它们的索引引用。例如。 2:3是指第三个输入文件中的第四个流。另请参阅流说明符一章。

    作为一般规则,选项将应用于下一个指定的文件。因此,顺序很重要,您可以多次在命令行上使用相同的选项。然后将每个事件应用于下一个输入或输出文件。该规则的例外是全局选项(例如详细级别),应该首先指定它们。

    不要混合输入和输出文件 - 首先指定所有输入文件,然后指定所有输出文件。也不要混合属于不同文件的选项。所有选项仅适用于下一个输入或输出文件,并在文件之间重置。

    • 要将输出文件的视频比特率设置为64 kbit / s:
      ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
    • 要强制输出文件的帧频为24 fps:
      ffmpeg -i input.avi -r 24 output.avi
    • 要强制输入文件的帧速率(仅适用于原始格式)为1 fps,输出文件的帧速率为24 fps:
      ffmpeg -r 1 -i input.m2v -r 24 output.avi
      原始输入文件可能需要format选项。

    3.详细的描述

    ffmpeg中每个输出的代码转换过程可以用下图来描述:


    转换过程

    ffmpeg调用libavformat库(包含demuxers)来读取输入文件并获取包含编码数据的数据包。当有多个输入文件时,ffmpeg会尝试通过跟踪任何活动输入流上的最低时间戳来使它们保持同步。

    然后将编码的数据包传递给解码器(除非为数据流选择了流拷贝,请参阅进一步的描述)。解码器产生未压缩的帧(原始视频/ PCM音频/ ...),可以通过滤波进一步处理(参见下一节)。在过滤之后,帧被传递给编码器,编码器对其进行编码并输出编码分组。最后,这些传递给复用器,将编码的数据包写入输出文件。

    3.1滤波(过滤)

    在编码之前,ffmpeg可以使用libavfilter库中的过滤器处理原始音频和视频帧。几个链式过滤器形成一个过滤器图形。 ffmpeg区分两种类型的过滤器图形:简单和复杂。

    3.1.1简单的过滤器图文

    简单的过滤器图就是那些只有一个输入和输出,都是相同类型的过滤器图。在上图中,它们可以通过简单地在解码和编码之间插入额外的步骤来表示:


    简单的过滤器

    简单的filtergraphs配置了per-stream-filter选项(分别为视频和音频使用-vf和-af别名)。一个简单的视频滤镜可以看起来像这样:


    简单的视频滤镜

    请注意,某些滤镜会更改帧属性,但不会改变帧内容。例如。上例中的fps过滤器会更改帧数,但不会触及帧内容。另一个例子是setpts过滤器,它只设置时间戳并以其他方式传递帧。

    3.1.2复杂的过滤器图

    复杂的过滤器图是那些不能简单描述为应用于一个流的线性处理链的过滤器图。例如,当图形有多个输入和/或输出,或者输出流类型与输入不同时,就是这种情况。它们可以用下图表示:


    复杂的过滤器

    复杂的过滤器图使用-filter_complex选项进行配置。请注意,此选项是全局性的,因为复杂的过滤器图形本质上不能与单个流或文件明确关联。

    -lavfi选项等同于-filter_complex。

    一个复杂的过滤器图的简单例子是覆盖过滤器,它有两个视频输入和一个视频输出,其中包含一个叠加在另一个之上的视频。它的音频对应是amix滤波器。

    3.2 流拷贝

    流复制是通过将复制参数提供给-codec选项来选择的模式。它使ffmpeg省略了指定流的解码和编码步骤,因此它只进行解复用和混合。这对于更改容器格式或修改容器级元数据很有用。在这种情况下,上图将简化为:


    流复制

    由于没有解码或编码,因此速度非常快,并且没有质量损失。但是,由于许多因素,它在某些情况下可能不起作用。应用过滤器显然也是不可能的,因为过滤器处理未压缩的数据。

    4.流选择

    默认情况下,ffmpeg只包含输入文件中每种类型(视频,音频,字幕)的一个流,并将它们添加到每个输出文件。它根据以下标准挑选每一个的“最佳”:对于视频,它是具有最高分辨率的流,对于音频,它是具有最多频道的流,对于字幕,它是第一个字幕流。在多个相同类型的码流相同的情况下,选择具有最低索引的码流。
    您可以通过使用-vn / -an / -sn / -dn选项来禁用某些默认设置。要进行全面的手动控制,请使用-map选项,该选项禁用刚描述的默认设置。

    5.选项

    所有数字选项(如果未另外指定的话)都接受一个表示数字的字符串作为输入,其后可能跟着一个SI单位前缀,例如:'K','M'或'G'。

    如果'i'被附加到SI单元前缀,则完整前缀将被解释为二进制倍数的单位前缀,其基于1024的幂而不是1000的幂。将“B”附加到SI单元前缀将乘以值为8.这允许使用,例如:'KB','MiB','G'和'B'作为数字后缀。

    不带参数的选项是布尔选项,并将相应的值设置为true。可以通过在选项名称前加上“no”来将它们设置为false。例如,使用“-nofoo”将名称为“foo”的布尔选项设置为false。

    5.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]
    如果给出stream_index,则它将程序中编号为stream_index的流与id为program_id的流进行匹配。否则,它会匹配程序中的所有流。

    #stream_id or i:stream_id
    通过流ID匹配流(例如MPEG-TS容器中的PID)。

    m:key[:value]
    使用具有指定值的元数据标签密钥匹配流。如果没有给出值,则将包含给定标签的流与任何值进行匹配。

    u
    匹配具有可用配置的流,必须定义编解码器并且必须存在诸如视频维度或音频采样率的基本信息。

    请注意,在ffmpeg中,元数据匹配仅适用于输入文件。

    5.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的复用器的详细信息。使用-formats选项可以获得所有muxers和demuxers的列表。
    filter=filter_name
    打印有关过滤器名称filter_name的详细信息。使用-filters选项可以获取所有过滤器的列表。

    -version 版本内容

    -formats 显示可用的格式(包括设备)。

    -demuxers 显示可用的分流器。

    -muxers 显示可用的复用器。

    -devices 显示可用的设备。

    -codecs
    显示libavcodec已知的所有编解码器。
    请注意,本文档中使用术语'编解码器'作为更正确称为媒体比特流格式的快捷方式。

    -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 [repeat+]loglevel | -v [repeat+]loglevel
    设置库使用的日志记录级别。添加“repeat +”表示重复的日志输出不应压缩到第一行,并且“Last message repeated n times”行将被省略。 “重复”也可以单独使用。如果单独使用“重复”,并且没有设置以前的日志级别,则将使用默认的日志级别。如果给出多个loglevel参数,则使用'repeat'将不会更改日志级别。 loglevel是包含以下值之一的字符串或数字:
    ‘quiet, -8’
    什么都不显示;安静。
    ‘panic, 0’
    只显示可能导致进程崩溃的致命错误,如断言失败。这目前不用于任何事情。
    ‘fatal, 8’
    只显示致命错误。这些错误之后,这个过程绝对不能继续。
    ‘error, 16’
    显示所有错误,包括可以从中恢复的错误。
    ‘warning, 24’
    显示所有警告和错误。任何与可能不正确或意外事件相关的消息都将显示。
    'info,32'
    在处理过程中显示信息性消息。这是除了警告和错误。这是默认值。
    ‘verbose, 40’
    与info相同,但更详细。
    ‘debug, 48’
    显示一切,包括调试信息。
    ‘trace, 56’
    默认情况下程序会记录到stderr。如果终端支持着色,则会使用颜色标记错误和警告。可以禁用日志着色设置环境变量AV_LOG_FORCE_NOCOLOR或NO_COLOR,或者可以强制设置环境变量AV_LOG_FORCE_COLOR。不推荐使用环境变量NO_COLOR,并将在未来的FFmpeg版本中删除。

    -report
    将完整的命令行和控制台输出转储到当前目录中名为program-YYYYMMDD-HHMMSS.log的文件中。此文件可用于错误报告。它也意味着-loglevel冗长。
    将环境变量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’
    ‘mmx’
    ‘mmxext’
    ‘sse’
    ‘sse2’
    ‘sse2slow’
    ‘sse3’
    ‘sse3slow’
    ‘ssse3’
    ‘atom’
    ‘sse4.1’
    ‘sse4.2’
    ‘avx’
    ‘avx2’
    ‘xop’
    ‘fma3’
    ‘fma4’
    ‘3dnow’
    ‘3dnowext’
    ‘bmi1’
    ‘bmi2’
    ‘cmov’
    ‘ARM’
    ‘armv5te’
    ‘armv6’
    ‘armv6t2’
    ‘vfp’
    ‘vfpv3’
    ‘neon’
    ‘setend’
    ‘AArch64’
    ‘armv8’
    ‘vfp’
    ‘neon’
    ‘PowerPC’
    ‘altivec’
    ‘Specific Processors’
    ‘pentium2’
    ‘pentium3’
    ‘pentium4’
    ‘k6’
    ‘k62’
    ‘athlon’
    ‘athlonxp’
    ‘k8’

    5.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的旧未公开方式现在已过时,并且很快就会被移除。

    5.4主要选项

    -f fmt(输入/输出)
    强制输入或输出文件格式。格式通常是自动检测输入文件并从输出文件的文件扩展名中猜测出来的,所以在大多数情况下这个选项是不需要的。

    -i url(输入)
    输入文件的网址

    -y(global)
    覆盖输出文件而不询问。

    -n(global)
    不要覆盖输出文件,如果指定的输出文件已经存在,请立即退出。

    -stream_loop编号(输入)
    设置输入流应循环的次数。循环0意味着没有循环,循环-1意味着无限循环。

    -c[:stream_specifier] 编解码器(输入/输出,每个流)

    -codec[:stream_specifier] 编解码器(输入/输出,每个流)
    选择一个编码器(当在输出文件之前使用)或解码器(当在输入文件之前使用时)用于一个或多个流。编解码器是解码器/编码器的名称或特殊值副本(仅输出)以表明该流不会被重新编码。
    ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT
    使用libx264编码所有视频流并复制所有音频流。
    对于每个流,都会应用最后匹配的c选项
    ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT
    将复制除了第二个视频(其将用libx264编码)和第138个音频(其将用libvorbis编码)之外的所有流。

    -t 持续时间(输入/输出)
    当用作输入选项时(在-i之前),限制从输入文件读取数据的持续时间。
    当用作输出选项时(在输出url之前),在持续时间达到持续时间后停止输出。
    持续时间必须是持续时间规范,请参阅ffmpeg-utils(1)手册中的(ffmpeg-utils)持续时间部分。
    -to和-t是互斥的,-t优先。

    -to 位置 (输入/输出)
    停止写入输出或在位置读取输入。位置必须是持续时间规范,请参阅ffmpeg-utils(1)手册中的(ffmpeg-utils)“持续时间”部分。
    -to和-t是互斥的,-t优先。

    -fs 限制大小 (output)
    设置文件大小限制,以字节表示。超出限制后不会写入更多字节。输出文件的大小略大于请求的文件大小。

    -ss 位置 (input/output)
    当用作输入选项(在-i之前)时,会在此输入文件中寻找位置。请注意,在大多数格式中,无法准确查找,因此ffm​​peg会在位置前寻找最近的搜索点。当转码和-accurate_seek被启用(默认)时,搜索点和位置之间的这个额外片段将被解码并丢弃。在进行流式复制或使用-noaccurate_seek时,它将被保留。
    当用作输出选项时(在输出url之前),解码但丢弃输入,直到时间戳到达位置。
    位置必须是持续时间规范,请参阅ffmpeg-utils(1)手册中的(ffmpeg-utils)“持续时间”部分。.

    -sseof 位置 (input/output)
    像-ss选项一样,但相对于“文件结尾”。这是文件中较早的负值,0表示EOF。

    -itsoffset 偏移 (input)
    设置输入时间偏移。
    偏移量必须是持续时间规范,请参阅ffmpeg-utils(1)手册中的(ffmpeg-utils)Time duration部分。
    偏移量被添加到输入文件的时间戳中。指定正偏移量意味着相应的流延迟了偏移量中指定的持续时间。

    -timestamp 时间 (output)
    在容器中设置录制时间戳。
    日期必须是日期规范,请参阅(ffmpeg-utils)ffmpeg-utils(1)手册中的日期部分。

    -metadata[:metadata_specifier] key=value (output,per-metadata)
    设置元数据键/值对。
    可以给出可选的metadata_specifier来设置流,章节或程序的元数据。有关详细信息,请参阅-map_metadata文档。
    该选项覆盖使用-map_metadata设置的元数据。也可以通过使用空值来删除元数据。
    例如,在输出文件中设置标题:
    ffmpeg -i in.avi -metadata title="my title" out.flv
    要设置第一个音频流的语言:
    ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT

    -disposition[:stream_specifier] value (output,per-stream)
    设置流的配置。
    此选项覆盖从输入流复制的配置。也可以通过将其设置为0来删除处置。
    以下设置是有效的:
    default
    dub
    original
    comment
    lyrics
    karaoke
    forced
    hearing_impaired
    visual_impaired
    clean_effects
    captions
    descriptions
    metadata
    例如,要将第二个音频流设置为默认流:
    ffmpeg -i in.mkv -disposition:a:1 default out.mkv
    要将第二个字幕流设置为默认流,并从第一个字幕流删除默认处置:
    ffmpeg -i INPUT -disposition:s:0 0 -disposition:s:1 default OUTPUT

    -program [title=title:][program_num=program_num:]st=stream[:st=stream...] (output)
    使用指定的标题program_num创建一个程序并将指定的流添加到该程序中。

    -target type (output)
    指定目标文件类型(vcd,svcd,dvd,dv,dv50)。类型可能带有pal-,ntsc-或film-前缀,以使用相应的标准。所有的格式选项(比特率,编解码器,缓冲区大小)都会自动设置。你可以输入ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
    尽管如此,只要您知道它们不与标准冲突,您可以指定其他选项,如下所示:ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg

    -dn (output)
    禁用数据记录。有关完整的手动控制,请参阅-map选项。

    -dframes number (output)
    设置要输出的数据帧的数量。对于-frames:d,这是一个过时的别名,您应该使用它。

    -frames[:stream_specifier] framecount (output,per-stream)
    停止在帧计数帧之后写入流。

    -q[:stream_specifier] q (output,per-stream)

    -qscale[:stream_specifier] q (output,per-stream)
    使用固定质量等级(VBR)。 q / qscale的含义是编解码器相关的。如果qscale在没有stream_specifier的情况下使用,那么它仅适用于视频流,这是为了保持与先前行为的兼容性,并且为音频和视频的2种不同编解码器指定了相同的编解码器特定值,而这通常不是当没有stream_specifier用来。

    -filter[:stream_specifier] filtergraph (output,per-stream)
    创建由filtergraph指定的过滤器图并使用它过滤流。
    filtergraph是要应用于流的filtergraph的描述,并且必须具有相同类型流的单个输入和单个输出。在过滤器图中,输入与标签相关联,标签输出与标签相关联。有关filtergraph语法的更多信息,请参阅ffmpeg-filters手册。
    如果要创建具有多个输入和/或输出的过滤器图形,请参阅-filter_complex选项。

    -filter_script[:stream_specifier] filename (output,per-stream)
    该选项与-filter类似,唯一的区别是它的参数是要从中读取filtergraph描述的文件的名称。

    -filter_threads nb_threads (global)
    定义用于处理过滤器管道的线程数。每个管道都会产生一个线程池,并有多个线程可用于并行处理。缺省值是可用CPU的数量。

    -pre[:stream_specifier] preset_name (output,per-stream)
    为匹配的流指定预设。

    -stats (global)
    打印编码进度/统计。默认情况下,要明确禁用它,你需要指定-nostats。

    -progress url (global)
    将适合程序的进度信息发送至网址。
    进度信息大约每秒钟都在编码过程结束时写入。它由“key = value”行组成。密钥仅包含字母数字字符。进度信息序列的最后一个关键始终是“进度”。

    -stdin
    在标准输入上启用交互。默认情况下,除非将标准输入用作输入。要明确禁用交互,您需要指定-nostdin。
    例如,如果ffmpeg位于后台进程组中,禁用标准输入交互很有用。用ffmpeg ...可以实现相同的结果... </ dev / null但是它需要一个shell。

    -debug_ts (global)
    打印时间戳信息。它默认关闭。此选项主要用于测试和调试目的,并且输出格式可能会从一个版本更改为另一个版本,因此它不应该被可移植脚本使用。
    另见选项-fdebug ts。

    -attach filename (output)
    将附件添加到输出文件。这可以通过Matroska等几种格式来支持,例如字幕中使用的字体。附件是作为特定类型的流实现的,因此该选项将为该文件添加一个新流。然后就可以以通常的方式在这个流上使用每个流选项。使用此选项创建的附件流将在所有其他流(即使用-map或自动映射创建的流)之后创建。
    请注意,对于Matroska,您还必须设置mimetype元数据标记:
    ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv(假设附件流将在输出文件中排在第三位)

    -dump_attachment[:stream_specifier] filename (input,per-stream)
    将匹配的附件流提取到名为filename的文件中。如果filename为空,则将使用文件名元数据标记的值。
    例如。将第一个附件提取到名为“out.ttf”的文件中:
    ffmpeg -dump_attachment:t:0 out.ttf -i INPUT
    将所有附件提取到由文件名标记确定的文件中:
    ffmpeg -dump_attachment:t "" -i INPUT
    技术说明 - 附件实现为编解码器extradata,因此该选项实际上可用于从任何流中提取额外数据,而不仅仅是附件。

    -noautorotate
    根据文件元数据禁用自动旋转视频。

    5.5 Video Options

    -vframes number (output)
    设置要输出的视频帧数。对于-frames:v,这是一个过时的别名,您应该使用它。

    -r[:stream_specifier] fps (input/output,per-stream)
    设置帧率(Hz值,分数或缩写)。作为输入选项,忽略存储在文件中的任何时间戳,而是生成时间戳,假设帧速率为fps。这与用于某些输入格式(如image2或v4l2)的-framerate选项不同(它在FFmpeg的旧版本中与以前版本相同)。如果有疑问,请使用-framerate而不是输入选项-r。
    作为输出选项,复制或丢弃输入帧以实现恒定输出帧频fps。

    -s[:stream_specifier] size (input/output,per-stream)
    设置框架大小。
    作为输入选项,这是video_size专用选项的快捷方式,由某些分帧器识别,其帧大小未存储在文件中或可配置 - 例如,原始视频或视频采集卡。
    作为输出选项,它将缩放视频过滤器插入到相应过滤器图形的末尾。请直接使用比例过滤器将其插入开始或其他地方。
    格式为'wxh'(默认 - 与源相同)。

    -aspect[:stream_specifier] aspect (output,per-stream)
    设置方面指定的视频显示宽高比。
    aspect可以是浮点数字符串,也可以是num:den形式的字符串,其中num和den是高宽比的分子和分母。例如“4:3”,“16:9”,“1.3333”和“1.7777”是有效的参数值。
    如果与-vcodec副本一起使用,它将影响存储在容器级别的宽高比,但不会影响存储在编码帧中的宽高比(如果存在)。

    -vn (output)
    禁用视频录制。有关完整的手动控制,请参阅-map选项。

    -vcodec codec (output)
    设置视频编解码器。这是-codec:v的别名。

    -pass[:stream_specifier] n (output,per-stream)
    选择通行证号码(1或2)。它被用来做两路视频编码。视频的统计信息会在第一阶段记录到日志文件中(另请参阅选项-passlogfile),并在第二阶段中使用日志文件以确切的请求比特率生成视频。在通过1时,您可以停用音频并将输出设置为空,例如Windows和Unix:
    ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL
    ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null

    -passlogfile[:stream_specifier] prefix (output,per-stream)
    将双向日志文件名前缀设置为前缀,默认文件名前缀为“ffmpeg2pass”。完整的文件名将是PREFIX-N.log,其中N是特定于输出流的数字

    -vf filtergraph (output)
    创建由filtergraph指定的过滤器图并使用它过滤流。
    这是-filter:v的别名,请参阅-filter选项。

    5.6 Advanced Video options

    -pix_fmt[:stream_specifier] format (input/output,per-stream)
    设置像素格式。使用-pix_fmts显示所有支持的像素格式。如果选择的像素格式不能被选择,ffmpeg会打印警告并选择编码器支持的最佳像素格式。如果pix_fmt前缀为+,则如果无法选择所请求的像素格式,则ffmpeg将退出,并显示错误,并禁用滤镜图片中的自动转换。如果pix_fmt是单个+,则ffmpeg会选择与输入(或图形输出)相同的像素格式,并禁用自动转换。

    -sws_flags flags (input/output)
    设置SwScaler标志。

    -vdt n
    放弃阈值。

    -rc_override[:stream_specifier] override (output,per-stream)
    速率控制覆盖特定时间间隔,格式为“int,int,int”列表,并用斜杠分隔。两个第一个值是开始和结束帧数,最后一个是量化器在正面使用,或者如果是负面,则使用质量因子。

    -ilme
    编码器强制隔行扫描支持(仅适用于MPEG-2和MPEG-4)。如果您的输入文件是交错的,并且您希望保持隔行格式以减少损失,请使用此选项。另一种方法是将输入流与-deinterlace解交错,但反交错引入了损失。

    -psnr
    计算压缩帧的PSNR。

    -vstats
    将视频编码统计信息转储到vstats_HHMMSS.log。

    -vstats_file file
    将视频编码统计信息转储到文件。

    -vstats_version file
    指定要使用哪个版本的vstats格式。缺省值是2。
    version = 1 :
    frame= %5d q= %2.1f PSNR= %6.2f f_size= %6d s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s
    version > 1:
    out= %2d st= %2d frame= %5d q= %2.1f PSNR= %6.2f f_size= %6d s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s

    -top[:stream_specifier] n (output,per-stream)
    top = 1 / bottom = 0 / auto = -1字段在前

    -dc precision
    Intra_dc_precision.

    -vtag fourcc/tag (output)
    强制视频标签/ fourcc。这是-tag:v的别名。

    相关文章

      网友评论

        本文标题:ffmpeg命令行工具

        本文链接:https://www.haomeiwen.com/subject/muibxftx.html