如何使mpv与ffmpeg过滤器(如minterpolate)更兼容?

如何使mpv与ffmpeg过滤器(如minterpolate)更兼容?,ffmpeg,configuration,filtering,video-processing,mpv,Ffmpeg,Configuration,Filtering,Video Processing,Mpv,ffmpeg过滤器minterpolate(运动插值)在MPV中不起作用 (尽管如此,该文件在没有Minterpole的情况下正常播放) (我使用搜索引擎和整个文档进行了研究,并对使用opengl进行了故障排除,通常除了寻求帮助和学习了解更多源代码之外,我还尝试了其他一切,而我不是一名程序员) --gpu context=angle--gpu api=opengl也不能使opengl工作。(我猜opengl可以在文档中看到它的使用) 注 要获取可用视频过滤器的完整列表,请参见--vf=help和

ffmpeg过滤器minterpolate(运动插值)在MPV中不起作用

(尽管如此,该文件在没有Minterpole的情况下正常播放)

(我使用搜索引擎和整个文档进行了研究,并对使用opengl进行了故障排除,通常除了寻求帮助和学习了解更多源代码之外,我还尝试了其他一切,而我不是一名程序员)

--gpu context=angle--gpu api=opengl
也不能使opengl工作。(我猜opengl可以在文档中看到它的使用)

要获取可用视频过滤器的完整列表,请参见--vf=help和

此外,请记住,大多数实际过滤器都是通过 lavfi包装器,它允许您访问大多数libavfilter的 过滤器。这包括从MPlayer移植的所有筛选器 到libavfilter

大多数内置过滤器在某些方面是不推荐的,除非它们只是 在mpv中可用(例如处理mpv细节的过滤器,或 仅在mpv中实现)

如果没有内置过滤器,lavfi桥接器将自动关闭 尝试此网桥不支持帮助输出,也不验证 实际使用过滤器之前的参数。虽然mpv语法 与libavfilter非常相似,但不同。(这意味着 并不是vf_lavfi的图形选项接受的所有内容都会被 --vf.)

您还可以在过滤器名称前面加上lavfi-以强制包装。 如果筛选器名称与不推荐的mpv冲突,这将非常有用 内置过滤器。例如--vf=lavfi scale=args将使用 libavfilter的比例过滤器优于mpv不推荐的内置过滤器

我希望MPV能够启用minterpolate(MPV可以使用的几个过滤器之一,在中列出)。但事实就是这样:

输入:
“--vf=lavfi=[minterpolite=fps=60000/1001:mi_mode=mci]”

输出:

   cplayer:  (+) Video --vid=1 (*) (h264 1280x720 29.970fps)
   cplayer:  (+) Audio --aid=1 (*) (aac 2ch 44100Hz)
        vd: Using hardware decoding (d3d11va).
    ffmpeg: Impossible to convert between the formats supported by the filter 'mpv_src_in0' and the filter 'auto_scaler_0'
     lavfi: failed to configure the filter graph
        vf: Disabling filter lavfi.00 because it has failed.

(有趣的是,
--gpu api=opengl
不起作用(尽管根据规范,my to Burag HD Graphics 400 Braswell支持其4.2版本)…而且
示例
似乎也没有任何效果,而且选择的音频过滤器很少,播放通常不会启动,也不会输出错误。)

问题在于,您使用的是硬件解码,而没有将解码后的视频复制回系统内存。这意味着您的视频过滤器无法访问它。修复方法很简单,但是错误消息使得很难解决这个问题

要解决此问题,只需传入
--hwdec=no
。虽然在mci模式下,
--hwdec=auto copy
也可以修复它,但是
minterpolate
占用大量CPU,因此也没有必要使用硬件解码。(对于大多数视频源)

总之:
mpv-input.mkv--hwdec=no--vf=lavfi=“[minterpolite=fps=60000/1001:mi_mode=mci]”

说明:最有效的硬件解码不会在解码后将视频数据复制回系统内存。但是,您需要将其存储在内存中,以便根据解码的视频数据运行基于CPU的过滤。您要求mpv进行一些视频过滤,但它无法访问解码的视频数据

更多详情请参阅:

自动复制
仅选择解码后将视频数据复制回系统内存的模式。这将选择类似于
vaapi copy
(等等)的模式。如果这些都不起作用,则禁用硬件解码。与软件解码相比,这种模式通常保证不会产生额外的质量损失(假设使用现代编解码器和无错误的视频流),并允许CPU使用视频过滤器进行处理。此模式适用于所有视频过滤器和VO

由于这些模式将解码后的视频复制回系统RAM,因此它们的效率通常低于直接模式,并且可能对软件解码没有太大帮助。


问题是,您使用的是硬件解码,而没有将解码后的视频复制回系统内存。这意味着您的视频过滤器无法访问它。修复方法很简单,但是错误消息使得很难解决这个问题

要解决此问题,只需传入
--hwdec=no
。虽然在mci模式下,
--hwdec=auto copy
也可以修复它,但是
minterpolate
占用大量CPU,因此也没有必要使用硬件解码。(对于大多数视频源)

总之:
mpv-input.mkv--hwdec=no--vf=lavfi=“[minterpolite=fps=60000/1001:mi_mode=mci]”

说明:最有效的硬件解码不会在解码后将视频数据复制回系统内存。但是,您需要将其存储在内存中,以便根据解码的视频数据运行基于CPU的过滤。您要求mpv进行一些视频过滤,但它无法访问解码的视频数据

更多详情请参阅:

自动复制
仅选择解码后将视频数据复制回系统内存的模式。这将选择类似于
vaapi copy
(等等)的模式。如果这些都不起作用,则禁用硬件解码。与软件解码相比,这种模式通常保证不会产生额外的质量损失(假设使用现代编解码器和无错误的视频流),并允许CPU使用视频过滤器进行处理。此模式适用于所有视频过滤器和VO

由于这些模式将解码后的视频复制回系统RAM,因此它们的效率通常低于直接模式,并且可能对软件解码没有太大帮助。


如果mpv的语法支持多个过滤器,那么在
minterpolate=…
@Gyan之前插入format=yuv420p,我找到并尝试了所有的yuv420p格式,如:'--hwdec image format=yuv420p--vf=lavfi format=yuv420p,format=fmt=yuv420p,lavfi minterpolate=fps=75'仍不工作。如果您的