您的位置:首页 > 其它

FFmpeg命令行工具系列三---参数详解

2015-04-04 18:42 274 查看

一、概述

接下来的几章都会讲解参数,参数分为通用参数、主要参数、视频参数、音频参数和字幕参数。作者不企图做到大而全,因为完全可以通过查找官网文档而学习某个特定的参数,所以之后会把重点放在音视频的参数。

二、主要内容

1.前言

所有的数字参数,如果没有特别说明,都以相应的字符串作为数字,可能会包含国际标准单位(SI unit)前缀,比如:'K','M','G'。如果'i'追加在国际标准单位前缀后,整个单位都会被认为乘的是2,即基于1024而不是1000,添加'B'则表示是8,例如:'KB','MiB','G','B'。不带参数项的参数是布尔参数,它设置相应的值为true。通过添加'no'可以将其设置为false。例如:'-nofoo'将参数'foo'设置的值为false。

2.流说明符

一些参数适用于单个流,如bitrate或者codec。流说明符用于精确地指定参数属于哪个流。一个流说明符字符串通常附加在参数后面,以冒号分隔。例如:-codec:a:1 ac3 包含'a:1'流说明符,它指的是第二个音频流(a代表audio,序号以0开头)。因此,它会为第二个音频流选择ac3编码解码器。(ac3是一种音频编码方式)。一个流说明符可以匹配多个流,例如:-b:a
128K匹配所有的音频流。一个空的流说明符匹配所有的流。例如:-codec copy 或者-codec:copy会复制所有的流,而不会进行再编码。

一些常用的流说明符有:

1、stream_index

匹配给定序号的流,例如:-threads:1 4会将第二个流的线程数设为4.

2、stream_type[:stream_index]

stream_type是以下几种形式:v 视频,a 音频,s 字幕,d 数据,t 附件。如果已经给定了流序号,那么它将匹配给定类型的流序号的流。否则,它将匹配所有该类型的流。

3、p:program_id[:stream_index]

如果给定了流序号,它将会匹配program_id的流序号为stream_index的流。否则匹配所有程序中的流。

4、#stream_id or i:stream_id

通过流id匹配流,例如:MPEG-TS容器中的PID

5、m:key[:value]

匹配给定值的metadata标签值的流。如果没有给定值,则匹配给定标签的所有流。

6、u

匹配可用配置的流,编码解码器必须定义,而且要给出必要的信息,例如视频尺寸,音频采样率。必须注意在ffmpeg中,只有输入才可以用metadata来匹配。

3.音视频参数

这些参数由libavformat, libavdevice 和 libavcodec库提供。可以通过-help参数查询具体可用参数,它们分为以下几个类别:

通用参数

这些参数可以为任意的容器,编码解码器或者设备设置。容器和设备的通用参数在***FormatContext参数下列出,编码解码器的参数在***CodecContext参数下列出。

私有参数

这些参数用于特定的容器,设备或者编码解码器。私有参数在对应的容器,设备和编码解码器下列出。例如,向mp3文件写入ID3V2.3标签(ID3标签是MP3音乐档案中的歌曲附加讯息,它能够在MP3中附加曲子的演出者、作者以及其它类别资讯,方便众多乐曲的管理。缺少ID3标签并不会影响 MP3的播放,但若没有的话,管理音乐文件也会相当的麻烦。),使用MP3 muxer的id3v2_version参数:

ffmpeg -i input.flac -id3v2_version 3 out.mp3

所有的编码解码中的音视频参数是针对单个流的,因此流说明符应该紧跟着它们。

注意:-nooption语法不能用于布尔类型的音视频参数,请使用-option 1或者-option 0.

4.主要的参数

-i filename (input)

输入文件名

-y (global)

不经过询问就覆盖输出文件

-n (global)

与-y相反,不覆盖,立即退出

-c[:stream_specifier] codec (input/output,per-stream)

-codec[:stream_specifier] codec (input/output,per-stream)

为一个或多个输出选择一个编码器,为一个或多个输入选择一个解码器。codec是编码解码器的名称,一个值指示流不需要编码(针对输出)。例如:

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编码,libx264是一种视频的编码方式。第138个音频会以libvorbis编码,libvorbis是一种ogg音频的编码方式)

-t duration (input/output)

当在-i前使用时,用于截取给定时间间隔的输入文件。

当在输出文件前使用时,将在间隔达到时停止输出。时间间隔可以以秒为单位,也可以是hh:mm:ss[.xxx]格式。

-to和-t互斥,并且-t优先级高。

-to position (output)

在给定位置停止输出,位置参数必须是以秒为单位的数字或者hh:mm:ss[.xxx]格式。

-fs limit_size (output)

设置文件大小限制,以byte做单位。

-itsoffset offset (input)

设置输入时间偏移

偏移必须是时间间隔([-][HH:]MM:SS[.m...]或者秒),偏移被加在输入文件的时间戳上。正偏移意味着画面将会延迟给定时间间隔。

-timestamp date (output)

在容器中设置录制的时间戳.日期必须是时间间隔。([(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z]now)

-dframes number (output)

设置输出的数据帧个数,等同于-frames:d

-frames[:stream_specifier] framecount (output,per-stream)

在framecount个数据帧之后停止输出。

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

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

使用固定的质量比(通过VBR实现),这个可以保证质量不损失。

-filter[:stream_specifier] filtergraph (output,per-stream)

创建过滤器图表,并过滤流,用于单个输入和输出,并且是同样的类型。

-filter_script[:stream_specifier] filename (output,per-stream)

类似于-filter,唯一不同的它的参数是从过滤器图表读取的文件名

后面将会继续讲解音视频参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: