ffmpeg中文文档.docx
- 文档编号:5552989
- 上传时间:2022-12-19
- 格式:DOCX
- 页数:18
- 大小:38.57KB
ffmpeg中文文档.docx
《ffmpeg中文文档.docx》由会员分享,可在线阅读,更多相关《ffmpeg中文文档.docx(18页珍藏版)》请在冰豆网上搜索。
ffmpeg中文文档
ffmpeg中文文档
转自:
https:
//wanglongqi.github.io/tools/2015/02/13/ffmpegcn/
1.概要ffmpeg[global_options]{[input_file_options]-iINPUT_FILE}...{[output_file_options]OUTPUT_FILE}...2.说明ffmpeg是一个非常快的视频和音频转换器,还可以抓取实时的音频/视频流。
它可以在任意的采样率之间的转换和调整视频,并同时使用高品质的多相滤波器。
ffmpeg从输入“文件”(其可以是常规文件,管道,网络流,录制装置等),由指定任意数量的读取-i选项,并写入到任意数量的输出“文件”,只需指定一个输出的文件名。
任何一个命令行中不能被解释为选项的内容都被认为是一个输出文件名。
每个输入或输出文件可以在原则上,包含任意数量的不同类型(视频/音频/字幕/附件/数据)的流。
输出文件中允许流的数量和类型是由输出格式容器限制决定的。
输入流和输出流直接的映射可以自动完成也可以用-map选项给定(见流选择章节)。
引用输入文件的选项时,则必须使用他们的索引(从0开始)。
例如:
第一输入文件是0,第二个是1等。
类似地,一个文件中的流也通过其索引指定。
例如2:
3指的是在第三个输入文件中的第四数据流。
参见流章节。
作为一般规则,选项作用于下一个指定的文件。
因此,命令的顺序是重要,你可以在命令行上多次相同的选项。
每次选项的出现都将作用于下一个输入或输出文件。
这条规则若有例外将会提前声明(例如冗余级别)。
不要混合输入和输出文件。
首先指定所有输入文件,那么所有的输出文件。
也不要混用属于不同的文件的选项。
所有选项仅适用于下一个输入或输出文件,之后选项将被重置。
设置输出文件以64千比特/秒的视频比特率:
ffmpeg-iinput.avi-b:
V64K-bufsize64Koutput.avi要强制输出文件为24fps的帧速率:
ffmpeg-iinput.avi-r24output.avi要强制输入文件的帧频(仅对原始格式有效),以1FPS读入文件,以每秒24帧的帧速率输出:
ffmpeg-r1-iinput.m2v-r24output.aviformat选项可能需要指定,对于原始输入文件。
3.详细描述在转码过程ffmpeg每个输出可以由以下图描述:
_____________________
||||
|input|demuxer|encodeddata|decoder
|file|--------->|packets|-----+
|_______||______________||
v
_________
||
|decoded|
|frames|
|_________|
______________________|
|||||
|output|<--------|encodeddata|<----+
|file|muxer|packets|encoder
|________||______________|
ffmpeg调用libavformat库(含分流器)来读取输入文件并获得含有他们编码信息的数据包。
当有多个输入文件,ffmpeg将通过跟踪最小的时间戳来试图在所有活跃的输入流间同步。
编码的数据包然后被传递到解码器(除非复制音频流被选择用于流,见进一步的说明)。
解码器产生的未压缩的帧(原始视频/PCM音频/…),它可以进一步通过滤镜进行处理(见下一节)。
通过滤镜后,这些帧被传递到编码器,编码器将其编码并输出编码后的数据包。
最后,这些将被传输给混合器以将编码数据写入到输出文件。
3.1滤镜在编码之前,ffmpeg可以使用libavfilter库中的滤镜处理原始的音频和视频帧。
几个连接的滤镜可以形成一个滤镜组(filtergraphs)。
ffmpeg有两种filtergraphs:
简单和复杂。
3.1.1简单filtergraphs简单filtergraphs是那些具有相同的类型且正好一个输入和输出的滤镜组。
另外,在上图中,他们可以由简单地在解码和编码之间插入附加步骤来表示:
_______________________
||||
|decoded||encodeddata|
|frames|\_|packets|
|_________|\/||______________|
\__________/
simple_\|||/encoder
filtergraph|filtered|/
|frames|
|__________|
简单filtergraphs配置了每个流的筛选器选项(与视频和音频分别-vf和-af别名)。
一个简单的FilterGraph动态视频可以看一下这样的例子:
___________________________________
||||||||
|input|--->|deinterlace|--->|scale|--->|output|
|_______||_____________||_______||________|
需要注意的是一些滤镜改变帧属性而不是画面的内容。
例如,在上例中,fps改变帧的数量,但不触及帧的内容。
又如setpts滤镜,其仅设置时间戳而保持帧不变。
3.1.2复杂filtergraphs复杂filtergraphs是那些不能被描述为简单的线性处理链的滤镜组。
例如,当滤镜组具有多个输入和/或输出,或当输出流的类型是不同于输入。
它们可以被表示为以下图:
_________
||
|input0|\__________
|_________|\||
\_________/|output0|
\||/|__________|
_________\|complex|/
||||/
|input1|---->|filter||_________|||\__________
/|graph|\||
/||\|output1|
_________/|_________||__________|
||/
|input2|/
|_________|
复杂filtergraphs可使用-filter_complex选项配置。
注意,此选项是全局性的,因为复杂FilterGraph,就其本质,不能明确地与单个流或文件相关联。
-lavfi选项相当于-filter_complex。
一个复杂FilterGraph动态的简单的例子是在overlay滤镜,它具有两个视频输入和一个视频输出,含有一个视频重叠在另一个的上面。
其对应的音频滤镜是amix。
3.2复制流复制流是通过添加copy选项到-codec选项完成的。
它使ffmpeg对指定的流忽略解码和编码步骤,所以它只能混合和拆包。
它用于改变所述容器的格式或修改容器级别的元数据是有用的。
在这种情况下,可以简化为这样:
_____________________________
||||||
|input|demuxer|encodeddata|muxer|output|
|file|--------->|packets|------->|file|
|_______||______________||________|
由于不存在解码或编码,它是非常快,没有质量损失。
然而因为许多因素的工作,它可能无法在某些情况下使用。
应用滤镜显然也是不可能的,因为滤镜仅能作用在未压缩的数据上。
4选择流默认情况下,ffmpeg只包含输入文件中每个类型流各一个(视频,音频,字幕),并将它们添加到每个输出文件。
它选择“最好”的每一个流基于以下标准:
用于视频,它选择最高分辨率的流;对于音频,它使用最多声道的流;对于字幕,它是第一个字幕流。
在相同类型中,参数相等的若干流中具有最低索引的流被选择。
您可以通过-vn/-an/-sn选项禁用其中的一些默认值。
若需全手动控制,请使用-map选项,它将禁用刚才所描述的默认设置。
5选项所有的数值选项中,如果不另外指明,均表示接受数作为输入,其后可添加一个SI单位的字符串,例如:
K,M,或G。
如果i被附加在SI单位,完整的前缀将被解释为一个单元前缀的二进制倍数,也即1024倍,而不是1000倍。
追加B可使数值增加8倍。
这允许使用,例如:
KB,MiB,G和B的数量后缀。
选项?
?
不带参数是布尔选项,并设置相应的值设置为true。
他们可以通过在选项前添加no来将选项设置为false。
例如使用-nofoo将设置名称为foo为假。
5.1流标识符有些选项是按流的,例如比特率或编解码器。
流标识符被用来精确地指定一个给定的选项作用于哪一个数据流(多个)。
一个标识符一般是选项名称加冒号分隔的字符串。
例如-codec:
a:
1ac3包含流标识符a:
1,它匹配第二音频流。
因此,将选择AC3编解码器的第二音频流。
一个标识符可以匹配多个流,这个选项将适用于所有流。
比如,流标识符-b:
a128k标识了所有的音频流。
空标识符匹配所有的流。
例如,-codeccopy或-codec:
copy会复制所有的数据流而不重新编码。
流标识符的可能形式有:
stream_index匹配与该索引对应的流。
例如-threads:
14将设置第二个流的线程计数为4。
stream_type[:
stream_index]流类型是下列字母之一:
v为视频,a为声音,s为字幕,d为数据,t为附件。
如果stream_index给出,则它匹配该类型的索引为stream_index的流。
否则,它匹配所有这种类型的流。
p:
program_id[:
stream_index]如果给定stream_index,那其将与在与ID为program_id的program的stream_index的流相匹配。
否则,它将匹配在program_id中的所有流。
#stream_id或者i:
stream_id按流索引逐一匹配流(如在MPEG-TS容器中的PID)。
m:
key[:
value]匹配流的元数据标签中具有指定key的流。
如果value没有给出,将匹配包含给定标签的所有流。
请注意,在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`选项来获取所有混合器和分流器的列表。
`filter=filter_name`
打印有关滤镜`filter_name`的详细信息。
使用`-filters`选项来获得所有滤镜的列表。
-version显示的版本。
-formats显示可用的格式(包括设备)。
-devices显示可用的设备。
-codecs显示libavcodec已知的所有编解码器。
注意,整个文档中术语“解码器”更正确地称呼是比特流媒体格式(mediabitstreamformat)。
-decoders显示可用的解码器。
-encoders显示所有可用的编码器。
-bsfs显示可用的流滤镜。
-protocols显示可用的协议。
-filters显示可用的libavfilter滤镜。
-pix_fmts显示可用的像素格式。
-sample_fmts显示可用的采样格式。
-layouts显示频道名称和标准的渠道布局。
-colors显示公认的颜色名称。
-sourcesdevice[,opt1=val1[,opt2=val2]...]显示自动检测到的输入设备的源。
某些设备可提供不能自动检测系统相关的源名称。
返回的列表不能被假定为总是完整的。
`ffmpeg-sourcespulse,server=192.168.0.4`
-sinksdevice[,opt1=val1[,opt2=val2]...]自动检测显示输出设备的接收器。
某些设备可提供不能自动检测系统相关的接收器名称。
返回的列表不能被假定为总是完整的。
`ffmpeg-sinkspulse,server=192.168.0.4`
-loglevel[repeat+]loglevel|-v[repeat+]loglevel设置库使用的日志记录级别。
加入repeat+表示重复日志输出不应该被压缩到所述第一条日志和“最后的日志重复n次”线将被省略。
repeat,也可以单独使用。
如果repeat可以单独使用,并没有预设的记录级别,默认记录级将被使用。
如果给定多个日志级别参数,使用repeat不会改变日志级别。
loglevel是一个字符串或数字,可为以下值之一:
`quiet,-8`
保持沉默。
`panic,0`
只显示可能导致程序崩溃的致命错误。
目前没有此类错误。
`fatal,8`
只显示致命错误。
这些错误会导致进程绝对无法继续。
`error,16`
显示所有的错误,包括那些可以修复的。
`warning,24`
显示所有警告和错误。
将显示任何有关可能不正确或不正常事件的信息。
`info,32`
显示处理过程中的信息。
不单单是警告和错误。
这是默认值。
`verbose,40`
与info类似,但更详细。
`debug,48`
显示一切信息,包括调试信息。
默认情况下,程序日志输出到标准错误流,如果终端支持着色,颜色用来标记错误和警告。
日志着色可以被环境变量AV_LOG_FORCE_NOCOLOR或NO_COLOR,或者可以被强制设置环境变量AV_LOG_FORCE_COLOR禁用。
使用环境变量NO_COLOR已被弃用,并在之后的FFmpeg的版本将被丢弃。
-report转储完整的命令行和控制台输出到当前目录一个文件名?
?
为program-YYYYMMDD-HHMMSS.log的文件。
此文件对于错误报告非常有用。
这也意味着-loglevelverbose。
将环境变量设置FFREPORT为任何值具有相同的效果。
如果该值是一个’:
’-分隔键=值序列,这些选项会影响报表;如果包含特殊字符则需要使用转义字符,或者“:
”分隔(参见的ffmpeg-utils的手册中的“引用与转义”一节)。
下列选项也可使用:
`file`
设置报告使用的文件名?
?
;%p添加程序名,%t添加时间戳,%%添加一个普通的%`level`
设置使用的数值(查看日志详细级别`-loglevel`)。
例如,要输出到名为ffreport.log使用的一个日志级别文件的报告32(日志级别info的别称):
FFREPORT=file=ffreport.log:
level=32ffmpeg-iinputoutput非致命的环境变量的解析错误不会出现在报告中。
-hide_banner不打印横幅。
所有FFmpeg的工具通常会显示一个版权声明,构建选项和库版本。
此选项可以用来抑制打印此信息。
-cpuflagsflags(global)允许设置和清除CPU标志。
此选项用于测试。
不要使用它,除非你知道自己在做什么。
ffmpeg-cpuflags-sse+mmx...
ffmpeg-cpuflagsmmx...
ffmpeg-cpuflags0...
可能选项有:
`x86`
‘mmx’
‘mmxext’
‘sse’
‘sse2’
‘sse2slow’
‘sse3’
“sse3slow”
‘ssse3’
‘atom’
‘sse4.1’
‘sse4.2’
‘avx’
‘xop’
‘fma4’
‘3dnow’
‘3dnowext’
‘cmov’
`ARM`
‘armv5te’
‘armv6’
‘armv6t2’
‘vfp’
‘vfpv3’
‘neon’
‘PowerPC’
‘altivec’
`SpecificProcessors`
‘pentium2’
‘pentium3’
‘pentium4’
‘k6’
‘k62’
‘athlon’
‘athlonxp’
‘k8’
-opencl_bench测试所有可用的OpenCL设备并显示结果。
此选项仅当FFmpeg含有–enable-opencl编译时可用。
-opencl_optionsoptions(global)设置的OpenCL环境选项。
此选项仅当FFmpeg的已编译–enable-opencl。
options必须是冒号分隔的key=value选项对。
参见ffmpeg-utils的手册中的“OpenCL的选项”部分的内容。
5.3AVOption选项这些选项直接由libavformat,libavdevice和libavcodec库提供。
要查看可用AVOption的列表,请使用-help选项。
它们被分为两类:
generic这些选项可以为任何容器,编解码器或设备进行设置。
通用的选项都列在AVFormatContext选择容器/设备和AVCodecContext选择编解码器小节。
private这些选项是作用于给定的容器,装置或编解码器。
私有选项列在其相应的容器/设备/编解码器。
比如编辑ID3v2.3头而不是默认的ID3v2.4到MP3文件,使用MP3混合器的id3v2_version私有选项:
ffmpeg-iinput.flac-id3v2_version3out.mp3所有编解码器AVOption选项是按流指定的,并且因此应该指定相应的流标识符。
注:
-nooption语法不能用于布尔AVOption选项,请使用-option0/-option1。
注:
老的前缀v/a/s的流标识记号已经过时,将被移除。
5.4主要选项-ffmt(input/output)强制指定输入或输出的文件格式。
输入文件的格式通常是自动检测的,输出文件的格式由该文件的扩展名猜测,所以在大多数情况下不需要此选项。
-ifilename(input)输入的文件名-y(global)直接覆盖输出文件。
-n(global)如果指定的输出文件已经存在,不要覆盖输出文件,并立即退出。
-c[:
stream_specifier]codec(input/output,per-stream)-codec[:
stream_specifier]codec(input/output,per-stream)用于对一个或多个数据流指定一个编码器(一个输出文件之前使用时)或一个解码器(一个输入文件之前使用时)。
codec是一个解码器/编码器的名称或特殊值copy(仅输出),copy表示该流不是被重新编码。
例如`ffmpeg-iINPUT-map0-c:
vlibx264-c:
acopyOUTPUT`
使用libx264编码所有视频流并拷贝所有音频流。
对于每个数据流,最后匹配的c选项被应用,所以`ffmpeg-iINPUT-map0-ccopy-c:
v:
1libx264-c:
a:
137libvorbisOUTPUT`
将复制的所有流除了第二视频流,并将用libx264进行编码,并且对于第138个音频流用libvorbis进行编码。
-tduration(input/output)当作为输入选项(在-i之前),限制从输入文件中读取数据的duration。
当作为输出选项(输出文件名之?
?
前)使用,在达到duration后停止写入输出文件。
duration可能是以秒为单位,或以hh:
mm:
ss[.xxx]形式出现。
-to和-t是相互排斥的,-t具有优先权。
-toposition(output)在position位置停止输出。
position可能是一个表示秒数的数,或hh:
mm:
ss[.xxx]形式。
-to和-t是相互排斥的,-t具有优先权。
-fslimit_size(output)设置文件大小限制,以字节表示。
-ssposition(input/output)当用作输入选项一起使用(在-i以前),跳转到输入文件中position位置。
请注意,在大多数的格式是不可能确切定位,这样ffmpeg将寻求最接近的position位置点。
当转码和-accurate_seek启用(默认设置),寻找点和position位置之间的附加段将被解码并丢弃。
当进行流复制或当-noaccurate_seek被使用时,它都将被保留。
当用作输出选项(在输出文件名?
?
前),解码但丢弃输入直到时间戳到达的位置。
position位置可以是秒数或hh:
mm:
ss[.xxx]形式。
-itsoffsetoffset(input)设置输入时间偏移。
offset必须是持续时间规范,请参阅(ffmpeg-utils)在FFmpeg-utils
(1)手动的持续时间段的相关内容。
偏移被添加到输入文件的时间戳。
指定一个正偏移意味着相应流将延迟offset所指定的时间。
-timestampdate(output)设置在容器内记录的时间戳。
date必须是一个规范的持续时间,请参阅(ffmpeg-utils)在FFmpeg-utils的
(1)日期部分。
-metadata[:
metadata_specifier]key=value(output,per-metadata)设置元数据的键/值对。
可选metadata_specifier可以被用于设置流或章节的元数据。
见-map_metadata文档的详细信息。
此选项将覆盖-map_metadata设置的元数据。
另外,也可以通过使用空值来删除元数据。
例如,设置输出文件的标题:
`ffmpeg-iin.avi-metadatatitle="mytitle"out.flv`设置第一个音频流的语言:
`ffmpeg-iINPUT-metadata:
s:
a:
0language=engOUTPUT`
-targettype(output)指定目标文件类型(vcd,svcd,dvd,dv,dv50)。
类型可能与前缀pal-,ntsc-或film-使用相应的标准。
所有的格式选项(比特率,编解码器,缓冲大小)都将自动设置。
你仅需键入:
`ffmpeg-imyfile.avi-targetvcd/tmp/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ffmpeg 中文 文档