- -f fmt
强制设置输入或输出文件的格式;对于输入文件来说,格式是自动检测的;输出文件则是根据文件后缀推测格式的;因此该选项多数情况下是不需要的。
-c[:stream_specifier] codec (input/output,per-stream)
-codec[:stream_specifier] codec (input/output,per-stream)
选择一个编码器(在输出文件之前使用)或解码器(在输入文件之前使用),用于一个或多个流。codec 是解码器/编码器的名称,或者是一个特殊值 copy(仅用于输出),表示该流不会被重新编码。该选项与-codec codec功能相同。
stream_specifier:有两种表示方式,c:v表示视频流,c:a表示音频流。
示例:
ffmpeg -i in.mp4 -c:v libx264 -c:a copy out.mp4
所有的视频使用libx264进行编码,并复制音频。
-c:v libx264表示输出流中的视频用libx264进行编码
-c:a copy 表示复制输入流中的音频到输出流
- -t duration (input/output)
当作为输入选项(在-i 之前使用)时,限制从输入文件读取数据的持续时间。当作为输出选项(在输出 URL 之前使用)时,在输出持续时间达到指定的时间后停止写入输出。duration 必须是一个时间持续期的规范。-to 和 -t 选项是互斥的,且 -t 选项更优先。
示例:
ffmpeg -t 10 -i 1.mp4 cut.mp4
截取1.mp4中前10秒的视频
- -to position (input/output)
在指定位置停止写入或读取。position 表示时长。-to 和 -t 选项是互斥的,且 -t 选项更优先。
ffmpeg -to 02:00 -i video.mp4 -c copy cut.mp4
ffmpeg -i video.mp4 -to 02:00 -c copy cut.mp4
上面两条命令均表示,截取从开始到2分钟的视频
- -ss position (input/output)
当作为输入选项(在 -i 之前使用)时,在输入文件中寻找到指定的位置。请注意,在大多数格式中,无法精确寻找到指定的位置,因此 ffmpeg 将寻找到位置之前的最近寻址点。在转码时,如果启用了 -accurate_seek(默认情况下启用),那么从寻址点到指定位置之间的额外片段将被解码并丢弃。当进行流复制或使用 -noaccurate_seek 时,这段额外的片段将被保留。
当作为输出选项(在输出 URL 之前使用)时,将解码输入但直到时间戳达到指定位置之前的数据将被丢弃。position 表示时长。
ffmpeg -ss 02:00 -i video.mp4 -c copy cut.mp4
表示截取从2分钟处到结束的视频,-c copy表示不进行重新编码,直接进行复制。
- -sseof position (input)
类似于 -ss 选项,但是相对于文件的"末尾"。也就是说,负值表示文件中的更早位置,0 表示文件的末尾。
ffmpeg -sseof -02:00 -i video.mp4 -c copy cut.mp4
截取视频最后2分钟的视频,-c copy表示不编码,直接复制。
- -frames[:stream_specifier] framecount (output,per-stream)
设置输出的帧数
ffmpeg -i video.mp4 -frames 90 -c copy cut.mp4
输出前90帧视频
- -filter[:stream_specifier] filtergraph (output,per-stream)
创建由 filtergraph 指定的滤镜图,并利用它对数据进行过滤。filtergraph 是对流应用滤镜图的描述,它必须有一个与流类型相同的单输入和单输出。在滤镜图中,输入与"in"标签关联,输出与"out"标签关联。关于滤镜图语法的更多详细信息,请参考 ffmpeg-filters 手册。
-filter:v 指定视频滤镜
-filter:a 指定音频滤镜
可以同时应用多个滤镜,用逗号分隔。例如:-filter:v "scale=640x480,transpose=1"
ffmpeg -i video.mp4 -filter:v "scale=640x480" cut.mp4
表示调整视频大小到 640x480