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

一、概述

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

二、主要内容

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参数查询具体可用参数,它们分为以下几个类别:
通用参数
      这些参数可以为任意的容器,编码解码器或者设备设置。容器和设备的通用参数在AVFormatContext参数下列出,编码解码器的参数在AVCodecContext参数下列出。
私有参数
      这些参数用于特定的容器,设备或者编码解码器。私有参数在对应的容器,设备和编码解码器下列出。例如,向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,唯一不同的它的参数是从过滤器图表读取的文件名

后面将会继续讲解音视频参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值