ffmpeg选项

命令语法

ffmpeg [全局选项] {[输入文件选项] -i 输入文件} … {[输出文件选项] 输出文件} …

流拷贝

流拷贝(Stream copy)是一种对指定流数据仅仅进行复制的拷贝(copy)模式。这种情况下ffmpeg不会对指定流进行解码和编码步骤,而仅仅是分离和混合数据包。

常规选项

常规选项也可以用在ffmpeg项目中其他ff*工具,例如ffplayer
-h:显示帮助,一个附加选项可以指定帮助显示的模式,如果没有参数,则是基本选项

  • long:在基本选项说明基础上增加高级选项说明
  • full:输出完整的选项列表,包括编(解)码器,分离器混合器以及滤镜等等的共享和私有选项
  • decoder=decoder_name:输出指定解码器名的详细信息。-decoders来获取支持的所有解码器名
  • encoder=encoder_name:输出指定编码器名的详细信息。-encoders来获取支持的所有编码器名
  • demuxer=demuxer_name:输出指定分离器名详细信息。-formats来获取支持的所有分离器和混合器
  • muxer=muxer_name:输出指定混合器名详细信息。
  • filter=filter_name:输出指定滤镜名的详细信息。-filters来获取支持的所有滤镜

-devices:显示有效设备
-protocols:显示支持的协议
-pix_fmts:显示有效的像素(pixel)格式
-sample_fmts:显示有效的采样格式
-layouts:显示信道名字和信道布局
-v loglevel :设置日志层次。日志层级是一个字符串或数值,有以下可能值

  • quiet,-8,什么都不输出,是无声的
  • panic,0,仅显示造成进程失败的致命错误,它当前不能使用
  • fatal,8,仅仅显示致命错误,这些错误使得处理不能继续
  • error,16,显示所有的错误,包括可以回收的错误(进程还可以继续的)
  • warning,24,显示所有警告和错误,任何错误或者意外事件相关信息均被显示
  • info,32,显示过程中的信息,还包括警告和错误,则是默认值
  • verbose,40,类似info,但更冗长
  • debug,48,显示所有,包括调试信息
  • trace,56

-report:复制所有命令行和控制台输出到当前目录下名为program-YYYMMDD-HHMMSS.log文件中。这常用于报告bug,所以一般会同时设置-v loglevel

AV选项

这些选项由特定的库提供(如libavformat,libavdevice以及libavcodec)。它们可以指定下面2个分类:

  • generic(常规):这类选项可以用于设置 容器、设备、编码器、解码器等。通用选项对列在AVFormatContext中的容器/设备以及AVCodecContext中的编码有效。
  • private(私有):这类仅对特定的容器、设备或者编码有效。私有选项由相应的 容器/设备/编码 指定。

所有编码AV选项是针对单独流的,所以必须详细指定。
注意-nooption语法不能被用于AV选项中的布尔值项目,而必须使用-option 0/-option 1
主要选项:

  • -f fmt (input/output) :指定输入或者输出文件格式。常规可省略而使用依据扩展名的自动指定,但一些选项需要强制明确设定。
  • -i filename (input):指定输入文件
  • -y (global):默认自动覆盖输出文件,而不再询问确认。
  • -n (global):不覆盖输出文件,如果输出文件已经存在则立即退出
  • -c | codec[:stream_specifier] codec (input/output,per-stream)
    为特定的文件选择编/解码模式,对于输出文件就是编码器,对于输入或者某个流就是解码器。选项参数中codec是编解码器的名字,或者是copy(仅对输出文件)则意味着流数据直接复制而不再编码。
	ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT
	使用libx264编码所有的视频流,然后复制所有的音频流

	ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT
	输出文件中第2视频流按libx264编码,第138音频流按libvorbis编码,其余都直接复制输出
  • -t duration (input/output):限制输入/输出的时间。如果是在-i前面,就是限定从输入中读取多少时间的数据;如果是用于限定输出文件,则表示写入多少时间数据后就停止。duration可以是以秒为单位的数值或者 hh:mm:ss[.xxx]格式的时间值。
  • -fs limit_size (output):设置输出文件大小限制,单位是字节(bytes)。
  • -ss position (input/output) :当在-i前,表示定位输入文件到position指定的位置,注意可能一些格式是不支持精确定位的,所以ffmpeg可能是定位到最接近position(在之前)的可定位点;当用于输出文件时,会解码丢弃position对应时间码前的输入文件数据;position可以是以秒为单位的数值或者 hh:mm:ss[.xxx]格式的时间值。
  • -taget type (output):指定目标文件类型(vcd,svcd,dvd,dv,dv50)。
  • frames[:stream_specifier] framecount (output,per-stream):在指定计数帧后停止写入数据。
  • -q | qscale [:stream_specifier] q (output,per-stream)。
    使用固定的质量品质(VBR)。用于指定q | qscale编码依赖。如果qscale没有跟stream_specifier则只适用于视频。其中值q取值在0.01-255,越小质量越好。
  • -debug_ts (global):打印时间码信息,默认是禁止的。这个选项对于测试或者调试是非常有用的特性,或者用于从一种格式切换到另外的格式(包括特性)的时间成本分析。

视频选项

  • -vframes number (output):设置输出文件的帧数,是-frames:v的别名。
  • -r[:stream_specifier] fps (input/output,per-stream):设置帧率。
    在作为输入选项时,会忽略文件中存储的时间戳和时间戳而产生的假设恒定帧率fps,即强制按设定帧率处理视频产生(快进/减缓效果)。作为输出选项时,会复制或者丢弃输入中个别的帧以满足设定达到fps要求的帧率。
  • s[:stream_specifier] size (input/output,per-stream):设置帧的尺寸。
    数据的格式是wxh,即宽度值X高度值,例如320x240,默认同源尺寸。
  • aspect[:stream_specifier] aspect (output,per-stream):指定视频的纵横比。aspect是一个浮点数字符串或者num:den格式字符串(其值就是num/den),例如”4:3”,”16:9”,”1.3333”以及”1.7777”都是常用参数值。
  • -vn (output):禁止输出视频。
  • -vcodec codec (output):设置视频编码器,这是-codec:v的一个别名。
  • -c copy:直接将输入流拷贝到输出,仅涉及解复用和复用,不涉及解码和编码
  • -vf filtergraph (output):创建一个filtergraph的滤镜链并作用在流上。它实为-filter:v的别名。
  • -pix_fmt[:stream_specifier] format (input/output,per-stream):设置像素格式。
    如果设置的像素格式不能被选中(启用),则ffmpeg会输出一个警告和并选择这个编码最好(兼容)的像素格式。如果pix_fmt前面前导了一个+字符,ffmepg会在要求的像素格式不被支持时退出,这也意味着滤镜中的自动转换也会被禁止。
  • -vstats:复制视频编码统计分析到日志文件vstats_HHMMSS.log。

音频选项

  • -aframes number (output):设置number音频帧输出,是-frames:a的别名。
  • -ar[:stream_specifier] freq (input/output,per-stream):设置音频采样率。默认是输出同于输入。对于输入进行设置,仅仅通道是真实的设备或者raw数据分离出并映射的通道才有效。对于输出则可以强制设置音频量化的采用率。
  • -aq q (output):设置音频品质(编码指定为VBR),它是-q:a的别名。
  • -ac[:stream_specifier] channels (input/output,per-stream):设置音频通道数。默认输出会有输入相同的音频通道。对于输入进行设置,仅仅通道是真实的设备或者raw数据分离出并映射的通道才有效。
  • -an (output):禁止输出音频。
  • -acode codec (input/output):设置音频解码/编码的编/解码器,是-codec:a的别名。
  • -sample_fmt[:stream_specifier] sample_fmt (output,per-stream):设置音频样例格式。使用-sample_fmts可以获取所有支持的样例格式。
  • -af filtergraph (output):对音频使用filtergraph滤镜效果,其是-filter:a的别名。

字幕选项

  • -scodec codec (input/output):设置字幕解码器,是-codec:s的别名。
  • -sn (output):禁止输出字幕。
  • -canvas_size size:设置字幕渲染区域的尺寸(位置)

高级选项

  • -ignore_unknown:如果流的类型未知则忽略,而不进行复制。
  • -copy_unknown:复制类型未知的流。
  • -map_channel [input_file_id.stream_specifier.channel_id|-1][:output_file_id.stream_specifier]:从输入文件中指定映射一个通道的音频到输出文件指定流。如果output_file_id.stream_specifier没有设置,则音频通道将映射到输出文件的所有音频流中。使用-1插入到input_file_id.stream_specifier.chnnel_id会映射一个静音通道。
    例如INPUT是一个立体声音频文件,你可以分别选择两个音频通道(下面实际上对于输入是交换了2个音频通道顺序进行输出):
ffmpeg -i INPUT -map_channel 0.0.1 -map_channel 0.0.0 OUTPUT

如果你想静音第一个通道,而只保留第二通道,则可使用:

ffmpeg -i INPUT -map_channel -1 -map_channel 0.0.1 OUTPUT

对每个输入通道指派输出以分离整个输入文件:

ffmpeg -i INPUT -map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1
  • -benchmark_all (global):在编码过程中持续显示基准信息,则包括CPU使用时间(音频/视频的编/解码)。
  • -dump (global):复制每个输入包到标准输出设备。
  • -re (input):以指定帧率读取输入。通常用于模拟一个硬件设备,例如在直播输入流(这时是读取一个文件)。不应该在实际设备或者在直播输入中使用(因为这将导致数据包的丢弃)。默认ffmpeg会尽量以最高可能的帧率读取。这个选项可以降低从输入读取的帧率,这常用于实时输出(例如直播流)。
  • -loop number_of_times:重复播放number_of_times次。0表示持续重复而不停止。
  • -sdp_file file (global):输出sdp信息到文件file。它会在至少一个输出不是rtp流时同时输出sdp信息。
  • -discard (input):允许丢弃特定的流或者分离出的流上的部分帧,但不是所有的分离器都支持这个特性。
    none:不丢帧
    default:丢弃无效帧
    noref:丢弃所有非参考帧
    bidir:丢弃所有双向帧
    nokey:丢弃所有非关键帧
    all:丢弃所有帧
  • -xerror (global):在出错时停止并退出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值