5.6高级视频选项-FFmpeg文档教程-多媒体-IT技术博客

-pix_fmt [:stream_specifier] format(输入/输出,每个流)

设置像素格式。使用-pix_fmts显示所有受支持的像素格式。如果无法选择所选的像素格式,ffmpeg将打印警告并选择编码器支持的最佳像素格式。如果pix_fmt带有+前缀,如果无法选择请求的像素格式,ffmpeg将退出并显示错误,并且禁用滤镜内部的自动转换。如果pix_fmt是单个+,则ffmpeg选择与输入(或图形输出)相同的像素格式,并且禁用自动转换。


-sws_flags flags(输入/输出)

设置SwScaler标志。


-rc_override [:stream_specifier] override(输出,每个流)

特定间隔的速率控制替代,格式为“ int,int,int”列表,以斜杠分隔。两个第一个值是开始和结束帧号,最后一个是量化器(如果为正数)或质量因数(如果为负)。


-ilme

编码器中的强制隔行支持(仅MPEG-2和MPEG-4)。如果输入文件是隔行扫描的,并且您希望保留隔行扫描格式以将损失降至最低,请使用此选项。另一种选择是使用诸如yadif或bwdif之类的过滤器对输入流进行解交织,但是解交织会带来损失。


-psnr

计算压缩帧的PSNR。


-vstats

将视频编码统计信息转储到vstats_HHMMSS.log。


-vstats_file文件

将视频编码统计信息转储到文件中。


-vstats_version文件

指定要使用的vstats格式的版本。默认值为2。

version = 1 :

frame= %5d q= %2.1f PSNR= %6.2f f_size= %6d s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s

version > 1:

out= %2d st= %2d frame= %5d q= %2.1f PSNR= %6.2f f_size= %6d s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s

-top [:stream_specifier] n(每流输出)

top = 1/bottom = 0/auto = -1首先


-dc precision

Intra_dc_precision。


-vtag fourcc/tag(输出)

强制视频标签/ fourcc。这是-tag:v的别名。


-qphist(全局)

显示QP直方图


-vbsf bitstream_filter

不推荐使用-bsf


-force_key_frames[:stream_specifier] time[,time...] (output,per-stream)

-force_key_frames[:stream_specifier] expr:expr (output,per-stream)

-force_key_frames[:stream_specifier] source (output,per-stream)

force_key_frames可以采用以下形式的参数:


time[,time...]

如果参数由时间戳组成,则ffmpeg将根据编码器时基将指定时间四舍五入到最接近的输出时间戳,并在时间戳等于或大于计算出的时间戳的第一帧处强制关键帧。请注意,如果编码器时基过于粗糙,则关键帧可能会强制放置在时间戳低于指定时间的帧上。缺省编码器时基是输出帧率的倒数,但可以通过-enc_time_base进行其他设置。


如果其中一个时间是“章δ”,则将其扩展为文件中所有章节开始的时间,以δ偏移,表示为以秒为单位的时间。此选项对于确保在输出文件中的章节标记或任何其他指定位置存在搜索点很有用。


例如,要在5分钟时插入关键帧,并在每章开始之前0.1秒插入关键帧:

-force_key_frames 0:05:00,chapters-0.1

expr:expr

如果参数以expr:为前缀,则字符串expr像表达式一样被解释,并针对每个帧进行评估。 如果评估不为零,则将强制使用关键帧。


expr中的表达式可以包含以下常量:


n

当前已处理的帧数,从0开始


n_forced

强制帧数


prev_forced_n

上一个强制帧的编号,如果尚未强制任何关键帧,则为NAN


prev_forced_t

上一个强制帧的时间,如果尚未强制任何关键帧,则为NAN


t

当前已处理帧的时间


例如,每5秒强制设置一次关键帧,您可以指定:

-force_key_frames expr:gte(t,n_forced*5)

要在最后一次强制执行的时间之后5秒(从第二秒13开始)强制执行关键帧:

-force_key_frames expr:if(isnan(prev_forced_t),gte(t,13),gte(t,prev_forced_t+5))

source

如果参数是source,则如果正在编码的当前帧在其源中标记为关键帧,则ffmpeg将强制使用关键帧。


请注意,对于某些编码器的前瞻算法,强制过多的关键帧非常有害:使用固定GOP选项或类似选项会更有效。


-copyinkf [:stream_specifier](每流输出)

在进行流复制时,还复制开始时发现的非关键帧。


-init_hw_device type[=名称][:设备[,key=value...]]

使用给定的设备参数初始化一个名为name类型的新硬件设备。如果未指定名称,它将收到格式为“ type%d”的默认名称。


设备的含义和以下参数取决于设备类型:


cuda

设备是CUDA设备的编号。


dxva2

设备是Direct3D 9显示适配器的编号。


vaapi

设备是X11显示名称或DRM渲染节点。如果未指定,它将尝试打开默认的X11显示($ DISPLAY),然后打开第一个DRM渲染节点(/dev /dri /renderD128)。


vdpau

设备是X11显示名称。如果未指定,它将尝试打开默认的X11显示($ DISPLAY)。


qsv

设备会在'MFX_IMPL_*'中选择一个值。允许的值为:

auto

sw

hw

auto_any

hw_any

hw2

hw3

hw4

如果未指定,则使用“ auto_any”。 (请注意,通过创建适合平台的子设备(“ dxva2”或“ vaapi”),然后从中派生QSV设备,可能更容易实现QSV的预期结果。)


opencl

设备选择平台和设备作为platform_index.device_index。


也可以使用键值对过滤设备集,以仅查找与特定平台或设备字符串匹配的设备。


可用作过滤器的字符串为:

platform_profile

platform_version

platform_name

platform_vendor

platform_extensions

device_name

device_vendor

driver_version

device_version

device_profile

device_extensions

device_type

索引和过滤器必须一起唯一地选择一个设备。


例子:


-init_hw_device opencl:0.1

在第一个平台上选择第二个设备。


-init_hw_device opencl:,device_name = Foo9000

选择名称包含字符串Foo9000的设备。


-init_hw_device opencl:1,device_type = gpu,device_extensions=cl_khr_fp16

在支持cl_khr_fp16扩展的第二个平台上选择GPU设备。

vulkan

如果device是整数,它将通过与系统相关的设备列表中的索引来选择设备。 如果device是任何其他字符串,它将选择名称包含该字符串作为子字符串的第一个设备。


可以识别以下选项:


debug

如果设置为1,则启用验证层(如果已安装)。


linear_images

如果设置为1,则hwcontext分配的图像将是线性的并且可以本地映射。


instance_extensions

要启用的其他实例扩展的加号分隔列表。


device_extensions

要启用的其他设备扩展的加号分隔列表。


例子:


-init_hw_device vulkan:1

选择系统上的第二个设备。


-init_hw_device vulkan:RADV

选择名称包含字符串RADV的第一台设备。


-init_hw_device vulkan:0,instance_extensions=VK_KHR_wayland_surface+VK_KHR_xcb_surface

选择第一个设备并启用Wayland和XCB实例扩展。

-init_hw_device type[=name]@source

初始化类型为name的新硬件设备,从具有name source的现有设备派生它。


-init_hw_device list

列出此ffmpeg版本支持的所有硬件设备类型。


-filter_hw_device name

将名为名称的硬件设备传递给任何过滤器图中的所有过滤器。 这可用于设置要通过hwupload过滤器上传到的设备,或用于通过hwmap过滤器映射到的设备。 其他过滤器在需要硬件设备时也可以使用此参数。 请注意,这通常仅在输入尚未在硬件框架中时才需要-当存在时,过滤器将从它们作为输入接收的框架的上下文中派生出它们所需的设备。


这是全局设置,因此所有过滤器都将接收同一设备。


-hwaccel [:stream_specifier] hwaccel(输入,每个流)

使用硬件加速来解码匹配的流。 hwaccel的允许值为:

none

不要使用任何硬件加速(默认设置)。


auto

自动选择硬件加速方法。


vdpau

使用VDPAU(Unix视频解码和演示API)硬件加速。


dxva2

使用DXVA2(DirectX视频加速)硬件加速。


vaapi

使用VAAPI(视频加速API)硬件加速。


qsv

使用英特尔QuickSync视频加速进行视频转码。


与大多数其他值不同,此选项不会启用加速解码(在选择qsv解码器时会自动使用),而是加速转码,而无需将帧复制到系统内存中。


为了使其正常工作,解码器和编码器均必须支持QSV加速,并且不得使用任何滤波器。


如果所选的hwaccel不可用或所选的解码器不支持,则此选项无效。


请注意,大多数加速方法都旨在播放,并且不会比现代CPU上的软件解码更快。此外,ffmpeg通常将需要将解码后的帧从GPU内存复制到系统内存中,从而导致进一步的性能损失。因此,此选项主要用于测试。


-hwaccel_device [:stream_specifier] hwaccel_device(每流输入)

选择用于硬件加速的设备。


仅当还指定了-hwaccel选项时,此选项才有意义。它可以按名称引用使用-init_hw_device创建的现有设备,也可以创建新设备,就像之前调用过“ -init_hw_device”类型:hwaccel_device一样。


-hwaccels

列出此ffmpeg版本支持的所有硬件加速方法。


标签: FFmpegffmpeg教程ffmpeg命令ffmpeg参数ffmpeg文档ffmpeg手册