FFmpeg命令行选项

如下内容取自官网文档"Documentation-ffmpeg"和"Documentation-ffmpeg-all"

1 帮助信息

如下选项适用于 ff 系列工具:

复制代码
-h, -?, -help, --help [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 选项可获取滤镜列表。

2 通用选项

如下选项适用于 ff 系列工具:

复制代码
-L
    显示许可证。

-version
    显示版本。

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

-demuxers
    显示可用的解复用器。

-muxers
    显示可用的复用器。

-devices
    显示可用的设备。

-codecs
    显示 libavcodec 库支持的所有编解码器。编解码器(codec)是一种简称,媒体位流格
    式(media bitstream format)是一种更正式和准确的称法。

-decoders
    显示可用的解码器。

-encoders
    显示可用的编码器。

-bsfs
    显示可用的位流滤镜(bitstream filters)。

-protocols
    显示可用的协议。

-filters
    显示可用的 libavfilter 滤镜。

-pix_fmts
    显示可用的视频像素格式。

-sample_fmts
    显示可用的音频采样格式。

-layouts
    显示声道名称及标准声道布局。

-colors
    显示可识别的颜色名。

3 AV 选项

这些选项由 libavformat、libavdevice 及 libavcodec 库直接提供。使用 -help 选项可查看 AV 选项列表。AV 选项有如下两类:

generic:通用选项可用于任意容器、编解码器或设备。容器/设备的通用选项位于 AVFormatContext 中,编解码器的通用选项位于 AVCodecContext 中。

private:私有选项仅用于特定的容器、编解码器或设备。私有选项位于选项对应的容器/设备/编解码器中。

例如要在一个默认为 ID3v2.4 为头的 MP3 文件中写入 ID3v2.3 头,需要使用 MP3 复用器的 id3v2_version 私有选项:

复制代码
ffmpeg -i input.flac -id3v2_version 3 out.mp3

所有编解码器 AV 选项都是针对某路流的,所以 AV 选项后应跟随 stream_specifer。

注意 -nooption 语法不能被用于 bool 型的 AV 选项,应使用 -option 0/-option 1。

4 主选项

复制代码
-f fmt (input/output)
    强制指定输入或输出文件格式。输入文件的格式通常是自动检测得到,而输出文件的格
    式一般是由文件扩展名猜测得到,所以大部分情况下并不需要此选项。

-i url (input)
    输入文件 url。

-y (global)
    静默覆盖输出文件。

-n (global)
    不覆盖输出文件,如果输出文件已存在则立即退出。

-stream_loop number (input)
    设置输入流的循环次数。0 表示不循环,-1 表示永久循环。

-c[:stream_specifier] codec (input/output,per-stream)
-codec[:stream_specifier] codec (input/output,per-stream)
    作输出选项时用于选择编码器,作输入选项时用于选择解码器,编码器或解码器都是用
    于一路或多路流的。参数 codec 是解码器/编码器的名字,或者指定为 copy,用于表
    示流不需要重编码。

    例如:
    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
    第 2 路视频流使用 libx264 编码,第 138 路音频流使用 libvorbis 编码,所有其他
    流直接拷贝。展开说明一下:上述命令行中,有"-c copy"、"-c:v:1 libx264"和
    "-c:a:137 libvorbis"三个 c 选项。对第 138 路音频流来说,第一个和第三个选项可
    匹配,因此起作用的是第三个选项(命令行中最后一个匹配的选项)。对第 2 路视频流
    来说,第一个和第二个选项可匹配,因此起作用的是第二个选项((命令行中最后一个匹
    配的选项)。对其他流而言,只能匹配第一个选项。

-t duration (input/output)
    作输入选项时,限制输入的时长,即最多只读入 duration 时长的数据。
    作输出选项时,达到 duration 时长时就停止写输出。

    duration 是时间长度,遵循时长规范,参考 "ffmpeg-utils" 手册中的
    "Time duration" 章节。

    -to 选项和 -t 选项是互斥的,-t 选项优先。

-to position (input/output)
    到达指定 position 位置时停止写输出或读输入。position 是时间刻度,遵循时长规
    范,参考 "ffmpeg-utils" 手册中的 "Time duration" 章节。

    -to 选项和 -t 选项是互斥的,-t 选项优先。

-fs limit_size (output)
    设置文件尺寸限制,单位字节。达到设置值后就不会再写新的数据块了。输出文件尺寸
    比请求设置的值略大。

-ss position (input/output)
    作输入选项(在 -i 之前)时,将在输入文件中执行 seek 操作,seek 至目标位置 
    position 处。注意在大多数格式中,seek 都不精确,ffmpeg 会 seek 至离 position 
    最近的 seek 点。当转码功能和 -accurate_seek 都使能(默认情况)时,在实际 seek 
    点和 position 间的一小段会被解码,但是会丢弃(如何丢弃?)。在作流拷贝(不需要
    转码)操作或使用了 -noaccurate_seek 选项时,这一小段会保留(如何保留?)。

    作输出选项(在输出 url 之前)时,会对输入一直解码并丢弃,直到到达 position 位
    置处。

    position 是时间刻度,遵循时长规范,参考 "ffmpeg-utils" 手册中的 
    "Time duration" 章节。

-sseof position (input)
    与 -ss 选项类似,只不过 -ss 选项是相对于文件头,而此选项是相对于文件尾。
    position 值是负值,0 表示位于文件尾。

-itsoffset offset (input)
    设置输入时间偏移。

    offset 遵循时长规范,参考 "ffmpeg-utils" 手册中的 "Time duration" 章节。

    输入文件的时间戳会加上 offset 值,使用相加后的新值作为新的时间戳。offset 取
    正值时表示对应的流将延时 offset 指定的时长。

-timestamp date (output)
    设置容器中的录制时间戳。

    data 遵循日期规范,参考 "ffmpeg-utils" 手册中的 "Date" 章节。

-metadata[:metadata_specifier] key=value (output,per-metadata)
    设置一个 metedata 键/值对。一个可选的 metadata_specifier 可用于设置流、章节
    或节目的 metadata。详情可参考 -map_metadata 文档。此选项会覆盖 -map_metadata
    选项设置的 metadata。此选项携带一个空值可以删除 metadata。

    例如,设置输出文件的标题:
    ffmpeg -i in.avi -metadata title="my title" out.flv

    设置第一路音频流的语言:
    ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT

......

-dframes number (output)
    设置输出的数据(data 类型,与 video/audio 类型对应)帧的数量。此选项已经过时,
    等价于 -frames:d 选项,应使用 -frames:d 替代此选项。

-frames[:stream_specifier] framecount (output,per-stream)
    设置输出帧的数量。超过 framecount 帧数时将停止写输出。

5 视频选项

复制代码
-vframes number (output)
    设置输出视频帧数。此选项已经过时,等价于 -frames:v,应使用 -frames:v 替代此
    选项。

-r[:stream_specifier] fps (input/output,per-stream)
    设置帧率(Hz)。
    
    作输入选项时,忽略文件中的所有时间戳,生成以 fps 为帧率的新时间戳。此选项和
    用于某些输入格式(如 image2 和 v412)的-framerate 选项并不一样(在旧的 FFmpeg 
    版本中这两个选项是一样的)。如果有疑问,使用 -framerate 替换-r 输入选项。
    
    作输出选项时,重复或丢弃输入帧以获得 fps 指定的帧率。

-s[:stream_specifier] size (input/output,per-stream)
    设置帧大小。
    
    作输入选项时,此选项是 video_size 私有选项的便捷方式,可被某些解复用器识别,
    用于帧大小未存储在文件中或帧大小可配置的情况,例如原始视频或视频采集。
    
    作输出选项时,此选项将在对应滤镜图的末尾插入 scale 视频滤镜,以缩放视频帧,
    这种情况请直接使用 scale 滤镜,将 scale 滤镜插入开头或其他位置,而不要使用此
    选项。

    
-aspect[:stream_specifier] aspect (output,per-stream)
    设置 aspect 指定的视频显示宽高比。

    aspect 可以是浮点数字符串,也可以是 num:den 形式的字符串,其中 num 和 den 分
    别是宽高比的分子和分母。例如,"4:3"、"16:9"、"1.3333 "和 "1.7777 "都是有效的
    参数值。

    如果与 -vcodec copy 一起使用,它将影响存储在容器级别的宽高比,但不会影响存储
    在编码帧中的宽高比(如果存在的话)。

-vn (input/output)
    作输入选项时,阻止文件中所有视频流被用于滤镜操作或自动/手动选择进任何输出。
    本选项禁止所有视频流,-discard 选项可单独禁止某一路视频流。

    作输出选项时,禁止视频录制,也就是禁止任何视频流的自动或手动选择。

-vcodec codec (output)
    设置视频编解码器。等价于 -codec:v 选项。

-pass[:stream_specifier] n (output,per-stream)
    用于进行两步视频编码,n 为 1 或 2,表示是第一次或第二次视频编码。第一次编码
    时,视频的统计信息会被记录到日志文件中(另见选项 -passlogfile),第二次编码
    时,该日志文件会被用来按照准确的比特率生成视频。第一次编码时可以停用音频并将
    输出设置为空,如下:

    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)
    参数 prefix 指定两步视频编码中用到的日志文件名的前缀,默认前缀为 "ffmpeg2pass"。
    完整的文件名将是 PREFIX-N.log,其中 N 与输出流的编号相关。

-vf filtergraph (output)
    创建由 filtergraph 指定的滤镜图,使用此滤镜图对流执行滤镜操作。本选项等价于
    -filter:v 选项, 参考 -filter 选项。

6 音频选项

复制代码
-ab bitrate 设置音频码率
-ar freq 设置音频采样率
-ac channels 设置通道 缺省为 1
-an 不使能音频纪录
-acodec codec 使用 codec 编解码

7 音频/视频捕获选项

复制代码
-vd device 设置视频捕获设备。比如/dev/video0
-vc channel 设置视频捕获通道 DV1394 专用
-tvstd standard 设置电视标准 NTSC PAL(SECAM)
-dv1394 设置 DV1394 捕获
-av device 设置音频设备 比如/dev/dsp

8 高级选项

复制代码
-map file:stream 设置输入流映射
-debug 打印特定调试信息
-benchmark 为基准测试加入时间
-hex 倾倒每一个输入包
-bitexact 仅使用位精确算法 用于编解码测试
-ps size 设置包大小,以 bits 为单位
-re 以本地帧频读数据,主要用于模拟捕获设备
-loop 循环输入流(只工作于图像流,用于 ffserver 测试) 
相关推荐
OH_TPC9 小时前
【鸿蒙优选三方库】@ohos/ffmpeg-kit:把 FFmpeg 的全部能量带进鸿蒙
华为·ffmpeg·harmonyos·鸿蒙
是jin奥9 小时前
最新 FFmpeg 安装脚本:Linux x86_64
linux·运维·ffmpeg
骑着蜗牛撵大象32710 小时前
用 Codex 批量做数字人商品口播视频:从分镜 JSON 到成片校验的流水线
java·ffmpeg·json·音视频·数字人·视频·codex
企业数字化笔记13 小时前
视频加放大特写后音画不同步怎么办?OpenCV转场与FFmpeg音轨续接实战
opencv·ffmpeg·音视频
开开心心就好2 天前
课堂随机点名工具,绿色版免安装双击即用
java·服务器·前端·ffmpeg·音视频·perl·symfony
小鹿软件办公2 天前
不依赖 FFmpeg 也能录屏?ShareX 22 新增录屏等十余款新工具
ffmpeg·sharex·免费录屏工具
lll23526917792 天前
Android APP短视频音频提取,主流工具怎么选
ffmpeg·音视频
成都旺小宝科技3 天前
首访决策人没来,AI一客一策两天成交!
大数据·人工智能·机器学习·ffmpeg·语音识别
余槐i3 天前
加了Cookie yt-dlp仍报HTTP 403:3个容易漏的请求头差异
python·http·ffmpeg·开发工具·yt-dlp
余槐i3 天前
yt-dlp 线程开到 16 反而更慢:1000 个视频的实测与限速原因
性能优化·ffmpeg·自动化·开发工具·yt-dlp